diff --git a/.github/actions/pre-commit/action.yml b/.github/actions/pre-commit/action.yml index dc34edc248..8b1efe67ec 100644 --- a/.github/actions/pre-commit/action.yml +++ b/.github/actions/pre-commit/action.yml @@ -7,7 +7,7 @@ runs: steps: - uses: actions/setup-python@v4 with: - python-version: "3.x" + python-version: "3.13" # FIXME: pin pre-commit<4 pending PyCQA/docformatter#287 - name: install pre-commit run: python -m pip install 'pre-commit<4' diff --git a/.github/workflows/_build-pkg.yml b/.github/workflows/_build-pkg.yml index 980efbac0a..7e50198e9f 100644 --- a/.github/workflows/_build-pkg.yml +++ b/.github/workflows/_build-pkg.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.x' @@ -26,7 +26,7 @@ jobs: - name: Check 📦 package run: twine check dist/* - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: ${{ inputs.artifact-name }} path: dist diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db7c5bcfac..8b95212bed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,16 +24,16 @@ jobs: fail-fast: false matrix: # keep in sync with tox.ini [gh-actions] section - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] os: ["ubuntu-latest"] os-label: ["Ubuntu"] include: - - {python-version: "3.8", os: "windows-latest", os-label: "Windows"} - - {python-version: "3.8", os: "macos-latest", os-label: "macOS"} + - {python-version: "3.9", os: "windows-latest", os-label: "Windows"} + - {python-version: "3.9", os: "macos-latest", os-label: "macOS"} steps: - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "${{ matrix.python-version }}" - name: Install tox @@ -44,12 +44,12 @@ jobs: run: tox - name: Upload Test Results if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Test Results (Python ${{ matrix.python-version }} on ${{ matrix.os-label }}) path: pytest.xml - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v5 test_success: # this aggregates success state of all jobs listed in `needs` @@ -82,7 +82,7 @@ jobs: ref: ${{ github.event.pull_request.base.sha }} path: base - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.12" - name: Set up dependencies @@ -132,7 +132,7 @@ jobs: ref: ${{ github.event.pull_request.base.sha }} path: base - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.12" - name: Set up dependencies @@ -194,7 +194,7 @@ jobs: ref: ${{ github.event.pull_request.base.sha }} path: base - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.12" - name: Set up dependencies @@ -291,7 +291,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Upload - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Event File path: ${{ github.event_path }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 7b95714172..89363817f8 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -67,7 +67,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -95,6 +95,6 @@ jobs: exit 1 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@v4 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5422e6a645..4e7df93442 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: "3.x" diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml index 81612e7c04..d408c9f945 100644 --- a/.github/workflows/openapi.yml +++ b/.github/workflows/openapi.yml @@ -39,7 +39,7 @@ jobs: git config --local user.name "${{ github.actor }}" git config --local user.email "github-action-${{ github.actor }}@users.noreply.github.com" - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.12" - name: Set up dependencies @@ -63,7 +63,7 @@ jobs: - name: Changes run: | # Show changes - git branch -a | grep openapi/autosync- | grep -v -E -e "-[0-9]+$" | while read branch; do + git branch -a | sed -e "s/^\s*//" | grep "^openapi/autosync-" | grep -v -E -e "-[0-9]+$" | while read branch; do echo "::group::$branch" git log --oneline "$branch...openapi/main" git diff openapi/main "$branch" @@ -75,7 +75,7 @@ jobs: cat openapi-update-classes.log - name: Upload logs if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Sync logs path: | @@ -84,9 +84,12 @@ jobs: run: | # Commit changes git checkout -b openapi/autosync - git branch -a | grep openapi/autosync- | grep -v -E -e "-[0-9]+$" | while read branch; do + git branch -a | sed -e "s/^\s*//" | grep "^openapi/autosync-" | grep -v -E -e "-[0-9]+$" | while read branch; do echo "::group::$branch" git merge --squash "$branch" + echo "Squashed changes for ${branch#openapi/autosync-}" > git-msg + tail -n +2 .git/COMMIT_EDITMSG >> git-msg + mv git-msg .git/COMMIT_EDITMSG git commit --no-edit echo "::endgroup::" done @@ -112,10 +115,10 @@ jobs: - name: Changes run: | # Show changes - git branch -a | grep openapi/autosync-new-classes- | grep -v -E -e "-[0-9]+$" | while read branch; do + git branch -a | sed -e "s/^\s*//" | grep "^openapi/autosync-new-classes-" | grep -v -E -e "-[0-9]+$" | while read branch; do echo "::group::$branch" git log --oneline "$branch...openapi/main" - git diff openapi/main "$branch" + git diff openapi/autosync "$branch" echo "::endgroup::" done - name: Log on error @@ -124,7 +127,7 @@ jobs: cat openapi-update-classes.log - name: Upload logs if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Create new classes logs path: | @@ -133,15 +136,18 @@ jobs: run: | # Commit changes git checkout -b openapi/autosync-new-classes - git branch -a | grep openapi/autosync-new-classes- | grep -v -E -e "-[0-9]+$" | while read branch; do + git branch -a | sed -e "s/^\s*//" | grep "^openapi/autosync-new-classes-" | grep -v -E -e "-[0-9]+$" | while read branch; do echo "::group::$branch" git merge --squash "$branch" || true + echo "Squashed changes for ${branch#openapi/autosync-new-classes-}" > git-msg + tail -n +2 .git/COMMIT_EDITMSG >> git-msg + mv git-msg .git/COMMIT_EDITMSG git commit --no-edit || true echo "::endgroup::" done # push if there are changes - if ! git diff --quiet openapi/main; then + if ! git diff --quiet openapi/autosync; then echo "Pushing changes to origin openapi/autosync-new-classes" git push origin openapi/autosync-new-classes fi diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 92f4b74f60..93184ac4f9 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -1,4 +1,6 @@ name: Publish to PyPI +permissions: + contents: read on: push: tags: ["*"] # this will run full workflow including publish to PyPI @@ -14,7 +16,7 @@ jobs: needs: [build] runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@v5 + - uses: actions/download-artifact@v6 with: name: package path: dist diff --git a/.github/workflows/test-results.yml b/.github/workflows/test-results.yml index 0700c25319..5975bea7e3 100644 --- a/.github/workflows/test-results.yml +++ b/.github/workflows/test-results.yml @@ -18,7 +18,7 @@ jobs: steps: - name: Download and Extract Artifacts - uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d + uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe with: run_id: ${{ github.event.workflow_run.id }} path: artifacts diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 77edde3390..d212f590bd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: rev: v3.15.0 hooks: - id: pyupgrade - args: ["--py38-plus"] + args: ["--py39-plus"] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.1.7 diff --git a/doc/changes.rst b/doc/changes.rst index c41b4997c0..23e14347f4 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -4,6 +4,149 @@ Change log Stable versions ~~~~~~~~~~~~~~~ +Version 2.9.0 (March 22, 2026) +------------------------------ + +Notable changes +^^^^^^^^^^^^^^^ + +Lazy PyGithub objects +""""""""""""""""""""" + +The notion of lazy objects has been added to some PyGithub classes in version 2.6.0. +This release now makes all ``CompletableGithubObject``\s optionally lazy (if useful). +See `#3403 `_ for a complete list. + +In lazy mode, getting a PyGithub object does not send a request to the GitHub API. +Only accessing methods and properties sends the necessary requests to the GitHub API: + +.. code-block:: python + + # Use lazy mode + g = Github(auth=auth, lazy=True) + + # these method calls do not send requests to the GitHub API + user = g.get_user("PyGithub") # get the user + repo = user.get_repo("PyGithub") # get the user's repo + pull = repo.get_pull(3403) # get a known pull request + issue = pull.as_issue() # turn the pull request into an issue + + # these method and property calls send requests to Github API + issue.create_reaction("rocket") # create a reaction + created = repo.created_at # get property of lazy object repo + + # once a lazy object has been fetched, all properties are available (no more requests) + licence = repo.license + +All PyGithub classes that implement ``CompletableGithubObject`` support lazy mode (if useful). +This is only useful for classes that have methods creating, changing, or getting objects. + +By default, PyGithub objects are not lazy. + +PyGithub objects with a paginated property +"""""""""""""""""""""""""""""""""""""""""" + +The GitHub API has the "feature" of paginated properties. +Some objects returned by the API have a property that allows for pagination. +Fetching subsequent pages of that property means fetching the entire object (with all other properties) +and the specified page of the paginated property. Iterating over the paginated property means fetching +all other properties multiple times. Fortunately, the allowed size of each page (``per_page`` is usually 300, +in contrast to the "usual" ``per_page`` maximum of 100). + +Objects with paginated properties: + +- Commit.files +- Comparison.commits +- EnterpriseConsumedLicenses.users + +This PR makes iterating those paginated properties use the configured ``per_page`` setting. + +It further allows to specify an individual ``per_page`` when either retrieving such objects, +or fetching paginated properties. + +See :ref:`Classes with paginated properties ` for details. + +Drop Python 3.8 support due to End-of-Life +"""""""""""""""""""""""""""""""""""""""""" + +Python 3.8 reached its end-of-life September 6, 2024. Support has been removed with this release. + +Deprecations +^^^^^^^^^^^^ + +* Method ``delete`` of ``Reaction`` is deprecated, use ``IssueComment.delete_reaction``, + ``PullRequestComment.delete_reaction``, ``CommitComment.delete_reaction`` or ``Issue.delete_reaction`` instead. +* Method ``Issue.assignee`` and parameter ``Issue.edit(assignee=…)`` are deprecated, + use ``Issue.assignees`` and ``Issue.edit(assignees=…)`` instead. +* Method ``Organization.edit_hook`` is deprecated, use ``Organization.get_hook(id).edit(…)`` instead. + If you need to avoid ``Organization.get_hook(id)`` to fetch the ``Hook`` object from Github API, + use a lazy Github instance: + +.. code-block:: python + + Github(…, lazy=True).get_organization(…).get_hook(id).edit(…) + +* Methods ``Team.add_to_members`` and ``Team.remove_from_members`` are deprecated, + use ``Team.add_membership`` or ``Team.remove_membership`` instead. + +New Features +^^^^^^^^^^^^ +* Consider per-page settings when iterating paginated properties (`#3377 `_) (`b1a9b7e2a `_) +* Add Secret Scanning Alerts and Improve Code Scan Alerts (`#3307 `_) (`646190988 `_) + +Improvements +^^^^^^^^^^^^ +* Make more objects lazy (`#3403 `_) (`e79d9bc1e `_) +* Allow for enterprise base url prefixed with ``api.`` (`#3419 `_) (`61dcf49d3 `_) +* Add ``throw`` option to ``Workflow.create_dispatch`` to raise exceptions (`#2966 `_) (`19e1c5032 `_) +* Use ``GET`` url or ``_links.self`` as object url (`#3421 `_) (`3716bab10 `_) +* Add support for ``type`` parameter to get_issues (`#3381 `_) (`22263b72f `_) +* Align implemented paths with OpenAPI spec (`#3413 `_) (`0ede65793 `_) +* Add suggested OpenAPI schemas (`#3411 `_) (`a0a9f0172 `_) +* Apply OpenAPI schemas (`#3412 `_) (`c92f5552c `_) + +Bug Fixes +^^^^^^^^^ +* Fix ``PaginatedList.totalCount`` returning 0 with GitHub deprecation notices (`#3382 `_) (`c4ec16a18 `_) +* Use default type if known type is not supported (`#3365 `_) (`f5f9756a1 `_) + +Maintenance +^^^^^^^^^^^ + +* Deprecate ``Reaction.delete`` (`#3435 `_) (`f2540db50 `_) +* Deprecate ``Issue.assignee`` (`#3366 `_) (`8a0fa32de `_) +* Deprecate ``Organization.edit_hook`` (`#3404 `_) (`d7395df9c `_) +* Deprecate ``Team.add_to_members`` and ``Team.remove_from_members`` (`#3368 `_) (`78050d397 `_) + +* Various minor OpenAPI fixes (`#3375 `_) (`7de26441c `_) + +* Update test key pair (`#3453 `_) (`24305f6d6 `_) +* Pin CI lint Python version to 3.13 (`#3406 `_) (`786c37c53 `_) +* Improve error message on replay data mismatch (`#3385 `_) (`#3386 `_) (`8be9c5cb9 `_) (`927cf227a `_) +* Disable sleeps in tests (`#3383 `_) (`4294a652e `_) + +* Update autodoc defaults (`#3369 `_) (`0b4503cb6 `_) + +* Add Python 3.14 to CI and tox (`#3429 `_) (`95648db47 `_) +* Restrict PyPi release workflow permissions (`#3418 `_) (`ae23d6075 `_) +* Fix OpenApi workflow (`#3389 `_) (`9e1c2bfe5 `_) +* Bump codecov/codecov-action from 3 to 5 (`#3284 `_) (`5752d52e7 `_) +* Bump actions/setup-python from 5 to 6 (`#3370 `_) (`1f5f434b3 `_) +* Bump dawidd6/action-download-artifact from 3.0.0 to 3.1.4 (`#3282 `_) (`5db532b87 `_) +* Bump github/codeql-action from 3 to 4 (`#3391 `_) (`47478b002 `_) +* Bump actions/upload-artifact from 4 to 5 (`#3394 `_) (`8b87fd1c8 `_) +* Bump actions/download-artifact from 5 to 6 (`#3393 `_) (`511f3b3f4 `_) + +* Drop Python 3.8 support due to EOL (`#3191 `_) (`3ccecbb99 `_) +* Merge changelog updates from v2.8 release branch (`#3367 `_) (`4a353f730 `_) + +Version 2.8.1 (September 02, 2025) +---------------------------------- + +Bug Fixes +^^^^^^^^^ +* Use default type if known type is not supported (`#3365 `_) (`40506415 `_) + Version 2.8.0 (September 02, 2025) ---------------------------------- @@ -845,7 +988,7 @@ Bug Fixes & Improvements * Add support for repository autolink references (`#2016 `_) (`0fadd6be `_) * Add retry and pool_size to typing (`#2151 `_) (`784a3efd `_) * Fix/types for repo topic team (`#2341 `_) (`db9337a4 `_) -* Add class Artifact (`#2313 `_) (#2319) (`437ff845 `_) +* Add class Artifact (`#2313 `_) (`#2319 `_) (`437ff845 `_) Version 1.56 (October 13, 2022) ----------------------------------- @@ -928,7 +1071,7 @@ Version 1.54.1 (December 24, 2020) * Add pyupgrade to pre-commit configuration (`#1783 `_) (`e113e37d `_) * Fix #1731: Incorrect annotation (`82c349ce `_) * Drop support for Python 3.5 (`#1770 `_) (`63e4fae9 `_) -* Revert "Pin requests to <2.25 as well (`#1757 `_)" (#1763) (`a806b523 `_) +* Revert "Pin requests to <2.25 as well (`#1757 `_)" (`#1763 `_) (`a806b523 `_) * Fix stubs file for Repository (`fab682a5 `_) Version 1.54 (November 30, 2020) @@ -1171,12 +1314,12 @@ Version 1.44.1 (November 07, 2019) * Add Python 3.8 to classifiers list (`#1280 `_) (`fec6034a `_) * Expand Topic class and add test coverage (`#1252 `_) (`ac682742 `_) -* Add support for team discussions (`#1246 `_) (#1249) (`ec3c8d7b `_) +* Add support for team discussions (`#1246 `_) (`#1249 `_) (`ec3c8d7b `_) * Correct API for NamedUser.get_organization_membership (`#1277 `_) (`077c80ba `_) * Correct header check for 2FA required (`#1274 `_) (`6ad592b1 `_) * Use replay framework for Issue142 test (`#1271 `_) (`4d258d93 `_) * Sync httpretty version requirement with setup.py (`#1265 `_) (`99d38468 `_) -* Handle unicode strings when recording responses (`#1253 `_) (#1254) (`faa1bbd6 `_) +* Handle unicode strings when recording responses (`#1253 `_) (`#1254 `_) (`faa1bbd6 `_) * Add assignee removal/addition support to PRs (`#1241 `_) (`a163ba15 `_) * Check if the version is empty in manage.sh (`#1268 `_) (`db294837 `_) * Encode content for {create,update}_file (`#1267 `_) (`bc225f9d `_) diff --git a/doc/conf.py b/doc/conf.py index cdf8e9b89a..496a883ee9 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,7 +13,9 @@ # Copyright 2023 Enrico Minack # # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2023 Liuyang Wan # +# Copyright 2025 Aidan McNay # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -40,7 +42,7 @@ import os import re import sys -from typing import Iterable +from collections.abc import Iterable # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -275,7 +277,7 @@ # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' -autodoc_default_flags = ["members"] +autodoc_default_options = {"members": True} autodoc_member_order = "bysource" autoclass_content = "both" @@ -368,7 +370,7 @@ def get_base_classes(class_definition: str) -> Iterable[str]: ]: method = None isProperty = False - if line.startswith(" :calls: `"): + if line.startswith(" :calls: `") and method: for callee in line[16:].split(" or "): verb, url = callee[1:].split(" ")[0:2] if url not in methods: @@ -376,7 +378,6 @@ def get_base_classes(class_definition: str) -> Iterable[str]: if verb not in methods[url]: methods[url][verb] = set() methods[url][verb].add(":meth:`" + module + "." + githubObjectClass + "." + method + "`") - method = None methods["/markdown/raw"] = dict() methods["/markdown/raw"]["POST"] = ["Not implemented, see ``/markdown``"] diff --git a/doc/examples.rst b/doc/examples.rst index f1fd9b14fc..9fe12f8b3f 100644 --- a/doc/examples.rst +++ b/doc/examples.rst @@ -4,6 +4,7 @@ Examples .. toctree:: examples/Authentication + examples/LazyMode examples/MainClass examples/Repository examples/Branch diff --git a/doc/examples/LazyMode.rst b/doc/examples/LazyMode.rst new file mode 100644 index 0000000000..5f6ee5bebe --- /dev/null +++ b/doc/examples/LazyMode.rst @@ -0,0 +1,28 @@ +Lazy Mode +========= + +In lazy mode, getting a PyGithub object does not send a request to the GitHub API. +Only accessing methods and properties sends the necessary requests to the GitHub API: + +.. code-block:: python + + # Use lazy mode + g = Github(auth=auth, lazy=True) + + # these method calls do not send requests to the GitHub API + user = g.get_user("PyGithub") # get the user + repo = user.get_repo("PyGithub") # get the user's repo + pull = repo.get_pull(3403) # get a known pull request + issue = pull.as_issue() # turn the pull request into an issue + + # these method and property calls send requests to Github API + issue.create_reaction("rocket") # create a reaction + created = repo.created_at # get property of lazy object repo + + # once a lazy object has been fetched, all properties are available (no more requests) + licence = repo.license + +All PyGithub classes that implement ``CompletableGithubObject`` support lazy mode (if useful). +This is only useful for classes that have methods creating, changing, or getting objects. + +By default, PyGithub objects are not lazy. diff --git a/doc/introduction.rst b/doc/introduction.rst index 3fd701ae34..9914fd2c86 100644 --- a/doc/introduction.rst +++ b/doc/introduction.rst @@ -18,7 +18,7 @@ First create a Github instance:: # Authentication is defined via github.Auth from github import Auth - # using an access token + # Using an access token auth = Auth.Token("access_token") # Public Web Github @@ -27,6 +27,9 @@ First create a Github instance:: # Github Enterprise with custom hostname g = Github(auth=auth, base_url="https://{hostname}/api/v3") + # Use lazy mode (see https://pygithub.readthedocs.io/en/stable/examples/LazyMode.html) + g = Github(auth=auth, lazy=True) + Then play with your Github objects:: for repo in g.get_user().get_repos(): diff --git a/doc/utilities.rst b/doc/utilities.rst index fd82acf474..8c4992cb9d 100644 --- a/doc/utilities.rst +++ b/doc/utilities.rst @@ -21,14 +21,7 @@ Logging Error Handling -------------- -.. autoclass:: github.GithubException -.. autoclass:: github.BadAttributeException -.. autoclass:: github.BadCredentialsException -.. autoclass:: github.TwoFactorException -.. autoclass:: github.BadUserAgentException -.. autoclass:: github.RateLimitExceededException -.. autoclass:: github.IncompletableObject -.. autoclass:: github.UnknownObjectException +.. automodule:: github.GithubException Default argument ---------------- @@ -40,6 +33,101 @@ Pagination .. autoclass:: github.PaginatedList.PaginatedList() +.. _utilities-classes-with-paginated-properties: + +Classes with paginated properties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The GitHub API has the "feature" of paginated properties. +Some objects returned by the API have a property that allows for pagination. +Fetching subsequent pages of that property means fetching the entire object (with all other properties) +and the specified page of the paginated property. Iterating over the paginated property means fetching +all other properties multiple times. Fortunately, the allowed size of each page (``per_page`` is usually 300, +in contrast to the "usual" ``per_page`` maximum of 100). + +A few classes have paginated properties. The classes and their paginated properties are: + +- :meth:`github.Commit.Commit.files` +- :meth:`github.Comparison.Comparison.commits` +- :meth:`github.EnterpriseConsumedLicenses.EnterpriseConsumedLicenses.users` + +Iterating those properties may fetch multiple pages of items. The size of these pages is controlled by the ``per_page`` setting: + +Objects created directly +"""""""""""""""""""""""" + +Objects created via the following methods fetch the first page of items, together with the object itself. Each method +provides a ``…_per_page`` parameter. The first page and all subsequent pages have this size. + +- :meth:`github.Repository.Repository.compare` with parameter ``comparison_commits_per_page`` +- :meth:`github.Repository.Repository.get_commit` with parameter ``commit_files_per_page`` +- :meth:`github.Enterprise.Enterprise.get_consumed_licenses` with parameter ``licence_users_per_page`` + +Objects created indirectly +"""""""""""""""""""""""""" + +Objects returned by other methods fetches pages with page size as configured via ``Github(per_page=…)`` (unless ``Github(per_page=30)``). + +The classes also provide a ``get`` method to fetches the paginated property with a given page size: + +- :meth:`github.Commit.Commit.get_files` with parameter ``commit_files_per_page`` +- :meth:`github.Comparison.Comparison.get_commits` with parameter ``comparison_commits_per_page`` +- :meth:`github.EnterpriseConsumedLicenses.EnterpriseConsumedLicenses.get_users` with parameter ``licence_users_per_page`` + +PyGithub per_page setting +""""""""""""""""""""""""" + +If none of the above ``…_per_page`` parameters is set, the value given via ``Github(per_page=…)`` is used instead (unless ``Github(per_page=30)``). +If no value for ``Github(per_page=…)`` is given, the GitHub API defines a default page size for each paginated property. + +Example: + +.. code-block:: python + + sha = "c4ec16a18bb4401e89967a8e395103c95cca5c2f" + repo_name = "PyGithub/PyGithub" + + # page size for paginated lists returned by get_… methods + g = github.Github(per_page=100) + repo = g.get_repo(repo_name) + + # page size for the Commit.files property only + commit = repo.get_commit(sha, commit_files_per_page=300) + + # files are fetched in pages of 300, not 100, + # where the first page has already been retrieved via repo.get_commit + for file in commit.files: + pass + +Alternatively, a ``get_*`` method exists for each paginated property, which allows to provide a +``per_page`` argument. This method is usually useful if the object is retrieved indirectly. + +Example: + +.. code-block:: python + + sha1 = "18eeb269686aa5ee61ee7305ffbc3f0146c0bf5c" + sha2 = "c4ec16a18bb4401e89967a8e395103c95cca5c2f" + repo_name = "PyGithub/PyGithub" + + # page size for paginated lists returned by methods + g = github.Github(per_page=100) + repo = g.get_repo(repo_name) + + # page size for the Compare.commits property only + compare = repo.compare(sha1, sha2, comparison_commits_per_page=1) + + # iterating over Compare.commits happens in pages of 1 + commit = compare.commits[0] + + # here, files are fetched with configured page size of 100 + for file in commit.files: + pass + + # here, files are fetched in pages of 300 + for file in commit.get_files(per_page=300): + pass + Input classes ------------- diff --git a/github/AuthenticatedUser.py b/github/AuthenticatedUser.py index a021e2c9a1..40a6b8cd14 100644 --- a/github/AuthenticatedUser.py +++ b/github/AuthenticatedUser.py @@ -149,12 +149,19 @@ class AuthenticatedUser(CompletableGithubObject): This class represents AuthenticatedUsers as returned by https://docs.github.com/en/rest/reference/users#get-the-authenticated-user An AuthenticatedUser object can be created by calling ``get_user()`` on a Github object. + + The OpenAPI schema can be found at + + - /components/schemas/private-user + - /components/schemas/public-user + """ def _initAttributes(self) -> None: self._avatar_url: Attribute[str] = NotSet self._bio: Attribute[str] = NotSet self._blog: Attribute[str] = NotSet + self._business_plus: Attribute[bool] = NotSet self._collaborators: Attribute[int] = NotSet self._company: Attribute[str] = NotSet self._created_at: Attribute[datetime] = NotSet @@ -170,10 +177,12 @@ def _initAttributes(self) -> None: self._hireable: Attribute[bool] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet + self._ldap_dn: Attribute[str] = NotSet self._location: Attribute[str] = NotSet self._login: Attribute[str] = NotSet self._name: Attribute[str] = NotSet self._node_id: Attribute[str] = NotSet + self._notification_email: Attribute[str] = NotSet self._organizations_url: Attribute[str] = NotSet self._owned_private_repos: Attribute[int] = NotSet self._plan: Attribute[github.Plan.Plan] = NotSet @@ -186,10 +195,12 @@ def _initAttributes(self) -> None: self._starred_url: Attribute[str] = NotSet self._subscriptions_url: Attribute[str] = NotSet self._total_private_repos: Attribute[int] = NotSet + self._twitter_username: Attribute[str] = NotSet self._two_factor_authentication: Attribute[bool] = NotSet self._type: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet + self._user_view_type: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"login": self._login.value}) @@ -209,6 +220,11 @@ def blog(self) -> str: self._completeIfNotSet(self._blog) return self._blog.value + @property + def business_plus(self) -> bool: + self._completeIfNotSet(self._business_plus) + return self._business_plus.value + @property def collaborators(self) -> int: self._completeIfNotSet(self._collaborators) @@ -284,6 +300,11 @@ def id(self) -> int: self._completeIfNotSet(self._id) return self._id.value + @property + def ldap_dn(self) -> str: + self._completeIfNotSet(self._ldap_dn) + return self._ldap_dn.value + @property def location(self) -> str: self._completeIfNotSet(self._location) @@ -304,6 +325,11 @@ def node_id(self) -> str: self._completeIfNotSet(self._node_id) return self._node_id.value + @property + def notification_email(self) -> str: + self._completeIfNotSet(self._notification_email) + return self._notification_email.value + @property def organizations_url(self) -> str: self._completeIfNotSet(self._organizations_url) @@ -364,6 +390,11 @@ def total_private_repos(self) -> int: self._completeIfNotSet(self._total_private_repos) return self._total_private_repos.value + @property + def twitter_username(self) -> str: + self._completeIfNotSet(self._twitter_username) + return self._twitter_username.value + @property def two_factor_authentication(self) -> bool: self._completeIfNotSet(self._two_factor_authentication) @@ -384,6 +415,11 @@ def url(self) -> str: self._completeIfNotSet(self._url) return self._url.value + @property + def user_view_type(self) -> str: + self._completeIfNotSet(self._user_view_type) + return self._user_view_type.value + def add_to_emails(self, *emails: str) -> None: """ :calls: `POST /user/emails `_ @@ -394,7 +430,7 @@ def add_to_emails(self, *emails: str) -> None: def add_to_following(self, following: NamedUser) -> None: """ - :calls: `PUT /user/following/{user} `_ + :calls: `PUT /user/following/{username} `_ """ assert isinstance(following, github.NamedUser.NamedUser), following headers, data = self._requester.requestJsonAndCheck("PUT", f"/user/following/{following._identity}") @@ -508,7 +544,7 @@ def create_repo_from_template( headers, data = self._requester.requestJsonAndCheck( "POST", - f"/repos/{repo.owner.login}/{repo.name}/generate", + f"/repos/{repo.full_name}/generate", input=post_parameters, headers={"Accept": "application/vnd.github.v3+json"}, ) @@ -668,6 +704,7 @@ def edit( headers, data = self._requester.requestJsonAndCheck("PATCH", "/user", input=post_parameters) self._useAttributes(data) + self._set_complete() def get_authorization(self, id: int) -> Authorization: """ @@ -788,7 +825,7 @@ def get_user_issues( def get_key(self, id: int) -> UserKey: """ - :calls: `GET /user/keys/{id} `_ + :calls: `GET /user/keys/{key_id} `_ """ assert isinstance(id, int), id headers, data = self._requester.requestJsonAndCheck("GET", f"/user/keys/{id}") @@ -802,7 +839,7 @@ def get_keys(self) -> PaginatedList[UserKey]: def get_notification(self, id: str) -> Notification: """ - :calls: `GET /notifications/threads/{id} `_ + :calls: `GET /notifications/threads/{thread_id} `_ """ assert isinstance(id, str), id @@ -841,7 +878,7 @@ def get_notifications( def get_organization_events(self, org: Organization) -> PaginatedList[Event]: """ - :calls: `GET /users/{user}/events/orgs/{org} `_ + :calls: `GET /users/{username}/events/orgs/{org} `_ """ assert isinstance(org, github.Organization.Organization), org return PaginatedList( @@ -862,9 +899,9 @@ def get_repo(self, name: str) -> Repository: :calls: `GET /repos/{owner}/{repo} `_ """ assert isinstance(name, str), name - name = urllib.parse.quote(name) - headers, data = self._requester.requestJsonAndCheck("GET", f"/repos/{self.login}/{name}") - return github.Repository.Repository(self._requester, headers, data, completed=True) + name = urllib.parse.quote(name, safe="") + url = f"/repos/{self.login}/{name}" + return github.Repository.Repository(self._requester, url=url) def get_repos( self, @@ -938,7 +975,7 @@ def get_installations(self) -> PaginatedList[Installation]: def has_in_following(self, following: NamedUser) -> bool: """ - :calls: `GET /user/following/{user} `_ + :calls: `GET /user/following/{username} `_ """ assert isinstance(following, github.NamedUser.NamedUser), following status, headers, data = self._requester.requestJson("GET", f"/user/following/{following._identity}") @@ -989,7 +1026,7 @@ def remove_from_emails(self, *emails: str) -> None: def remove_from_following(self, following: NamedUser) -> None: """ - :calls: `DELETE /user/following/{user} `_ + :calls: `DELETE /user/following/{username} `_ """ assert isinstance(following, github.NamedUser.NamedUser), following headers, data = self._requester.requestJsonAndCheck("DELETE", f"/user/following/{following._identity}") @@ -1082,7 +1119,7 @@ def get_migrations(self) -> PaginatedList[Migration]: def get_organization_memberships(self) -> PaginatedList[Membership]: """ - :calls: `GET /user/memberships/orgs/ `_ + :calls: `GET /user/memberships/orgs `_ """ return PaginatedList( github.Membership.Membership, @@ -1096,7 +1133,7 @@ def get_organization_membership(self, org: str) -> Membership: :calls: `GET /user/memberships/orgs/{org} `_ """ assert isinstance(org, str) - org = urllib.parse.quote(org) + org = urllib.parse.quote(org, safe="") headers, data = self._requester.requestJsonAndCheck("GET", f"/user/memberships/orgs/{org}") return github.Membership.Membership(self._requester, headers, data, completed=True) @@ -1107,6 +1144,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._bio = self._makeStringAttribute(attributes["bio"]) if "blog" in attributes: # pragma no branch self._blog = self._makeStringAttribute(attributes["blog"]) + if "business_plus" in attributes: # pragma no branch + self._business_plus = self._makeBoolAttribute(attributes["business_plus"]) if "collaborators" in attributes: # pragma no branch self._collaborators = self._makeIntAttribute(attributes["collaborators"]) if "company" in attributes: # pragma no branch @@ -1137,6 +1176,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + if "ldap_dn" in attributes: # pragma no branch + self._ldap_dn = self._makeStringAttribute(attributes["ldap_dn"]) if "location" in attributes: # pragma no branch self._location = self._makeStringAttribute(attributes["location"]) if "login" in attributes: # pragma no branch @@ -1145,6 +1186,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "notification_email" in attributes: # pragma no branch + self._notification_email = self._makeStringAttribute(attributes["notification_email"]) if "organizations_url" in attributes: # pragma no branch self._organizations_url = self._makeStringAttribute(attributes["organizations_url"]) if "owned_private_repos" in attributes: # pragma no branch @@ -1169,6 +1212,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._subscriptions_url = self._makeStringAttribute(attributes["subscriptions_url"]) if "total_private_repos" in attributes: # pragma no branch self._total_private_repos = self._makeIntAttribute(attributes["total_private_repos"]) + if "twitter_username" in attributes: # pragma no branch + self._twitter_username = self._makeStringAttribute(attributes["twitter_username"]) if "two_factor_authentication" in attributes: self._two_factor_authentication = self._makeBoolAttribute(attributes["two_factor_authentication"]) if "type" in attributes: # pragma no branch @@ -1177,3 +1222,5 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) + if "user_view_type" in attributes: # pragma no branch + self._user_view_type = self._makeStringAttribute(attributes["user_view_type"]) diff --git a/github/Autolink.py b/github/Autolink.py index 9000263e0e..918c1ca32f 100644 --- a/github/Autolink.py +++ b/github/Autolink.py @@ -41,6 +41,7 @@ from __future__ import annotations +from datetime import datetime from typing import Any from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet @@ -63,6 +64,7 @@ def _initAttributes(self) -> None: self._id: Attribute[int] = NotSet self._is_alphanumeric: Attribute[bool] = NotSet self._key_prefix: Attribute[str] = NotSet + self._updated_at: Attribute[datetime] = NotSet self._url_template: Attribute[str] = NotSet def __repr__(self) -> str: @@ -80,6 +82,10 @@ def is_alphanumeric(self) -> bool: def key_prefix(self) -> str: return self._key_prefix.value + @property + def updated_at(self) -> datetime: + return self._updated_at.value + @property def url_template(self) -> str: return self._url_template.value @@ -91,5 +97,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._is_alphanumeric = self._makeBoolAttribute(attributes["is_alphanumeric"]) if "key_prefix" in attributes: # pragma no branch self._key_prefix = self._makeStringAttribute(attributes["key_prefix"]) + if "updated_at" in attributes: # pragma no branch + self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url_template" in attributes: # pragma no branch self._url_template = self._makeStringAttribute(attributes["url_template"]) diff --git a/github/Branch.py b/github/Branch.py index 2e6801a150..ff25e485e4 100644 --- a/github/Branch.py +++ b/github/Branch.py @@ -31,6 +31,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -104,6 +105,7 @@ def _initAttributes(self) -> None: self._protection: Attribute[BranchProtection] = NotSet self._protection_url: Attribute[str] = github.GithubObject.NotSet self._required_approving_review_count: Attribute[int] = NotSet + self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"name": self._name.value}) @@ -142,6 +144,10 @@ def protection_url(self) -> str: def required_approving_review_count(self) -> int: return self._required_approving_review_count.value + @property + def url(self) -> str: + return self._url.value + def get_protection(self) -> BranchProtection: """ :calls: `GET /repos/{owner}/{repo}/branches/{branch}/protection `_ @@ -658,3 +664,5 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._required_approving_review_count = self._makeIntAttribute( attributes["required_approving_review_count"] ) + if "url" in attributes: + self._url = self._makeStringAttribute(attributes["url"]) diff --git a/github/CheckRun.py b/github/CheckRun.py index 5c0f8a74eb..9382bcbb72 100644 --- a/github/CheckRun.py +++ b/github/CheckRun.py @@ -262,6 +262,7 @@ def edit( headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def _useAttributes(self, attributes: dict[str, Any]) -> None: if "app" in attributes: # pragma no branch @@ -291,6 +292,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch diff --git a/github/CheckSuite.py b/github/CheckSuite.py index e07d19ab2b..f618422b78 100644 --- a/github/CheckSuite.py +++ b/github/CheckSuite.py @@ -292,6 +292,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._head_sha = self._makeStringAttribute(attributes["head_sha"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "latest_check_runs_count" in attributes: # pragma no branch self._latest_check_runs_count = self._makeIntAttribute(attributes["latest_check_runs_count"]) if "node_id" in attributes: # pragma no branch diff --git a/github/CodeScanAlert.py b/github/CodeScanAlert.py index 5c2ede9186..56d59d6abe 100644 --- a/github/CodeScanAlert.py +++ b/github/CodeScanAlert.py @@ -8,6 +8,7 @@ # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # # Copyright 2025 ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com># +# Copyright 2026 Matt Davis <35502728+matt-davis27@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -30,16 +31,24 @@ from __future__ import annotations from datetime import datetime -from typing import Any +from typing import TYPE_CHECKING, Any import github.CodeScanAlertInstance import github.CodeScanRule import github.CodeScanTool import github.GithubObject import github.NamedUser +import github.Organization from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet from github.PaginatedList import PaginatedList +if TYPE_CHECKING: + from github.CodeScanAlertInstance import CodeScanAlertInstance + from github.CodeScanRule import CodeScanRule + from github.CodeScanTool import CodeScanTool + from github.NamedUser import NamedUser + from github.Organization import Organization + class CodeScanAlert(NonCompletableGithubObject): """ @@ -48,37 +57,53 @@ class CodeScanAlert(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + The OpenAPI schema can be found at + + - /components/schemas/code-scanning-alert + - /components/schemas/code-scanning-alert-items + """ def _initAttributes(self) -> None: + self._assignees: Attribute[list[NamedUser]] = NotSet self._created_at: Attribute[datetime] = NotSet + self._dismissal_approved_by: Attribute[NamedUser | Organization] = NotSet self._dismissed_at: Attribute[datetime | None] = NotSet - self._dismissed_by: Attribute[github.NamedUser.NamedUser | None] = NotSet + self._dismissed_by: Attribute[NamedUser | None] = NotSet self._dismissed_comment: Attribute[str | None] = NotSet self._dismissed_reason: Attribute[str | None] = NotSet self._fixed_at: Attribute[datetime | None] = NotSet self._html_url: Attribute[str] = NotSet self._instances_url: Attribute[str] = NotSet - self._most_recent_instance: Attribute[github.CodeScanAlertInstance.CodeScanAlertInstance] = NotSet + self._most_recent_instance: Attribute[CodeScanAlertInstance] = NotSet self._number: Attribute[int] = NotSet - self._rule: Attribute[github.CodeScanRule.CodeScanRule] = NotSet + self._rule: Attribute[CodeScanRule] = NotSet self._state: Attribute[str] = NotSet - self._tool: Attribute[github.CodeScanTool.CodeScanTool] = NotSet + self._tool: Attribute[CodeScanTool] = NotSet + self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet def __repr__(self) -> str: - return self.get__repr__({"number": self.number}) + return self.get__repr__({"number": self.number, "id": self.rule.id}) + + @property + def assignees(self) -> list[NamedUser]: + return self._assignees.value @property def created_at(self) -> datetime: return self._created_at.value + @property + def dismissal_approved_by(self) -> NamedUser | Organization: + return self._dismissal_approved_by.value + @property def dismissed_at(self) -> datetime | None: return self._dismissed_at.value @property - def dismissed_by(self) -> github.NamedUser.NamedUser | None: + def dismissed_by(self) -> NamedUser | None: return self._dismissed_by.value @property @@ -102,7 +127,7 @@ def instances_url(self) -> str: return self._instances_url.value @property - def most_recent_instance(self) -> github.CodeScanAlertInstance.CodeScanAlertInstance: + def most_recent_instance(self) -> CodeScanAlertInstance: return self._most_recent_instance.value @property @@ -110,7 +135,7 @@ def number(self) -> int: return self._number.value @property - def rule(self) -> github.CodeScanRule.CodeScanRule: + def rule(self) -> CodeScanRule: return self._rule.value @property @@ -118,14 +143,18 @@ def state(self) -> str: return self._state.value @property - def tool(self) -> github.CodeScanTool.CodeScanTool: + def tool(self) -> CodeScanTool: return self._tool.value + @property + def updated_at(self) -> datetime: + return self._updated_at.value + @property def url(self) -> str: return self._url.value - def get_instances(self) -> PaginatedList[github.CodeScanAlertInstance.CodeScanAlertInstance]: + def get_instances(self) -> PaginatedList[CodeScanAlertInstance]: """ :calls: `GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances `_ """ @@ -137,8 +166,18 @@ def get_instances(self) -> PaginatedList[github.CodeScanAlertInstance.CodeScanAl ) def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "assignees" in attributes: # pragma no branch + self._assignees = self._makeListOfClassesAttribute(github.NamedUser.NamedUser, attributes["assignees"]) if "created_at" in attributes: # pragma no branch self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "dismissal_approved_by" in attributes: # pragma no branch + self._dismissal_approved_by = self._makeUnionClassAttributeFromTypeKey( + "type", + "User", + attributes["dismissal_approved_by"], + (github.NamedUser.NamedUser, "User"), + (github.Organization.Organization, "Organization"), + ) if "dismissed_at" in attributes: # pragma no branch self._dismissed_at = self._makeDatetimeAttribute(attributes["dismissed_at"]) if "dismissed_by" in attributes: # pragma no branch @@ -153,7 +192,6 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "instances_url" in attributes: # pragma no branch self._instances_url = self._makeStringAttribute(attributes["instances_url"]) - if "most_recent_instance" in attributes: # pragma no branch self._most_recent_instance = self._makeClassAttribute( github.CodeScanAlertInstance.CodeScanAlertInstance, @@ -167,6 +205,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._state = self._makeStringAttribute(attributes["state"]) if "tool" in attributes: # pragma no branch self._tool = self._makeClassAttribute(github.CodeScanTool.CodeScanTool, attributes["tool"]) - + 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"]) diff --git a/github/CodeScanAlertInstance.py b/github/CodeScanAlertInstance.py index 753916232e..3a0806ee3f 100644 --- a/github/CodeScanAlertInstance.py +++ b/github/CodeScanAlertInstance.py @@ -52,6 +52,7 @@ class CodeScanAlertInstance(NonCompletableGithubObject): def _initAttributes(self) -> None: self._analysis_key: Attribute[str] = NotSet + self._category: Attribute[str] = NotSet self._classifications: Attribute[list[str]] = NotSet self._commit_sha: Attribute[str] = NotSet self._environment: Attribute[str] = NotSet @@ -68,6 +69,10 @@ def __repr__(self) -> str: def analysis_key(self) -> str: return self._analysis_key.value + @property + def category(self) -> str: + return self._category.value + @property def classifications(self) -> list[str]: return self._classifications.value @@ -103,6 +108,8 @@ def state(self) -> str: def _useAttributes(self, attributes: dict[str, Any]) -> None: if "analysis_key" in attributes: # pragma no branch self._analysis_key = self._makeStringAttribute(attributes["analysis_key"]) + if "category" in attributes: # pragma no branch + self._category = self._makeStringAttribute(attributes["category"]) if "classifications" in attributes: # pragma no branch self._classifications = self._makeListOfStringsAttribute(attributes["classifications"]) if "commit_sha" in attributes: # pragma no branch diff --git a/github/CodeScanRule.py b/github/CodeScanRule.py index 03abb5c38a..31c9a6d8dd 100644 --- a/github/CodeScanRule.py +++ b/github/CodeScanRule.py @@ -20,6 +20,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Matt Davis <35502728+matt-davis27@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -53,14 +54,23 @@ class CodeScanRule(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + The OpenAPI schema can be found at + + - /components/schemas/code-scanning-alert-rule + - /components/schemas/code-scanning-alert-rule-summary + """ def _initAttributes(self) -> None: self._description: Attribute[str] = NotSet + self._full_description: Attribute[str] = NotSet + self._help: Attribute[str] = NotSet + self._help_uri: Attribute[str] = NotSet self._id: Attribute[str] = NotSet self._name: Attribute[str] = NotSet self._security_severity_level: Attribute[str] = NotSet self._severity: Attribute[str] = NotSet + self._tags: Attribute[list[str]] = NotSet def __repr__(self) -> str: return self.get__repr__({"id": self.id, "name": self.name}) @@ -69,6 +79,18 @@ def __repr__(self) -> str: def description(self) -> str: return self._description.value + @property + def full_description(self) -> str: + return self._full_description.value + + @property + def help(self) -> str: + return self._help.value + + @property + def help_uri(self) -> str: + return self._help_uri.value + @property def id(self) -> str: return self._id.value @@ -85,9 +107,19 @@ def security_severity_level(self) -> str: def severity(self) -> str: return self._severity.value + @property + def tags(self) -> list[str]: + return self._tags.value + def _useAttributes(self, attributes: dict[str, Any]) -> None: if "description" in attributes: # pragma no branch self._description = self._makeStringAttribute(attributes["description"]) + if "full_description" in attributes: # pragma no branch + self._full_description = self._makeStringAttribute(attributes["full_description"]) + if "help" in attributes: # pragma no branch + self._help = self._makeStringAttribute(attributes["help"]) + if "help_uri" in attributes: # pragma no branch + self._help_uri = self._makeStringAttribute(attributes["help_uri"]) if "id" in attributes: # pragma no branch self._id = self._makeStringAttribute(attributes["id"]) if "name" in attributes: # pragma no branch @@ -96,3 +128,5 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._security_severity_level = self._makeStringAttribute(attributes["security_severity_level"]) if "severity" in attributes: # pragma no branch self._severity = self._makeStringAttribute(attributes["severity"]) + if "tags" in attributes: # pragma no branch + self._tags = self._makeListOfStringsAttribute(attributes["tags"]) diff --git a/github/CodeScanTool.py b/github/CodeScanTool.py index be17d72c60..0f553ce224 100644 --- a/github/CodeScanTool.py +++ b/github/CodeScanTool.py @@ -52,6 +52,10 @@ class CodeScanTool(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/code-scanning. + The OpenAPI schema can be found at + + - /components/schemas/code-scanning-analysis-tool + """ def _initAttributes(self) -> None: diff --git a/github/Commit.py b/github/Commit.py index 2ae31d0788..e91c51be70 100644 --- a/github/Commit.py +++ b/github/Commit.py @@ -26,6 +26,7 @@ # Copyright 2024 iarspider # # Copyright 2025 Enrico Minack # # Copyright 2025 xmo-odoo # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -47,6 +48,7 @@ from __future__ import annotations +import urllib.parse from typing import TYPE_CHECKING, Any import github.Branch @@ -61,7 +63,7 @@ import github.NamedUser import github.PaginatedList import github.Repository -from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional +from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional from github.PaginatedList import PaginatedList if TYPE_CHECKING: @@ -79,12 +81,15 @@ from github.Repository import Repository -class Commit(CompletableGithubObject): +class Commit(CompletableGithubObjectWithPaginatedProperty): """ This class represents Commits. The reference can be found here - https://docs.github.com/en/rest/commits/commits#get-a-commit-object + https://docs.github.com/en/rest/commits/commits#get-a-commit + + This class has a `paginated property `_. + For details, see :meth:`Commit.files` or :meth:`Commit.get_files`. The OpenAPI schema can be found at @@ -98,6 +103,7 @@ class Commit(CompletableGithubObject): """ def _initAttributes(self) -> None: + super()._initAttributes() self._author: Attribute[NamedUser] = NotSet self._comments_url: Attribute[str] = NotSet self._commit: Attribute[GitCommit] = NotSet @@ -110,7 +116,6 @@ def _initAttributes(self) -> None: self._sha: Attribute[str] = NotSet self._stats: Attribute[CommitStats] = NotSet self._text_matches: Attribute[dict[str, Any]] = NotSet - self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"sha": self._sha.value}) @@ -139,20 +144,28 @@ def committer(self) -> NamedUser: self._completeIfNotSet(self._committer) return self._committer.value - # This should be a method, but this used to be a property and cannot be changed without breaking user code - # TODO: remove @property on version 3 @property def files(self) -> PaginatedList[File]: + """ + This is a `paginated property `_. + + Iterating over this paginated list may fetch multiple pages. The size of these pages can be controlled via + the ``…_per_page`` parameter of :meth:`github.Repository.Repository.get_commit`, + :meth:`github.Commit.Commit.get_files`, or :meth:`github.Github`. + + If no ``per_page`` is given, the default page size is 300. The maximum is 300. + + At most 3000 files can be retrieved. + """ return PaginatedList( github.File.File, self._requester, self.url, - {}, - headers=None, + self._pagination_parameters, list_item="files", total_count_item="total_files", - firstData=self.raw_data, - firstHeaders=self.raw_headers, + firstData=self.raw_data if self.completed else None, + firstHeaders=self.raw_headers if self.completed else None, ) @property @@ -190,11 +203,6 @@ def text_matches(self) -> dict[str, Any]: self._completeIfNotSet(self._text_matches) return self._text_matches.value - @property - def url(self) -> str: - self._completeIfNotSet(self._url) - return self._url.value - def create_comment( self, body: str, @@ -203,7 +211,7 @@ def create_comment( position: Opt[int] = NotSet, ) -> CommitComment: """ - :calls: `POST /repos/{owner}/{repo}/commits/{sha}/comments `_ + :calls: `POST /repos/{owner}/{repo}/commits/{commit_sha}/comments `_ """ assert isinstance(body, str), body assert is_optional(line, int), line @@ -253,7 +261,7 @@ def get_branches_where_head(self) -> list[Branch]: def get_comments(self) -> PaginatedList[CommitComment]: """ - :calls: `GET /repos/{owner}/{repo}/commits/{sha}/comments `_ + :calls: `GET /repos/{owner}/{repo}/commits/{commit_sha}/comments `_ """ return PaginatedList( github.CommitComment.CommitComment, @@ -262,9 +270,30 @@ def get_comments(self) -> PaginatedList[CommitComment]: None, ) + def get_files(self, *, commit_files_per_page: int | None = None) -> PaginatedList[File]: + """ + :calls: `GET /repos/{owner}/{repo}/commits/{sha} `_ + + Identical to calling :meth:`github.Commit.Commit.files`, except that this uses the given ``per_page`` value. + + For more details, see :meth:`github.Commit.Commit.files`. + + :param commit_files_per_page: int Number of files retrieved per page. + Iterating over the files will fetch pages of this size. The default page size is 300, the maximum is 300. + At most 3000 files can be retrieved. + """ + return PaginatedList( + github.File.File, + self._requester, + self.url, + self._pagination_parameters_with(page=1, per_page=commit_files_per_page), + headers=None, + list_item="files", + ) + def get_statuses(self) -> PaginatedList[CommitStatus]: """ - :calls: `GET /repos/{owner}/{repo}/statuses/{ref} `_ + :calls: `GET /repos/{owner}/{repo}/statuses/{sha} `_ """ return PaginatedList( github.CommitStatus.CommitStatus, @@ -275,14 +304,14 @@ def get_statuses(self) -> PaginatedList[CommitStatus]: def get_combined_status(self) -> CommitCombinedStatus: """ - :calls: `GET /repos/{owner}/{repo}/commits/{ref}/status/ `_ + :calls: `GET /repos/{owner}/{repo}/commits/{ref}/status `_ """ headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/status") return github.CommitCombinedStatus.CommitCombinedStatus(self._requester, headers, data) def get_pulls(self) -> PaginatedList[PullRequest]: """ - :calls: `GET /repos/{owner}/{repo}/commits/{sha}/pulls `_ + :calls: `GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls `_ """ return PaginatedList( github.PullRequest.PullRequest, @@ -299,7 +328,7 @@ def get_check_runs( filter: Opt[str] = NotSet, ) -> PaginatedList[CheckRun]: """ - :calls: `GET /repos/{owner}/{repo}/commits/{sha}/check-runs `_ + :calls: `GET /repos/{owner}/{repo}/commits/{ref}/check-runs `_ """ assert is_optional(check_name, str), check_name assert is_optional(status, str), status @@ -334,6 +363,7 @@ def get_check_suites(self, app_id: Opt[int] = NotSet, check_name: Opt[str] = Not ) def _useAttributes(self, attributes: dict[str, Any]) -> None: + super()._useAttributes(attributes) if "author" in attributes: # pragma no branch self._author = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["author"]) if "comments_url" in attributes: # pragma no branch @@ -354,12 +384,14 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._repository = self._makeClassAttribute(github.Repository.Repository, attributes["repository"]) if "sha" in attributes: # pragma no branch self._sha = self._makeStringAttribute(attributes["sha"]) + elif "url" in attributes and attributes["url"]: + quoted_sha = attributes["url"].split("/")[-1] + sha = urllib.parse.unquote(quoted_sha) + self._sha = self._makeStringAttribute(sha) if "stats" in attributes: # pragma no branch self._stats = self._makeClassAttribute(github.CommitStats.CommitStats, attributes["stats"]) if "text_matches" in attributes: # pragma no branch self._text_matches = self._makeDictAttribute(attributes["text_matches"]) - if "url" in attributes: # pragma no branch - self._url = self._makeStringAttribute(attributes["url"]) class CommitSearchResult(Commit): diff --git a/github/CommitCombinedStatus.py b/github/CommitCombinedStatus.py index 6fe62ba54f..ef8cf49930 100644 --- a/github/CommitCombinedStatus.py +++ b/github/CommitCombinedStatus.py @@ -55,6 +55,10 @@ class CommitCombinedStatus(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/repos#statuses + The OpenAPI schema can be found at + + - /components/schemas/combined-commit-status + """ def _initAttributes(self) -> None: diff --git a/github/CommitComment.py b/github/CommitComment.py index e7c789678e..5384a14c93 100644 --- a/github/CommitComment.py +++ b/github/CommitComment.py @@ -90,7 +90,7 @@ def _initAttributes(self) -> None: self._user: Attribute[NamedUser | Organization] = NotSet def __repr__(self) -> str: - return self.get__repr__({"id": self._id.value, "user": self.user}) + return self.get__repr__({"id": self._id.value, "user": self._user.value}) @property def author_association(self) -> str: @@ -164,14 +164,14 @@ def user(self) -> NamedUser | Organization: def delete(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/comments/{id} `_ + :calls: `DELETE /repos/{owner}/{repo}/comments/{comment_id} `_ :rtype: None """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) def edit(self, body: str) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/comments/{id} `_ + :calls: `PATCH /repos/{owner}/{repo}/comments/{comment_id} `_ """ assert isinstance(body, str), body post_parameters = { @@ -179,10 +179,11 @@ def edit(self, body: str) -> None: } headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def get_reactions(self) -> PaginatedList[Reaction]: """ - :calls: `GET /repos/{owner}/{repo}/comments/{id}/reactions + :calls: `GET /repos/{owner}/{repo}/comments/{comment_id}/reactions `_ :return: :class: :class:`github.PaginatedList.PaginatedList` of :class:`github.Reaction.Reaction` """ @@ -196,7 +197,7 @@ def get_reactions(self) -> PaginatedList[Reaction]: def create_reaction(self, reaction_type: str) -> Reaction: """ - :calls: `POST /repos/{owner}/{repo}/comments/{id}/reactions + :calls: `POST /repos/{owner}/{repo}/comments/{comment_id}/reactions `_ """ assert isinstance(reaction_type, str), reaction_type @@ -209,7 +210,7 @@ def create_reaction(self, reaction_type: str) -> Reaction: input=post_parameters, headers={"Accept": Consts.mediaTypeReactionsPreview}, ) - return github.Reaction.Reaction(self._requester, headers, data, completed=True) + return github.Reaction.Reaction(self._requester, headers, data) def delete_reaction(self, reaction_id: int) -> bool: """ @@ -239,6 +240,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "line" in attributes: # pragma no branch self._line = self._makeIntAttribute(attributes["line"]) if "node_id" in attributes: # pragma no branch diff --git a/github/CommitStatus.py b/github/CommitStatus.py index 80039c103f..2174e22a53 100644 --- a/github/CommitStatus.py +++ b/github/CommitStatus.py @@ -59,6 +59,7 @@ class CommitStatus(NonCompletableGithubObject): The OpenAPI schema can be found at + - /components/schemas/simple-commit-status - /components/schemas/status """ @@ -71,6 +72,7 @@ def _initAttributes(self) -> None: self._description: Attribute[str] = NotSet self._id: Attribute[int] = NotSet self._node_id: Attribute[str] = NotSet + self._required: Attribute[bool] = NotSet self._state: Attribute[str] = NotSet self._target_url: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet @@ -113,6 +115,10 @@ def id(self) -> int: def node_id(self) -> str: return self._node_id.value + @property + def required(self) -> bool: + return self._required.value + @property def state(self) -> str: return self._state.value @@ -150,6 +156,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._id = self._makeIntAttribute(attributes["id"]) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) + if "required" in attributes: # pragma no branch + self._required = self._makeBoolAttribute(attributes["required"]) if "state" in attributes: # pragma no branch self._state = self._makeStringAttribute(attributes["state"]) if "target_url" in attributes: # pragma no branch diff --git a/github/Comparison.py b/github/Comparison.py index af76539bad..1239061b4d 100644 --- a/github/Comparison.py +++ b/github/Comparison.py @@ -16,6 +16,8 @@ # Copyright 2023 Trim21 # # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -37,32 +39,47 @@ from __future__ import annotations -from typing import Any +from typing import TYPE_CHECKING, Any import github.Commit import github.File -from github.GithubObject import Attribute, CompletableGithubObject, NotSet +from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet from github.PaginatedList import PaginatedList +if TYPE_CHECKING: + from github.Commit import Commit -class Comparison(CompletableGithubObject): + +class Comparison(CompletableGithubObjectWithPaginatedProperty): """ This class represents Comparisons. + + The reference can be found here + https://docs.github.com/en/rest/commits/commits#compare-two-commits + + This class has a `paginated property `_. + For details, see :meth:`Comparison.commits` or :meth:`Comparison.get_commits`. + + The OpenAPI schema can be found at + + - /components/schemas/commit-comparison + """ def _initAttributes(self) -> None: + super()._initAttributes() self._ahead_by: Attribute[int] = NotSet - self._base_commit: Attribute[github.Commit.Commit] = NotSet + self._base_commit: Attribute[Commit] = NotSet self._behind_by: Attribute[int] = NotSet + self._commits: Attribute[list[Commit]] = NotSet self._diff_url: Attribute[str] = NotSet self._files: Attribute[list[github.File.File]] = NotSet self._html_url: Attribute[str] = NotSet - self._merge_base_commit: Attribute[github.Commit.Commit] = NotSet + self._merge_base_commit: Attribute[Commit] = NotSet self._patch_url: Attribute[str] = NotSet self._permalink_url: Attribute[str] = NotSet self._status: Attribute[str] = NotSet self._total_commits: Attribute[int] = NotSet - self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"url": self._url.value}) @@ -73,7 +90,7 @@ def ahead_by(self) -> int: return self._ahead_by.value @property - def base_commit(self) -> github.Commit.Commit: + def base_commit(self) -> Commit: self._completeIfNotSet(self._base_commit) return self._base_commit.value @@ -82,20 +99,28 @@ def behind_by(self) -> int: self._completeIfNotSet(self._behind_by) return self._behind_by.value - # This should be a method, but this used to be a property and cannot be changed without breaking user code - # TODO: remove @property on version 3 @property - def commits(self) -> PaginatedList[github.Commit.Commit]: + def commits(self) -> PaginatedList[Commit]: + """ + This is a `paginated property `_. + + Iterating over this paginated list may fetch multiple pages. The size of these pages can be controlled via + the ``…_per_page`` parameter of :meth:`github.Repository.Repository.compare`, + :meth:`github.Comparison.Comparison.get_commits`, or :meth:`github.Github`. + + If no ``per_page`` is given, the default page size is 250. The maximum is 1000. + + At most 10000 commits can be retrieved. + """ return PaginatedList( github.Commit.Commit, self._requester, self.url, - {}, - headers=None, + self._pagination_parameters, list_item="commits", total_count_item="total_commits", - firstData=self.raw_data, - firstHeaders=self.raw_headers, + firstData=self.raw_data if self.completed else None, + firstHeaders=self.raw_headers if self.completed else None, ) @property @@ -105,6 +130,9 @@ def diff_url(self) -> str: @property def files(self) -> list[github.File.File]: + """ + Only the first 300 changed files. + """ self._completeIfNotSet(self._files) return self._files.value @@ -114,7 +142,7 @@ def html_url(self) -> str: return self._html_url.value @property - def merge_base_commit(self) -> github.Commit.Commit: + def merge_base_commit(self) -> Commit: self._completeIfNotSet(self._merge_base_commit) return self._merge_base_commit.value @@ -138,18 +166,37 @@ def total_commits(self) -> int: self._completeIfNotSet(self._total_commits) return self._total_commits.value - @property - def url(self) -> str: - self._completeIfNotSet(self._url) - return self._url.value + def get_commits(self, *, comparison_commits_per_page: int | None = None) -> PaginatedList[Commit]: + """ + :calls: `GET /repos/{owner}/{repo}/compare/{base...:head} `_ + + Identical to calling :meth:`github.Comparison.Comparison.commits`, except that this uses the given ``per_page`` value. + + For more details, see :meth:`github.Comparison.Comparison.commits`. + + :param comparison_commits_per_page: int Number of commits retrieved per page. + Iterating over the commits will fetch pages of this size. The default page size is 250, the maximum is 1000. + At most 10000 commits can be retrieved. + """ + return PaginatedList( + github.Commit.Commit, + self._requester, + self.url, + self._pagination_parameters_with(page=1, per_page=comparison_commits_per_page), + headers=None, + list_item="commits", + ) def _useAttributes(self, attributes: dict[str, Any]) -> None: + super()._useAttributes(attributes) if "ahead_by" in attributes: # pragma no branch self._ahead_by = self._makeIntAttribute(attributes["ahead_by"]) if "base_commit" in attributes: # pragma no branch self._base_commit = self._makeClassAttribute(github.Commit.Commit, attributes["base_commit"]) if "behind_by" in attributes: # pragma no branch self._behind_by = self._makeIntAttribute(attributes["behind_by"]) + if "commits" in attributes: # pragma no branch + self._commits = self._makeListOfClassesAttribute(github.Commit.Commit, attributes["commits"]) if "diff_url" in attributes: # pragma no branch self._diff_url = self._makeStringAttribute(attributes["diff_url"]) if "files" in attributes: # pragma no branch @@ -166,5 +213,3 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._status = self._makeStringAttribute(attributes["status"]) if "total_commits" in attributes: # pragma no branch self._total_commits = self._makeIntAttribute(attributes["total_commits"]) - if "url" in attributes: # pragma no branch - self._url = self._makeStringAttribute(attributes["url"]) diff --git a/github/Deployment.py b/github/Deployment.py index 87163b32a7..2e95c68ab0 100644 --- a/github/Deployment.py +++ b/github/Deployment.py @@ -191,7 +191,7 @@ def url(self) -> str: def get_statuses(self) -> PaginatedList[github.DeploymentStatus.DeploymentStatus]: """ - :calls: `GET /repos/{owner}/deployments/{deployment_id}/statuses `_ + :calls: `GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses `_ """ return PaginatedList( github.DeploymentStatus.DeploymentStatus, @@ -203,7 +203,7 @@ def get_statuses(self) -> PaginatedList[github.DeploymentStatus.DeploymentStatus def get_status(self, id_: int) -> github.DeploymentStatus.DeploymentStatus: """ - :calls: `GET /repos/{owner}/deployments/{deployment_id}/statuses/{status_id} `_ + :calls: `GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id} `_ """ assert isinstance(id_, int), id_ headers, data = self._requester.requestJsonAndCheck( @@ -277,6 +277,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._environment = self._makeStringAttribute(attributes["environment"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) if "original_environment" in attributes: # pragma no branch diff --git a/github/Download.py b/github/Download.py index 7249737e49..1d76955e51 100644 --- a/github/Download.py +++ b/github/Download.py @@ -17,6 +17,7 @@ # Copyright 2023 Trim21 # # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -213,6 +214,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "mime_type" in attributes: # pragma no branch self._mime_type = self._makeStringAttribute( attributes["mime_type"] diff --git a/github/Enterprise.py b/github/Enterprise.py index 3b6a68a5d8..b829b1b68c 100644 --- a/github/Enterprise.py +++ b/github/Enterprise.py @@ -19,6 +19,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -139,16 +140,14 @@ def website_url(self) -> str: def from_slug(requester: Requester, slug: str) -> Enterprise: return github.Enterprise.Enterprise(requester, {}, {"slug": slug}) - def get_consumed_licenses(self) -> EnterpriseConsumedLicenses: + def get_consumed_licenses(self, *, licence_users_per_page: int | None = None) -> EnterpriseConsumedLicenses: """ :calls: `GET /enterprises/{enterprise}/consumed-licenses `_ + :param licence_users_per_page: int Number of users retrieved with the licences. Iterating over users property will fetch pages of this size. The default page size is 30, the maximum is 100. """ - headers, data = self._requester.requestJsonAndCheck("GET", self.url + "/consumed-licenses") - if "url" not in data: - data["url"] = self.url + "/consumed-licenses" - + # licence_users_per_page asserted in EnterpriseConsumedLicenses(CompletableGithubObjectWithPaginatedProperty) return github.EnterpriseConsumedLicenses.EnterpriseConsumedLicenses( - self._requester, headers, data, completed=True + self._requester, url=self.url + "/consumed-licenses", per_page=licence_users_per_page ) def _useAttributes(self, attributes: dict[str, Any]) -> None: diff --git a/github/EnterpriseConsumedLicenses.py b/github/EnterpriseConsumedLicenses.py index 3d42272315..3f464d0334 100644 --- a/github/EnterpriseConsumedLicenses.py +++ b/github/EnterpriseConsumedLicenses.py @@ -19,6 +19,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -42,25 +43,28 @@ from typing import Any -from github.GithubObject import Attribute, CompletableGithubObject, NotSet +from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet from github.NamedEnterpriseUser import NamedEnterpriseUser from github.PaginatedList import PaginatedList -class EnterpriseConsumedLicenses(CompletableGithubObject): +class EnterpriseConsumedLicenses(CompletableGithubObjectWithPaginatedProperty): """ This class represents license consumed by enterprises. The reference can be found here https://docs.github.com/en/enterprise-cloud@latest/rest/enterprise-admin/license#list-enterprise-consumed-licenses + This class has a `paginated property `_. + For details, see :meth:`EnterpriseConsumedLicenses.users` or :meth:`EnterpriseConsumedLicenses.get_users`. + """ def _initAttributes(self) -> None: + super()._initAttributes() self._enterprise: Attribute[str] = NotSet self._total_seats_consumed: Attribute[int] = NotSet self._total_seats_purchased: Attribute[int] = NotSet - self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"enterprise": self._enterprise.value}) @@ -79,33 +83,52 @@ def total_seats_purchased(self) -> int: return self._total_seats_purchased.value @property - def url(self) -> str: - self._completeIfNotSet(self._url) - return self._url.value - - def get_users(self) -> PaginatedList[NamedEnterpriseUser]: - """ - :calls: `GET /enterprises/{enterprise}/consumed-licenses `_ + def users(self) -> PaginatedList[NamedEnterpriseUser]: """ + This is a `paginated property `_. + + Iterating over this paginated list may fetch multiple pages. The size of these pages can be controlled via + the ``…_per_page`` parameter of :meth:`github.Enterprise.Enterprise.get_consumed_licenses`, + :meth:`github.EnterpriseConsumedLicenses.EnterpriseConsumedLicenses.get_users`, or :meth:`github.Github`. - url_parameters: dict[str, Any] = {} + If no ``per_page`` is given, the default page size is 30. The maximum is 100. + """ return PaginatedList( NamedEnterpriseUser, self._requester, self.url, - url_parameters, + self._pagination_parameters, headers=None, list_item="users", firstData=self.raw_data, firstHeaders=self.raw_headers, ) + def get_users(self, licence_users_per_page: int | None = None) -> PaginatedList[NamedEnterpriseUser]: + """ + :calls: `GET /enterprises/{enterprise}/consumed-licenses `_ + + Identical to calling :meth:`github.EnterpriseConsumedLicenses.EnterpriseConsumedLicenses.users`, except that this uses the given ``per_page`` value. + + For more details, see :meth:`github.EnterpriseConsumedLicenses.EnterpriseConsumedLicenses.users`. + + :param licence_users_per_page: int Number of users retrieved per page. + Iterating over the users will fetch pages of this size. The default page size is 30, the maximum is 100. + """ + return PaginatedList( + NamedEnterpriseUser, + self._requester, + self.url, + self._pagination_parameters_with(page=1, per_page=licence_users_per_page), + headers=None, + list_item="users", + ) + def _useAttributes(self, attributes: dict[str, Any]) -> None: + super()._useAttributes(attributes) if "enterprise" in attributes: # pragma no branch self._enterprise = self._makeStringAttribute(attributes["enterprise"]) if "total_seats_consumed" in attributes: # pragma no branch self._total_seats_consumed = self._makeIntAttribute(attributes["total_seats_consumed"]) if "total_seats_purchased" in attributes: # pragma no branch self._total_seats_purchased = self._makeIntAttribute(attributes["total_seats_purchased"]) - if "url" in attributes: # pragma no branch - self._url = self._makeStringAttribute(attributes["url"]) diff --git a/github/Environment.py b/github/Environment.py index 845f9e2d58..e0382e33da 100644 --- a/github/Environment.py +++ b/github/Environment.py @@ -42,6 +42,7 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from typing import TYPE_CHECKING, Any @@ -68,6 +69,10 @@ class Environment(CompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/deployments#environments + The OpenAPI schema can be found at + + - /components/schemas/environment + """ def _initAttributes(self) -> None: @@ -148,7 +153,7 @@ def url(self) -> str: def get_public_key(self) -> PublicKey: """ - :calls: `GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key `_ + :calls: `GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key `_ :rtype: :class:`PublicKey` """ # https://stackoverflow.com/a/76474814 @@ -158,7 +163,7 @@ def get_public_key(self) -> PublicKey: def create_secret(self, secret_name: str, unencrypted_value: str) -> Secret: """ - :calls: `PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name} `_ + :calls: `PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name} `_ """ assert isinstance(secret_name, str), secret_name assert isinstance(unencrypted_value, str), unencrypted_value @@ -168,20 +173,22 @@ def create_secret(self, secret_name: str, unencrypted_value: str) -> Secret: "key_id": public_key.key_id, "encrypted_value": payload, } - self._requester.requestJsonAndCheck("PUT", f"{self.url}/secrets/{secret_name}", input=put_parameters) + quoted_secret_name = urllib.parse.quote(secret_name, safe="") + url = f"{self.url}/secrets/{quoted_secret_name}" + self._requester.requestJsonAndCheck("PUT", url, input=put_parameters) return github.Secret.Secret( - requester=self._requester, - headers={}, - attributes={ - "name": secret_name, - "url": f"{self.url}/secrets/{secret_name}", - }, + self._requester, + url=url, + attributes={"name": secret_name}, completed=False, ) def get_secrets(self) -> PaginatedList[Secret]: """ Gets all repository secrets. + + :calls: `GET /repos/{owner}/{repo}/environments/{environment_name}/secrets `_ + """ return PaginatedList( github.Secret.Secret, @@ -194,19 +201,15 @@ def get_secrets(self) -> PaginatedList[Secret]: def get_secret(self, secret_name: str) -> Secret: """ - :calls: `GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name} `_ + :calls: `GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name} `_ """ assert isinstance(secret_name, str), secret_name - return github.Secret.Secret( - requester=self._requester, - headers={}, - attributes={"url": f"{self.url}/secrets/{secret_name}"}, - completed=False, - ) + secret_name = urllib.parse.quote(secret_name, safe="") + return github.Secret.Secret(self._requester, url=f"{self.url}/secrets/{secret_name}") def create_variable(self, variable_name: str, value: str) -> Variable: """ - :calls: `POST /repositories/{repository_id}/environments/{environment_name}/variables/{variable_name} `_ + :calls: `POST /repos/{owner}/{repo}/environments/{environment_name}/variables/{name} `_ """ assert isinstance(variable_name, str), variable_name assert isinstance(value, str), value @@ -215,13 +218,15 @@ def create_variable(self, variable_name: str, value: str) -> Variable: "value": value, } self._requester.requestJsonAndCheck("POST", f"{self.url}/variables", input=post_parameters) + + quoted_variable_name = urllib.parse.quote(variable_name, safe="") + url = f"{self.url}/variables/{quoted_variable_name}" return github.Variable.Variable( self._requester, - headers={}, + url=url, attributes={ "name": variable_name, "value": value, - "url": f"{self.url}/variables/{variable_name}", }, completed=False, ) @@ -241,21 +246,18 @@ def get_variables(self) -> PaginatedList[Variable]: def get_variable(self, variable_name: str) -> Variable: """ - :calls: `GET /orgs/{org}/variables/{variable_name} `_ + :calls: `GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name} `_ :param variable_name: string :rtype: Variable """ assert isinstance(variable_name, str), variable_name - return github.Variable.Variable( - requester=self._requester, - headers={}, - attributes={"url": f"{self.url}/variables/{variable_name}"}, - completed=False, - ) + variable_name = urllib.parse.quote(variable_name, safe="") + url = f"{self.url}/variables/{variable_name}" + return github.Variable.Variable(self._requester, url=url) def delete_secret(self, secret_name: str) -> bool: """ - :calls: `DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name} `_ :param secret_name: string :rtype: bool """ @@ -265,7 +267,7 @@ def delete_secret(self, secret_name: str) -> bool: def delete_variable(self, variable_name: str) -> bool: """ - :calls: `DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{variable_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name} `_ :param variable_name: string :rtype: bool """ @@ -289,6 +291,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._id = self._makeIntAttribute(attributes["id"]) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes and attributes["url"]: + quoted_name = attributes["url"].split("/")[-1] + name = urllib.parse.unquote(quoted_name) + self._name = self._makeStringAttribute(name) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) if "protection_rules" in attributes: # pragma no branch diff --git a/github/EnvironmentDeploymentBranchPolicy.py b/github/EnvironmentDeploymentBranchPolicy.py index b664425e8a..84c0b13e15 100644 --- a/github/EnvironmentDeploymentBranchPolicy.py +++ b/github/EnvironmentDeploymentBranchPolicy.py @@ -40,6 +40,10 @@ class EnvironmentDeploymentBranchPolicy(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/deployments#environments + The OpenAPI schema can be found at + + - /components/schemas/deployment-branch-policy-settings + """ def _initAttributes(self) -> None: diff --git a/github/Gist.py b/github/Gist.py index 49d3ef911b..5431ae4953 100644 --- a/github/Gist.py +++ b/github/Gist.py @@ -45,9 +45,11 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from typing import TYPE_CHECKING, Any +import github.AuthenticatedUser import github.GistComment import github.GistFile import github.GistHistoryState @@ -230,20 +232,20 @@ def create_comment(self, body: str) -> GistComment: def create_fork(self) -> Gist: """ - :calls: `POST /gists/{id}/forks `_ + :calls: `POST /gists/{gist_id}/forks `_ """ headers, data = self._requester.requestJsonAndCheck("POST", f"{self.url}/forks") return Gist(self._requester, headers, data, completed=True) def delete(self) -> None: """ - :calls: `DELETE /gists/{id} `_ + :calls: `DELETE /gists/{gist_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) def edit(self, description: Opt[str] = NotSet, files: Opt[dict[str, InputFileContent | None]] = NotSet) -> None: """ - :calls: `PATCH /gists/{id} `_ + :calls: `PATCH /gists/{gist_id} `_ """ assert is_optional(description, str), description # limitation of `TypeGuard` @@ -256,15 +258,17 @@ def edit(self, description: Opt[str] = NotSet, files: Opt[dict[str, InputFileCon if is_defined(files): post_parameters["files"] = {key: None if value is None else value._identity for key, value in files.items()} headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) + self._useAttributes(data) + self._set_complete() def get_comment(self, id: int) -> GistComment: """ - :calls: `GET /gists/{gist_id}/comments/{id} `_ + :calls: `GET /gists/{gist_id}/comments/{comment_id} `_ """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/comments/{id}") - return github.GistComment.GistComment(self._requester, headers, data, completed=True) + url = f"{self.url}/comments/{id}" + return github.GistComment.GistComment(self._requester, url=url) def get_comments(self) -> PaginatedList[GistComment]: """ @@ -279,20 +283,20 @@ def get_comments(self) -> PaginatedList[GistComment]: def is_starred(self) -> bool: """ - :calls: `GET /gists/{id}/star `_ + :calls: `GET /gists/{gist_id}/star `_ """ status, headers, data = self._requester.requestJson("GET", f"{self.url}/star") return status == 204 def reset_starred(self) -> None: """ - :calls: `DELETE /gists/{id}/star `_ + :calls: `DELETE /gists/{gist_id}/star `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/star") def set_starred(self) -> None: """ - :calls: `PUT /gists/{id}/star `_ + :calls: `PUT /gists/{gist_id}/star `_ """ headers, data = self._requester.requestJsonAndCheck("PUT", f"{self.url}/star") @@ -329,6 +333,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeStringAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + quoted_id = attributes["url"].split("/")[-1] + id = urllib.parse.unquote(quoted_id) + self._id = self._makeStringAttribute(id) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) if "owner" in attributes: # pragma no branch diff --git a/github/GistComment.py b/github/GistComment.py index 99a04f3344..43fcebaad0 100644 --- a/github/GistComment.py +++ b/github/GistComment.py @@ -118,13 +118,13 @@ def user(self) -> github.NamedUser.NamedUser: def delete(self) -> None: """ - :calls: `DELETE /gists/{gist_id}/comments/{id} `_ + :calls: `DELETE /gists/{gist_id}/comments/{comment_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) def edit(self, body: str) -> None: """ - :calls: `PATCH /gists/{gist_id}/comments/{id} `_ + :calls: `PATCH /gists/{gist_id}/comments/{comment_id} `_ """ assert isinstance(body, str), body post_parameters = { @@ -132,6 +132,7 @@ def edit(self, body: str) -> None: } headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def _useAttributes(self, attributes: dict[str, Any]) -> None: if "author_association" in attributes: # pragma no branch @@ -142,6 +143,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) if "updated_at" in attributes: # pragma no branch diff --git a/github/GitBlob.py b/github/GitBlob.py index 222b283c5b..e316f32406 100644 --- a/github/GitBlob.py +++ b/github/GitBlob.py @@ -53,6 +53,7 @@ class GitBlob(CompletableGithubObject): The OpenAPI schema can be found at + - /components/schemas/blob - /components/schemas/short-blob """ @@ -60,6 +61,8 @@ class GitBlob(CompletableGithubObject): def _initAttributes(self) -> None: self._content: Attribute[str] = NotSet self._encoding: Attribute[str] = NotSet + self._highlighted_content: Attribute[str] = NotSet + self._node_id: Attribute[str] = NotSet self._sha: Attribute[str] = NotSet self._size: Attribute[int] = NotSet self._url: Attribute[str] = NotSet @@ -77,6 +80,16 @@ def encoding(self) -> str: self._completeIfNotSet(self._encoding) return self._encoding.value + @property + def highlighted_content(self) -> str: + self._completeIfNotSet(self._highlighted_content) + return self._highlighted_content.value + + @property + def node_id(self) -> str: + self._completeIfNotSet(self._node_id) + return self._node_id.value + @property def sha(self) -> str: self._completeIfNotSet(self._sha) @@ -97,6 +110,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._content = self._makeStringAttribute(attributes["content"]) if "encoding" in attributes: # pragma no branch self._encoding = self._makeStringAttribute(attributes["encoding"]) + if "highlighted_content" in attributes: # pragma no branch + self._highlighted_content = self._makeStringAttribute(attributes["highlighted_content"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) if "sha" in attributes: # pragma no branch self._sha = self._makeStringAttribute(attributes["sha"]) if "size" in attributes: # pragma no branch diff --git a/github/GitRef.py b/github/GitRef.py index 7b6af214ac..b366cd5c06 100644 --- a/github/GitRef.py +++ b/github/GitRef.py @@ -108,6 +108,7 @@ def edit(self, sha: str, force: Opt[bool] = NotSet) -> None: post_parameters = NotSet.remove_unset_items({"sha": sha, "force": force}) headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def _useAttributes(self, attributes: dict[str, Any]) -> None: if "node_id" in attributes: # pragma no branch diff --git a/github/GitRelease.py b/github/GitRelease.py index 12cb745c14..6f4504fa8b 100644 --- a/github/GitRelease.py +++ b/github/GitRelease.py @@ -36,6 +36,7 @@ # Copyright 2024 Benjamin K <53038537+treee111@users.noreply.github.com> # # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Aidan McNay # # Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # @@ -58,6 +59,7 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from os.path import basename from typing import Any, BinaryIO @@ -111,6 +113,7 @@ def _initAttributes(self) -> None: self._tag_name: Attribute[str] = NotSet self._tarball_url: Attribute[str] = NotSet self._target_commitish: Attribute[str] = NotSet + self._updated_at: Attribute[datetime] = NotSet self._upload_url: Attribute[str] = NotSet self._url: Attribute[str] = NotSet self._zipball_url: Attribute[str] = NotSet @@ -244,6 +247,11 @@ def title(self) -> str: # alias for name return self.name + @property + def updated_at(self) -> datetime: + self._completeIfNotSet(self._updated_at) + return self._updated_at.value + @property def upload_url(self) -> str: self._completeIfNotSet(self._upload_url) @@ -312,7 +320,7 @@ def upload_asset( self, path: str, label: str = "", content_type: Opt[str] = NotSet, name: Opt[str] = NotSet ) -> github.GitReleaseAsset.GitReleaseAsset: """ - :calls: `POST https:///repos/{owner}/{repo}/releases/{release_id}/assets `_ + :calls: `POST /repos/{owner}/{repo}/releases/{release_id}/assets `__ """ assert isinstance(path, str), path assert isinstance(label, str), label @@ -348,7 +356,7 @@ def upload_asset_from_memory( Unlike ``upload_asset()`` this method allows you to pass in a file-like object to upload. Note that this method is more strict and requires you to specify the ``name``, since there's no file name to infer these from. - :calls: `POST https:///repos/{owner}/{repo}/releases/{release_id}/assets `_ + :calls: `POST /repos/{owner}/{repo}/releases/{release_id}/assets `__ :param file_like: binary file-like object, such as those returned by ``open("file_name", "rb")``. At the very minimum, this object must implement ``read()``. :param file_size: int, size in bytes of ``file_like`` @@ -410,6 +418,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "immutable" in attributes: # pragma no branch self._immutable = self._makeBoolAttribute(attributes["immutable"]) if "mentions_count" in attributes: # pragma no branch @@ -430,10 +442,16 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._status = self._makeStringAttribute(attributes["status"]) if "tag_name" in attributes: self._tag_name = self._makeStringAttribute(attributes["tag_name"]) + elif "url" in attributes and attributes["url"] and isinstance(attributes["url"], str): + quoted_tag_name = attributes["url"].split("/")[-1] + tag_name = urllib.parse.unquote(quoted_tag_name) + self._tag_name = self._makeStringAttribute(tag_name) if "tarball_url" in attributes: self._tarball_url = self._makeStringAttribute(attributes["tarball_url"]) if "target_commitish" in attributes: self._target_commitish = self._makeStringAttribute(attributes["target_commitish"]) + if "updated_at" in attributes: # pragma no branch + self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "upload_url" in attributes: self._upload_url = self._makeStringAttribute(attributes["upload_url"]) if "url" in attributes: diff --git a/github/GitReleaseAsset.py b/github/GitReleaseAsset.py index 1c49208f4a..843fa4b0f6 100644 --- a/github/GitReleaseAsset.py +++ b/github/GitReleaseAsset.py @@ -22,6 +22,7 @@ # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Alex Olieman # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # Copyright 2025 Neel Malik <41765022+neel-m@users.noreply.github.com> # # # # This file is part of PyGithub. # @@ -44,8 +45,9 @@ from __future__ import annotations +from collections.abc import Iterator from datetime import datetime -from typing import Any, Iterator +from typing import Any import github.NamedUser import github.Organization @@ -195,6 +197,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._download_count = self._makeIntAttribute(attributes["download_count"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "label" in attributes: # pragma no branch self._label = self._makeStringAttribute(attributes["label"]) if "name" in attributes: # pragma no branch diff --git a/github/GithubApp.py b/github/GithubApp.py index 4a02c42efa..f958e9a3f6 100644 --- a/github/GithubApp.py +++ b/github/GithubApp.py @@ -23,6 +23,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -211,7 +212,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: if "owner" in attributes: # pragma no branch self._owner = self._makeUnionClassAttributeFromTypeKey( "type", - "Enterprise", + "User", attributes["owner"], (github.NamedUser.NamedUser, "User"), (github.Organization.Organization, "Organization"), @@ -227,6 +228,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: if "updated_at" in attributes: # pragma no branch self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: - self._url = self._makeStringAttribute(attributes["url"]) + # we give precedence to the slug attribute + if "slug" not in attributes: + self._url = self._makeStringAttribute(attributes["url"]) if "webhook_secret" in attributes: # pragma no branch self._webhook_secret = self._makeStringAttribute(attributes["webhook_secret"]) diff --git a/github/GithubIntegration.py b/github/GithubIntegration.py index eb699ff414..9314873928 100644 --- a/github/GithubIntegration.py +++ b/github/GithubIntegration.py @@ -10,6 +10,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Min RK # +# Copyright 2025 Aidan McNay # # Copyright 2025 Christoph Reiter # # Copyright 2025 Enrico Minack # # Copyright 2025 xmo-odoo # @@ -285,9 +286,7 @@ def get_installation(self, owner: str, repo: str) -> Installation: """ Deprecated by get_repo_installation. - :calls:`GET /repos/{owner}/{repo}/installation ` - :calls:`GET /repos/{owner}/{repo}/installation ` """ @@ -312,7 +311,7 @@ def get_org_installation(self, org: str) -> Installation: """ :calls: `GET /orgs/{org}/installation ` """ - org = urllib.parse.quote(org) + org = urllib.parse.quote(org, safe="") return self._get_installed_app(url=f"/orgs/{org}/installation") def get_repo_installation(self, owner: str, repo: str) -> Installation: diff --git a/github/GithubObject.py b/github/GithubObject.py index 6e1c50e236..3a7478711c 100644 --- a/github/GithubObject.py +++ b/github/GithubObject.py @@ -30,6 +30,7 @@ # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Min RK # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -60,7 +61,7 @@ from operator import itemgetter from typing import TYPE_CHECKING, Any, Callable, Union, overload -from typing_extensions import Protocol, Self, TypeGuard +from typing_extensions import ParamSpec, Protocol, Self, TypeGuard, TypeVar from . import Consts from .GithubException import BadAttributeException, IncompletableObject @@ -370,13 +371,23 @@ def _makeClassAttribute(self, klass: type[T_gh], value: Any) -> Attribute[T_gh]: ) def _makeUnionClassAttributeFromTypeName( - self, type_name: str | None, value: Any, *class_and_names: tuple[type[T_gh], str] + self, type_name: str | None, fallback_type: str | None, value: Any, *class_and_names: tuple[type[T_gh], str] ) -> Attribute[T_gh]: if value is None or type_name is None: return _ValuedAttribute(None) # type: ignore + fallback_class = None for klass, name in class_and_names: if type_name == name: return self._makeClassAttribute(klass, value) + if fallback_type == name: + fallback_class = klass + if fallback_type is not None: + if fallback_class is None: + # this is misconfiguration in PyGithub code, not a user's fault + raise ValueError( + f"Fallback type {fallback_type} is not among classes and names: {[name for klass, name in class_and_names]}" + ) + return self._makeClassAttribute(fallback_class, value) return _BadAttribute(value, type) # type: ignore def _makeUnionClassAttributeFromTypeKey( @@ -388,7 +399,9 @@ def _makeUnionClassAttributeFromTypeKey( ) -> Attribute[T_gh]: if value is None or not isinstance(value, dict): return _ValuedAttribute(None) # type: ignore - return self._makeUnionClassAttributeFromTypeName(value.get(type_key, default_type), value, *class_and_names) + return self._makeUnionClassAttributeFromTypeName( + value.get(type_key, default_type), default_type, value, *class_and_names + ) def _makeUnionClassAttributeFromTypeKeyAndValueKey( self, @@ -401,7 +414,7 @@ def _makeUnionClassAttributeFromTypeKeyAndValueKey( if value is None or not isinstance(value, dict): return _ValuedAttribute(None) # type: ignore return self._makeUnionClassAttributeFromTypeName( - value.get(type_key, default_type), value.get(value_key), *class_and_names + value.get(type_key, default_type), default_type, value.get(value_key), *class_and_names ) @staticmethod @@ -524,12 +537,12 @@ def __init__( initialized will then trigger a request to complete all attributes. A partially initialized CompletableGithubObject (completed=False) can be completed - via complete(). This requires the url to be given via parameter `url` or `attributes`. + via ``complete()``. This requires the url to be given via parameter ``url`` or ``attributes``. - With a requester where `Requester.is_lazy == True`, this CompletableGithubObjects is - partially initialized. This requires the url to be given via parameter `url` or `attributes`. + With a requester where ``Requester.is_lazy == True``, this CompletableGithubObjects is + partially initialized. This requires the url to be given via parameter ``url`` or ``attributes``. Any CompletableGithubObject created from this lazy object will be lazy itself if created with - parameter `url` or `attributes`. + parameter ``url`` or ``attributes``. :param requester: requester :param headers: response headers @@ -539,7 +552,7 @@ def __init__( :param accept: use this accept header when completing this instance """ - response_given = headers is not None or attributes is not None + response_given = headers is not None if headers is None: headers = {} @@ -552,12 +565,20 @@ def __init__( self.__completeHeaders = {"Accept": accept} if accept else None # complete this completable object when requester indicates non-laziness and - # neither of complete, headers and attributes are given + # neither of complete and headers are given if requester.is_not_lazy and completed is None and not response_given: self.complete() + def _initAttributes(self) -> None: + self._url: Attribute[str] = NotSet + def __eq__(self, other: Any) -> bool: - return other.__class__ is self.__class__ and other._url.value == self._url.value + return ( + other.__class__ is self.__class__ + and other.requester.base_url == self.requester.base_url + and other._url.value.removeprefix(other.requester.base_url) + == self._url.value.removeprefix(self.requester.base_url) + ) def __hash__(self) -> int: return hash(self._url.value) @@ -585,6 +606,11 @@ def raw_headers(self) -> dict[str, str | int]: self._completeIfNeeded() return super().raw_headers + @property + def url(self) -> str: + self._completeIfNotSet(self._url) + return self._url.value + def complete(self) -> Self: self._completeIfNeeded() return self @@ -595,16 +621,23 @@ def _completeIfNotSet(self, value: Attribute) -> None: def _completeIfNeeded(self) -> None: if not self.__completed: - self.__complete() + self._complete() - def __complete(self) -> None: + def _complete(self, parameters: dict[str, Any] | None = None) -> None: if self._url.value is None: raise IncompletableObject(400, message="Cannot complete object as it contains no URL") - headers, data = self._requester.requestJsonAndCheck("GET", self._url.value, headers=self.__completeHeaders) + headers, data = self._requester.requestJsonAndCheck( + "GET", self._url.value, parameters=parameters, headers=self.__completeHeaders + ) self._storeAndUseAttributes(headers, data) + self._set_complete() + + def _set_complete(self) -> None: self.__completed = True - def update(self, additional_headers: dict[str, Any] | None = None) -> bool: + def update( + self, additional_headers: dict[str, Any] | None = None, parameters: dict[str, Any] | None = None + ) -> bool: """ Check and update the object with conditional request :rtype: Boolean value indicating whether the object is changed. @@ -618,7 +651,7 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool: conditionalRequestHeader.update(additional_headers) status, responseHeaders, output = self._requester.requestJson( - "GET", self._url.value, headers=conditionalRequestHeader + "GET", self._url.value, parameters=parameters, headers=conditionalRequestHeader ) if status == 304: return False @@ -627,3 +660,86 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool: self._storeAndUseAttributes(headers, data) self.__completed = True return True + + def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) + + +class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject): + """ + A CompletableGithubObject that has a property that is subject to pagination. + + An instance created from a Requester with a non-default value for ``per_page`` must have the + ``per_page`` value in the URL in order for the paginated property to use the ``per_page`` value. + + """ + + def __init__( + self, + requester: Requester, + headers: dict[str, str | int] | None = None, + attributes: dict[str, Any] | None = None, + completed: bool | None = None, + *, + url: str | None = None, + accept: str | None = None, + per_page: int | None = None, + ): + assert per_page is None or isinstance(per_page, int) and per_page > 0, per_page + + # we set page=1 to get pagination links, PaginatedList can work from there + self.__pagination_parameters = {"page": 1} + if per_page is not None: + # we set the given per_page + self.__pagination_parameters["per_page"] = per_page + else: + # we use the per_page explicitly configured with the Requester + if requester.per_page != Consts.DEFAULT_PER_PAGE: + self.__pagination_parameters["per_page"] = requester.per_page + else: + # we use the default (no) per_page (not Consts.DEFAULT_PER_PAGE, the URL might have a different default) + pass + + super().__init__(requester, headers, attributes, completed, url=url, accept=accept) + + @property + def _pagination_parameters(self) -> dict[str, Any]: + return self.__pagination_parameters + + def _pagination_parameters_with(self, page: int, per_page: int | None) -> dict[str, Any]: + assert page > 0, page + assert per_page is None or isinstance(per_page, int) and per_page > 0, per_page + parameters = self._pagination_parameters.copy() + parameters["page"] = page + if per_page is not None: + parameters["per_page"] = per_page + return parameters + + def _complete(self, parameters: dict[str, Any] | None = None) -> None: + # inject pagination parameters into the complete request + parameters = {**parameters} if parameters else {} + parameters.update(**self.__pagination_parameters) + super()._complete(parameters=parameters) + + def update( + self, additional_headers: dict[str, Any] | None = None, parameters: dict[str, Any] | None = None + ) -> bool: + # inject pagination parameters into the complete request + parameters = {**parameters} if parameters else {} + parameters.update(**self.__pagination_parameters) + return super().update(parameters=parameters) + + +Param = ParamSpec("Param") +RetType = TypeVar("RetType") + + +# decorator to annotate methods with OpenAPI metadata +def method_returns( + *, schema_property: str | None = None +) -> Callable[[Callable[Param, RetType]], Callable[Param, RetType]]: + def openapi_method_decorator(fn: Callable[Param, RetType]) -> Callable[Param, RetType]: + return fn + + return openapi_method_decorator diff --git a/github/GitignoreTemplate.py b/github/GitignoreTemplate.py index c695e74bcb..f31c3a410c 100644 --- a/github/GitignoreTemplate.py +++ b/github/GitignoreTemplate.py @@ -18,6 +18,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -60,6 +61,7 @@ class GitignoreTemplate(NonCompletableGithubObject): def _initAttributes(self) -> None: self._name: Attribute[str] = NotSet self._source: Attribute[str] = NotSet + self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"name": self._name.value}) @@ -72,8 +74,14 @@ def name(self) -> str: def source(self) -> str: return self._source.value + @property + def url(self) -> str: + return self._url.value + def _useAttributes(self, attributes: dict[str, Any]) -> None: if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) if "source" in attributes: # pragma no branch self._source = self._makeStringAttribute(attributes["source"]) + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) diff --git a/github/Hook.py b/github/Hook.py index 4b45bb8090..9f0f330e70 100644 --- a/github/Hook.py +++ b/github/Hook.py @@ -60,6 +60,7 @@ class Hook(CompletableGithubObject): The OpenAPI schema can be found at - /components/schemas/hook + - /components/schemas/org-hook """ @@ -148,7 +149,7 @@ def url(self) -> str: def delete(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/hooks/{id} `_ + :calls: `DELETE /repos/{owner}/{repo}/hooks/{hook_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) @@ -162,7 +163,7 @@ def edit( active: Opt[bool] = NotSet, ) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/hooks/{id} `_ + :calls: `PATCH /repos/{owner}/{repo}/hooks/{hook_id} `_ """ assert isinstance(name, str), name assert isinstance(config, dict), config @@ -183,16 +184,17 @@ def edit( headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def test(self) -> None: """ - :calls: `POST /repos/{owner}/{repo}/hooks/{id}/tests `_ + :calls: `POST /repos/{owner}/{repo}/hooks/{hook_id}/tests `_ """ headers, data = self._requester.requestJsonAndCheck("POST", f"{self.url}/tests") def ping(self) -> None: """ - :calls: `POST /repos/{owner}/{repo}/hooks/{id}/pings `_ + :calls: `POST /repos/{owner}/{repo}/hooks/{hook_id}/pings `_ """ headers, data = self._requester.requestJsonAndCheck("POST", f"{self.url}/pings") @@ -209,6 +211,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._events = self._makeListOfStringsAttribute(attributes["events"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "last_response" in attributes: # pragma no branch self._last_response = self._makeClassAttribute( github.HookResponse.HookResponse, attributes["last_response"] diff --git a/github/Issue.py b/github/Issue.py index a7e56c3d30..9a27efa066 100644 --- a/github/Issue.py +++ b/github/Issue.py @@ -62,9 +62,12 @@ from __future__ import annotations import urllib.parse +import warnings from datetime import datetime from typing import TYPE_CHECKING, Any +from typing_extensions import deprecated + import github.GithubApp import github.GithubObject import github.IssueComment @@ -149,6 +152,7 @@ def _initAttributes(self) -> None: self._milestone: Attribute[Milestone] = NotSet self._node_id: Attribute[str] = NotSet self._number: Attribute[int] = NotSet + self._parent_issue_url: Attribute[str] = NotSet self._performed_via_github_app: Attribute[GithubApp] = NotSet self._pull_request: Attribute[IssuePullRequest] = NotSet self._reactions: Attribute[dict] = NotSet @@ -178,6 +182,7 @@ def active_lock_reason(self) -> str | None: return self._active_lock_reason.value @property + @deprecated("Use assignees instead") def assignee(self) -> NamedUser | None: self._completeIfNotSet(self._assignee) return self._assignee.value @@ -287,6 +292,11 @@ def number(self) -> int: self._completeIfNotSet(self._number) return self._number.value + @property + def parent_issue_url(self) -> str: + self._completeIfNotSet(self._parent_issue_url) + return self._parent_issue_url.value + @property def performed_via_github_app(self) -> GithubApp: self._completeIfNotSet(self._performed_via_github_app) @@ -370,14 +380,14 @@ def user(self) -> NamedUser: def as_pull_request(self) -> PullRequest: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number} `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number} `_ """ - headers, data = self._requester.requestJsonAndCheck("GET", "/pulls/".join(self.url.rsplit("/issues/", 1))) - return github.PullRequest.PullRequest(self._requester, headers, data, completed=True) + url = "/pulls/".join(self.url.rsplit("/issues/", 1)) + return github.PullRequest.PullRequest(self._requester, url=url) def add_to_assignees(self, *assignees: NamedUser | str) -> None: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/assignees `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/assignees `_ """ assert all(isinstance(element, (github.NamedUser.NamedUser, str)) for element in assignees), assignees post_parameters = { @@ -388,10 +398,11 @@ def add_to_assignees(self, *assignees: NamedUser | str) -> None: } headers, data = self._requester.requestJsonAndCheck("POST", f"{self.url}/assignees", input=post_parameters) self._useAttributes(data) + self._set_complete() def add_to_labels(self, *labels: Label | str) -> None: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ assert all(isinstance(element, (github.Label.Label, str)) for element in labels), labels post_parameters = [label.name if isinstance(label, github.Label.Label) else label for label in labels] @@ -399,7 +410,7 @@ def add_to_labels(self, *labels: Label | str) -> None: def create_comment(self, body: str) -> IssueComment: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/comments `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/comments `_ """ assert isinstance(body, str), body post_parameters = { @@ -410,10 +421,11 @@ def create_comment(self, body: str) -> IssueComment: def delete_labels(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/labels") + # breaking change: remove deprecated assignee def edit( self, title: Opt[str] = NotSet, @@ -426,7 +438,7 @@ def edit( state_reason: Opt[str] = NotSet, ) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/issues/{number} `_ + :calls: `PATCH /repos/{owner}/{repo}/issues/{issue_number} `_ :param assignee: deprecated, use `assignees` instead. `assignee=None` means to remove current assignee. :param milestone: `milestone=None` means to remove current milestone. """ @@ -438,6 +450,19 @@ def edit( assert milestone is None or is_optional(milestone, github.Milestone.Milestone), milestone assert is_optional_list(labels, str), labels + if assignee is None or is_defined(assignee): + warnings.warn( + "Argument assignee is deprecated, please use assignees=[assignee] instead", + category=DeprecationWarning, + ) + if is_undefined(assignees): + assignees = [assignee] if assignee is not None else [] # type: ignore + if is_defined(assignees): + assignees = [ + element._identity if isinstance(element, github.NamedUser.NamedUser) else element + for element in assignees + ] + post_parameters = NotSet.remove_unset_items( { "title": title, @@ -445,23 +470,16 @@ def edit( "state": state, "state_reason": state_reason, "labels": labels, - "assignee": assignee._identity - if isinstance(assignee, github.NamedUser.NamedUser) - else (assignee or ""), + "assignees": assignees, "milestone": milestone._identity if isinstance(milestone, github.Milestone.Milestone) else (milestone or ""), } ) - if is_defined(assignees): - post_parameters["assignees"] = [ - element._identity if isinstance(element, github.NamedUser.NamedUser) else element - for element in assignees - ] - headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def lock(self, lock_reason: str) -> None: """ @@ -484,15 +502,15 @@ def unlock(self) -> None: def get_comment(self, id: int) -> IssueComment: """ - :calls: `GET /repos/{owner}/{repo}/issues/comments/{id} `_ + :calls: `GET /repos/{owner}/{repo}/issues/comments/{comment_id} `_ """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self._parentUrl(self.url)}/comments/{id}") - return github.IssueComment.IssueComment(self._requester, headers, data, completed=True) + url = f"{self._parentUrl(self.url)}/comments/{id}" + return github.IssueComment.IssueComment(self._requester, url=url) def get_comments(self, since: Opt[datetime] = NotSet) -> PaginatedList[IssueComment]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/comments `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/comments `_ """ url_parameters = {} if is_defined(since): @@ -520,13 +538,13 @@ def get_events(self) -> PaginatedList[IssueEvent]: def get_labels(self) -> PaginatedList[Label]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ return PaginatedList(github.Label.Label, self._requester, f"{self.url}/labels", None) def remove_from_assignees(self, *assignees: NamedUser | str) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/assignees `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees `_ """ assert all(isinstance(element, (github.NamedUser.NamedUser, str)) for element in assignees), assignees post_parameters = { @@ -537,10 +555,11 @@ def remove_from_assignees(self, *assignees: NamedUser | str) -> None: } headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/assignees", input=post_parameters) self._useAttributes(data) + self._set_complete() def remove_from_labels(self, label: Label | str) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/labels/{name} `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name} `_ """ assert isinstance(label, (github.Label.Label, str)), label if isinstance(label, github.Label.Label): @@ -551,7 +570,7 @@ def remove_from_labels(self, label: Label | str) -> None: def set_labels(self, *labels: Label | str) -> None: """ - :calls: `PUT /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `PUT /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ assert all(isinstance(element, (github.Label.Label, str)) for element in labels), labels post_parameters = [label.name if isinstance(label, github.Label.Label) else label for label in labels] @@ -559,7 +578,7 @@ def set_labels(self, *labels: Label | str) -> None: def get_reactions(self) -> PaginatedList[Reaction]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/reactions `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/reactions `_ """ return PaginatedList( github.Reaction.Reaction, @@ -571,7 +590,7 @@ def get_reactions(self) -> PaginatedList[Reaction]: def get_sub_issues(self) -> PaginatedList[SubIssue]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/sub_issues `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues `_ :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Issue.Issue` """ return PaginatedList( @@ -584,7 +603,7 @@ def get_sub_issues(self) -> PaginatedList[SubIssue]: def add_sub_issue(self, sub_issue: int | Issue) -> SubIssue: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/sub_issues `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues `_ :param sub_issue: int (sub-issue ID) or Issue object. Note: Use sub_issue.id, not sub_issue.number :rtype: :class:`github.Issue.SubIssue` """ @@ -607,7 +626,7 @@ def add_sub_issue(self, sub_issue: int | Issue) -> SubIssue: def remove_sub_issue(self, sub_issue: int | Issue) -> SubIssue: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/sub_issue `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue `_ :param sub_issue: int (sub-issue ID) or Issue object. Note: Use sub_issue.id, not sub_issue.number :rtype: :class:`github.Issue.SubIssue` """ @@ -630,7 +649,7 @@ def remove_sub_issue(self, sub_issue: int | Issue) -> SubIssue: def prioritize_sub_issue(self, sub_issue: int | Issue, after_sub_issue: int | Issue | None) -> SubIssue: """ - :calls: `PATCH /repos/{owner}/{repo}/issues/{number}/sub_issues/priority `_ + :calls: `PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority `_ :param sub_issue: int (sub-issue ID) or Issue object. Note: Use sub_issue.id, not sub_issue.number :param after_sub_issue: int (sub-issue ID) or Issue object. Note: Use sub_issue.id, not sub_issue.number :rtype: :class:`github.Issue.SubIssue` @@ -656,7 +675,7 @@ def prioritize_sub_issue(self, sub_issue: int | Issue, after_sub_issue: int | Is def create_reaction(self, reaction_type: str) -> Reaction: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/reactions `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/reactions `_ """ assert isinstance(reaction_type, str), reaction_type post_parameters = { @@ -668,7 +687,7 @@ def create_reaction(self, reaction_type: str) -> Reaction: input=post_parameters, headers={"Accept": Consts.mediaTypeReactionsPreview}, ) - return github.Reaction.Reaction(self._requester, headers, data, completed=True) + return github.Reaction.Reaction(self._requester, headers, data) def delete_reaction(self, reaction_id: int) -> bool: """ @@ -684,7 +703,7 @@ def delete_reaction(self, reaction_id: int) -> bool: def get_timeline(self) -> PaginatedList[TimelineEvent]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/timeline `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/timeline `_ """ return PaginatedList( github.TimelineEvent.TimelineEvent, @@ -748,6 +767,12 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._node_id = self._makeStringAttribute(attributes["node_id"]) if "number" in attributes: # pragma no branch self._number = self._makeIntAttribute(attributes["number"]) + elif "url" in attributes: + number = attributes["url"].split("/")[-1] + if number.isnumeric(): + self._number = self._makeIntAttribute(int(number)) + if "parent_issue_url" in attributes: # pragma no branch + self._parent_issue_url = self._makeStringAttribute(attributes["parent_issue_url"]) if "performed_via_github_app" in attributes: # pragma no branch self._performed_via_github_app = self._makeClassAttribute( github.GithubApp.GithubApp, attributes["performed_via_github_app"] diff --git a/github/IssueComment.py b/github/IssueComment.py index febb6bddd3..372331b7b9 100644 --- a/github/IssueComment.py +++ b/github/IssueComment.py @@ -25,6 +25,7 @@ # Copyright 2024 Arash Kadkhodaei # # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Aidan McNay # # Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # @@ -169,13 +170,13 @@ def user(self) -> NamedUser | Organization: def delete(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/comments/{id} `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/comments/{comment_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) def edit(self, body: str) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/issues/comments/{id} `_ + :calls: `PATCH /repos/{owner}/{repo}/issues/comments/{comment_id} `_ """ assert isinstance(body, str), body post_parameters = { @@ -183,10 +184,11 @@ def edit(self, body: str) -> None: } headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def get_reactions(self) -> PaginatedList[Reaction]: """ - :calls: `GET /repos/{owner}/{repo}/issues/comments/{id}/reactions + :calls: `GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions `_ """ return PaginatedList( @@ -199,7 +201,7 @@ def get_reactions(self) -> PaginatedList[Reaction]: def create_reaction(self, reaction_type: str) -> Reaction: """ - :calls: `POST /repos/{owner}/{repo}/issues/comments/{id}/reactions + :calls: `POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions `_ """ assert isinstance(reaction_type, str), reaction_type @@ -212,7 +214,7 @@ def create_reaction(self, reaction_type: str) -> Reaction: input=post_parameters, headers={"Accept": Consts.mediaTypeReactionsPreview}, ) - return github.Reaction.Reaction(self._requester, headers, data, completed=True) + return github.Reaction.Reaction(self._requester, headers, data) def delete_reaction(self, reaction_id: int) -> bool: """ @@ -229,8 +231,8 @@ def delete_reaction(self, reaction_id: int) -> bool: def minimize(self, reason: str = "OUTDATED") -> bool: """ - :calls: `POST /graphql `_ with a mutation to minimize comment - + :calls: `POST /graphql `__ with a mutation to minimize comment + """ assert isinstance(reason, str), reason variables = { @@ -246,8 +248,8 @@ def minimize(self, reason: str = "OUTDATED") -> bool: def unminimize(self) -> bool: """ - :calls: `POST /graphql `_ with a mutation to unminimize comment - + :calls: `POST /graphql `__ with a mutation to unminimize comment + """ variables = { "subjectId": self.node_id, @@ -274,6 +276,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "issue_url" in attributes: # pragma no branch self._issue_url = self._makeStringAttribute(attributes["issue_url"]) if "node_id" in attributes: # pragma no branch diff --git a/github/Label.py b/github/Label.py index 957a343ced..76be6b752d 100644 --- a/github/Label.py +++ b/github/Label.py @@ -141,6 +141,7 @@ def edit(self, name: str, color: str, description: Opt[str] = NotSet) -> None: headers={"Accept": Consts.mediaTypeLabelDescriptionSearchPreview}, ) self._useAttributes(data) + self._set_complete() def _useAttributes(self, attributes: dict[str, Any]) -> None: if "color" in attributes: # pragma no branch @@ -153,6 +154,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._id = self._makeIntAttribute(attributes["id"]) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes and attributes["url"]: + quoted_name = attributes["url"].split("/")[-1] + name = urllib.parse.unquote(quoted_name) + self._name = self._makeStringAttribute(name) if "node_id" in attributes: # pragma no branch self._node_id = self._makeStringAttribute(attributes["node_id"]) if "url" in attributes: # pragma no branch diff --git a/github/MainClass.py b/github/MainClass.py index 08261f4d33..b3374c6632 100644 --- a/github/MainClass.py +++ b/github/MainClass.py @@ -72,6 +72,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Min RK # +# Copyright 2025 Aidan McNay # # Copyright 2025 Enrico Minack # # Copyright 2025 blyedev <63808441+blyedev@users.noreply.github.com> # # Copyright 2025 xmo-odoo # @@ -123,7 +124,7 @@ import github.Topic from github import Consts from github.GithubIntegration import GithubIntegration -from github.GithubObject import CompletableGithubObject, GithubObject, NotSet, Opt, is_defined +from github.GithubObject import CompletableGithubObject, GithubObject, NotSet, Opt, is_defined, is_undefined from github.GithubRetry import GithubRetry from github.HookDelivery import HookDelivery, HookDeliverySummary from github.HookDescription import HookDescription @@ -356,7 +357,7 @@ def get_rate_limit(self) -> RateLimitOverview: """ Rate limit overview that provides general status and status for different resources (core/search/graphql). - :calls:`GET /rate_limit `_ + :calls: `GET /rate_limit `_ """ headers, data = self.__requester.requestJsonAndCheck("GET", "/rate_limit") @@ -395,32 +396,37 @@ def get_events(self) -> PaginatedList[Event]: return PaginatedList(github.Event.Event, self.__requester, "/events", None) - def get_user(self, login: Opt[str] = NotSet) -> NamedUser | AuthenticatedUser: + # v3: remove lazy argument, laziness is fully controlled via requester + def get_user(self, login: Opt[str] = NotSet, lazy: Opt[bool] = NotSet) -> NamedUser | AuthenticatedUser: """ - :calls: `GET /users/{user} `_ or `GET /user `_ + :calls: `GET /users/{username} `_ or `GET /user `_ """ - if login is NotSet: + requester = self.__requester.withLazy(lazy) + if is_undefined(login): url = "/user" - # always return a lazy completable AuthenticatedUser + # default is to return a lazy completable AuthenticatedUser # v3: given github.Github(lazy=True) is now default, remove completed=False here - return github.AuthenticatedUser.AuthenticatedUser(self.__requester, url=url, completed=False) + return github.AuthenticatedUser.AuthenticatedUser( + requester, url=url, completed=False if is_undefined(lazy) else None + ) else: assert isinstance(login, str), login login = urllib.parse.quote(login) url = f"/users/{login}" # always return a completed NamedUser # v3: remove complete() here and make this as lazy as github.Github is - return github.NamedUser.NamedUser(self.__requester, url=url).complete() + user = github.NamedUser.NamedUser(requester, url=url) + return user.complete() if is_undefined(lazy) else user def get_user_by_id(self, user_id: int) -> NamedUser: """ - :calls: `GET /user/{id} `_ + :calls: `GET /user/{account_id} `_ :param user_id: int :rtype: :class:`github.NamedUser.NamedUser` """ assert isinstance(user_id, int), user_id - headers, data = self.__requester.requestJsonAndCheck("GET", f"/user/{user_id}") - return github.NamedUser.NamedUser(self.__requester, headers, data, completed=True) + url = f"/user/{user_id}" + return github.NamedUser.NamedUser(self.__requester, url=url) def get_users(self, since: Opt[int] = NotSet) -> PaginatedList[NamedUser]: """ @@ -437,9 +443,9 @@ def get_organization(self, org: str) -> Organization: :calls: `GET /orgs/{org} `_ """ assert isinstance(org, str), org - org = urllib.parse.quote(org) - headers, data = self.__requester.requestJsonAndCheck("GET", f"/orgs/{org}") - return github.Organization.Organization(self.__requester, headers, data, completed=True) + org = urllib.parse.quote(org, safe="") + url = f"/orgs/{org}" + return github.Organization.Organization(self.__requester, url=url) def get_organizations(self, since: Opt[int] = NotSet) -> PaginatedList[Organization]: """ @@ -467,17 +473,21 @@ def get_enterprise(self, enterprise: str) -> github.Enterprise.Enterprise: # There is no native "/enterprises/{enterprise}" api, so this function is a hub for apis that start with "/enterprise/{enterprise}". return github.Enterprise.Enterprise.from_slug(self.__requester, enterprise) - def get_repo(self, full_name_or_id: int | str, lazy: bool = False) -> Repository: + # v3: remove lazy option + def get_repo(self, full_name_or_id: int | str, lazy: Opt[bool] = NotSet) -> Repository: """ - :calls: `GET /repos/{owner}/{repo} `_ or `GET /repositories/{id} `_ + :calls: `GET /repos/{owner}/{repo} `_ or `GET /repositories/{repository_id} `_ """ + if is_defined(lazy): + warnings.warn( + "Argument lazy is deprecated, please use Github(..., lazy=...).get_repo(...) instead", + category=DeprecationWarning, + stacklevel=2, + ) assert isinstance(full_name_or_id, (str, int)), full_name_or_id url_base = "/repositories/" if isinstance(full_name_or_id, int) else "/repos/" url = f"{url_base}{full_name_or_id}" - if lazy: - return github.Repository.Repository(self.__requester, {}, {"url": url}, completed=False) - headers, data = self.__requester.requestJsonAndCheck("GET", url) - return github.Repository.Repository(self.__requester, headers, data, completed=True) + return github.Repository.Repository(self.__requester.withLazy(lazy), url=url) def get_repos( self, @@ -512,12 +522,8 @@ def get_project(self, id: int) -> Project: """ :calls: `GET /projects/{project_id} `_ """ - headers, data = self.__requester.requestJsonAndCheck( - "GET", - f"/projects/{id:d}", - headers={"Accept": Consts.mediaTypeProjectsPreview}, - ) - return github.Project.Project(self.__requester, headers, data, completed=True) + url = f"/projects/{id:d}" + return github.Project.Project(self.__requester, url=url, accept=Consts.mediaTypeProjectsPreview) def get_project_column(self, id: int) -> ProjectColumn: """ @@ -532,11 +538,11 @@ def get_project_column(self, id: int) -> ProjectColumn: def get_gist(self, id: str) -> Gist: """ - :calls: `GET /gists/{id} `_ + :calls: `GET /gists/{gist_id} `_ """ assert isinstance(id, str), id - headers, data = self.__requester.requestJsonAndCheck("GET", f"/gists/{id}") - return github.Gist.Gist(self.__requester, headers, data, completed=True) + url = f"/gists/{id}" + return github.Gist.Gist(self.__requester, url=url) def get_gists(self, since: Opt[datetime] = NotSet) -> PaginatedList[Gist]: """ @@ -916,7 +922,7 @@ def get_hook(self, name: str) -> HookDescription: :calls: `GET /hooks/{name} `_ """ assert isinstance(name, str), name - name = urllib.parse.quote(name) + name = urllib.parse.quote(name, safe="") headers, attributes = self.__requester.requestJsonAndCheck("GET", f"/hooks/{name}") return HookDescription(self.__requester, headers, attributes) @@ -1000,26 +1006,6 @@ def dump(self, obj: GithubObject, file: BinaryIO, protocol: int = 0) -> None: information like the Github credentials used in the :class:`Github` instance. But NO EFFORT is made to remove sensitive information from the object's attributes. - :param obj: the object to pickle :param file: the file-like object to pickle to :param protocol: the - `pickling protocol `_ - :param obj: the object to pickle :param file: the file-like object to pickle to :param protocol: the - `pickling protocol `_ :param obj: the object to pickle :param file: the file-like object to pickle to :param - protocol: the - `pickling protocol `_ - :param obj: the object to pickle - :param file: the file-like object to pickle to - :param protocol: the `pickling protocol `_ :param obj: the object to pickle :param file: the file-like object to pickle to :param protocol: the `pickling protocol Applicati def get_app(self, slug: Opt[str] = NotSet) -> GithubApp: """ - :calls: `GET /apps/{slug} `_ or `GET /app `_ + :calls: `GET /apps/{app_slug} `_ or `GET /app `_ """ if slug is NotSet: @@ -1063,5 +1049,5 @@ def get_app(self, slug: Opt[str] = NotSet) -> GithubApp: else: assert isinstance(slug, str), slug # with a slug given, we can lazily load the GithubApp - slug = urllib.parse.quote(slug) + slug = urllib.parse.quote(slug, safe="") return github.GithubApp.GithubApp(self.__requester, {}, {"url": f"/apps/{slug}"}, completed=False) diff --git a/github/Membership.py b/github/Membership.py index 7ba519b729..a9505620b2 100644 --- a/github/Membership.py +++ b/github/Membership.py @@ -65,6 +65,7 @@ class Membership(CompletableGithubObject): The OpenAPI schema can be found at - /components/schemas/org-membership + - /components/schemas/team-membership """ diff --git a/github/Milestone.py b/github/Milestone.py index 729995f5a9..c3faaf39a2 100644 --- a/github/Milestone.py +++ b/github/Milestone.py @@ -92,7 +92,7 @@ def __repr__(self) -> str: @property def _identity(self) -> int: - return self.number + return self._number.value @property def closed_at(self) -> datetime: @@ -176,7 +176,7 @@ def url(self) -> str: def delete(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/milestones/{number} `_ + :calls: `DELETE /repos/{owner}/{repo}/milestones/{milestone_number} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) @@ -184,7 +184,7 @@ def edit( self, title: str, state: Opt[str] = NotSet, description: Opt[str] = NotSet, due_on: Opt[date] = NotSet ) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/milestones/{number} `_ + :calls: `PATCH /repos/{owner}/{repo}/milestones/{milestone_number} `_ """ assert isinstance(title, str), title assert state is NotSet or isinstance(state, str), state @@ -206,7 +206,7 @@ def edit( def get_labels(self) -> PaginatedList[github.Label.Label]: """ - :calls: `GET /repos/{owner}/{repo}/milestones/{number}/labels `_ + :calls: `GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels `_ """ return PaginatedList(github.Label.Label, self._requester, f"{self.url}/labels", None) @@ -233,6 +233,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._node_id = self._makeStringAttribute(attributes["node_id"]) if "number" in attributes: # pragma no branch self._number = self._makeIntAttribute(attributes["number"]) + elif "url" in attributes and attributes["url"]: + number = attributes["url"].split("/")[-1] + if number.isnumeric(): + self._number = self._makeIntAttribute(int(number)) if "open_issues" in attributes: # pragma no branch self._open_issues = self._makeIntAttribute(attributes["open_issues"]) if "state" in attributes: # pragma no branch diff --git a/github/NamedUser.py b/github/NamedUser.py index 42b72efa3b..64601ae943 100644 --- a/github/NamedUser.py +++ b/github/NamedUser.py @@ -96,6 +96,7 @@ class NamedUser(github.GithubObject.CompletableGithubObject): - /components/schemas/collaborator - /components/schemas/contributor - /components/schemas/nullable-simple-user + - /components/schemas/private-user - /components/schemas/public-user - /components/schemas/simple-user @@ -105,6 +106,7 @@ def _initAttributes(self) -> None: self._avatar_url: Attribute[str] = NotSet self._bio: Attribute[str | None] = NotSet self._blog: Attribute[str | None] = NotSet + self._business_plus: Attribute[bool] = NotSet self._collaborators: Attribute[int] = NotSet self._company: Attribute[str | None] = NotSet self._contributions: Attribute[int] = NotSet @@ -124,6 +126,7 @@ def _initAttributes(self) -> None: self._id: Attribute[int] = NotSet self._invitation_teams_url: Attribute[str] = NotSet self._inviter: Attribute[NamedUser] = NotSet + self._ldap_dn: Attribute[str] = NotSet self._location: Attribute[str | None] = NotSet self._login: Attribute[str] = NotSet self._name: Attribute[str] = NotSet @@ -149,6 +152,7 @@ def _initAttributes(self) -> None: self._text_matches: Attribute[dict[str, Any]] = NotSet self._total_private_repos: Attribute[int] = NotSet self._twitter_username: Attribute[str | None] = NotSet + self._two_factor_authentication: Attribute[bool] = NotSet self._type: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet @@ -182,6 +186,10 @@ def blog(self) -> str | None: self._completeIfNotSet(self._blog) return self._blog.value + @property + def business_plus(self) -> bool: + return self._business_plus.value + @property def collaborators(self) -> int | None: self._completeIfNotSet(self._collaborators) @@ -276,6 +284,10 @@ def inviter(self) -> NamedUser: self._completeIfNotSet(self._inviter) return self._inviter.value + @property + def ldap_dn(self) -> str: + return self._ldap_dn.value + @property def location(self) -> str | None: self._completeIfNotSet(self._location) @@ -397,6 +409,10 @@ def twitter_username(self) -> str | None: self._completeIfNotSet(self._twitter_username) return self._twitter_username.value + @property + def two_factor_authentication(self) -> bool: + return self._two_factor_authentication.value + @property def type(self) -> str: self._completeIfNotSet(self._type) @@ -418,25 +434,25 @@ def user_view_type(self) -> str: def get_events(self) -> PaginatedList[Event]: """ - :calls: `GET /users/{user}/events `_ + :calls: `GET /users/{username}/events `_ """ return github.PaginatedList.PaginatedList(github.Event.Event, self._requester, f"{self.url}/events", None) def get_followers(self) -> PaginatedList[NamedUser]: """ - :calls: `GET /users/{user}/followers `_ + :calls: `GET /users/{username}/followers `_ """ return github.PaginatedList.PaginatedList(NamedUser, self._requester, f"{self.url}/followers", None) def get_following(self) -> PaginatedList[NamedUser]: """ - :calls: `GET /users/{user}/following `_ + :calls: `GET /users/{username}/following `_ """ return github.PaginatedList.PaginatedList(NamedUser, self._requester, f"{self.url}/following", None) def get_gists(self, since: Opt[datetime] = NotSet) -> PaginatedList[Gist]: """ - :calls: `GET /users/{user}/gists `_ + :calls: `GET /users/{username}/gists `_ """ assert since is NotSet or isinstance(since, datetime), since url_parameters = dict() @@ -448,13 +464,13 @@ def get_gists(self, since: Opt[datetime] = NotSet) -> PaginatedList[Gist]: def get_keys(self) -> PaginatedList[UserKey]: """ - :calls: `GET /users/{user}/keys `_ + :calls: `GET /users/{username}/keys `_ """ return github.PaginatedList.PaginatedList(github.UserKey.UserKey, self._requester, f"{self.url}/keys", None) def get_orgs(self) -> PaginatedList[Organization]: """ - :calls: `GET /users/{user}/orgs `_ + :calls: `GET /users/{username}/orgs `_ """ return github.PaginatedList.PaginatedList( github.Organization.Organization, self._requester, f"{self.url}/orgs", None @@ -462,7 +478,7 @@ def get_orgs(self) -> PaginatedList[Organization]: def get_projects(self, state: str = "open") -> PaginatedList[Project]: """ - :calls: `GET /users/{user}/projects `_ + :calls: `GET /users/{username}/projects `_ """ assert isinstance(state, str), state url_parameters = {"state": state} @@ -476,7 +492,7 @@ def get_projects(self, state: str = "open") -> PaginatedList[Project]: def get_public_events(self) -> PaginatedList[Event]: """ - :calls: `GET /users/{user}/events/public `_ + :calls: `GET /users/{username}/events/public `_ """ return github.PaginatedList.PaginatedList( github.Event.Event, self._requester, f"{self.url}/events/public", None @@ -484,7 +500,7 @@ def get_public_events(self) -> PaginatedList[Event]: def get_public_received_events(self) -> PaginatedList[Event]: """ - :calls: `GET /users/{user}/received_events/public `_ + :calls: `GET /users/{username}/received_events/public `_ """ return github.PaginatedList.PaginatedList( github.Event.Event, @@ -495,7 +511,7 @@ def get_public_received_events(self) -> PaginatedList[Event]: def get_received_events(self) -> PaginatedList[Event]: """ - :calls: `GET /users/{user}/received_events `_ + :calls: `GET /users/{username}/received_events `_ """ return github.PaginatedList.PaginatedList( github.Event.Event, self._requester, f"{self.url}/received_events", None @@ -506,8 +522,8 @@ def get_repo(self, name: str) -> Repository: :calls: `GET /repos/{owner}/{repo} `_ """ assert isinstance(name, str), name - headers, data = self._requester.requestJsonAndCheck("GET", f"/repos/{self.login}/{name}") - return github.Repository.Repository(self._requester, headers, data, completed=True) + url = f"/repos/{self.login}/{name}" + return github.Repository.Repository(self._requester, url=url) def get_repos( self, @@ -516,7 +532,7 @@ def get_repos( direction: Opt[str] = NotSet, ) -> PaginatedList[Repository]: """ - :calls: `GET /users/{user}/repos `_ + :calls: `GET /users/{username}/repos `_ """ assert type is NotSet or isinstance(type, str), type assert sort is NotSet or isinstance(sort, str), sort @@ -537,7 +553,7 @@ def get_repos( def get_starred(self) -> PaginatedList[Repository]: """ - :calls: `GET /users/{user}/starred `_ + :calls: `GET /users/{username}/starred `_ """ return github.PaginatedList.PaginatedList( github.Repository.Repository, self._requester, f"{self.url}/starred", None @@ -545,7 +561,7 @@ def get_starred(self) -> PaginatedList[Repository]: def get_subscriptions(self) -> PaginatedList[Repository]: """ - :calls: `GET /users/{user}/subscriptions `_ + :calls: `GET /users/{username}/subscriptions `_ """ return github.PaginatedList.PaginatedList( github.Repository.Repository, @@ -556,7 +572,7 @@ def get_subscriptions(self) -> PaginatedList[Repository]: def get_watched(self) -> PaginatedList[Repository]: """ - :calls: `GET /users/{user}/watched `_ + :calls: `GET /users/{username}/watched `_ """ return github.PaginatedList.PaginatedList( github.Repository.Repository, self._requester, f"{self.url}/watched", None @@ -564,7 +580,7 @@ def get_watched(self) -> PaginatedList[Repository]: def has_in_following(self, following: NamedUser) -> bool: """ - :calls: `GET /users/{user}/following/{target_user} `_ + :calls: `GET /users/{username}/following/{target_user} `_ """ assert isinstance(following, github.NamedUser.NamedUser), following status, headers, data = self._requester.requestJson("GET", f"{self.url}/following/{following._identity}") @@ -577,7 +593,7 @@ def get_organization_membership(self, org: str | Organization) -> Membership: assert isinstance(org, str) or isinstance(org, github.Organization.Organization), org if isinstance(org, github.Organization.Organization): org = org.login # type: ignore - org = urllib.parse.quote(org) + org = urllib.parse.quote(org, safe="") headers, data = self._requester.requestJsonAndCheck("GET", f"/orgs/{org}/memberships/{self.login}") return github.Membership.Membership(self._requester, headers, data, completed=True) @@ -588,6 +604,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._bio = self._makeStringAttribute(attributes["bio"]) if "blog" in attributes: # pragma no branch self._blog = self._makeStringAttribute(attributes["blog"]) + if "business_plus" in attributes: # pragma no branch + self._business_plus = self._makeBoolAttribute(attributes["business_plus"]) if "collaborators" in attributes: # pragma no branch self._collaborators = self._makeIntAttribute(attributes["collaborators"]) if "company" in attributes: # pragma no branch @@ -622,14 +640,28 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + # url could also reference user id (int): /users/login + # or some derived class like /orgs/{org}/invitations/{invitation_id} + if id.isnumeric() and attributes["url"].endswith(f"/user/{id}"): + self._id = self._makeIntAttribute(int(id)) if "invitation_teams_url" in attributes: # pragma no branch self._invitation_teams_url = self._makeStringAttribute(attributes["invitation_teams_url"]) if "inviter" in attributes: # pragma no branch self._inviter = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["inviter"]) + if "ldap_dn" in attributes: # pragma no branch + self._ldap_dn = self._makeStringAttribute(attributes["ldap_dn"]) if "location" in attributes: # pragma no branch self._location = self._makeStringAttribute(attributes["location"]) if "login" in attributes: # pragma no branch self._login = self._makeStringAttribute(attributes["login"]) + elif "url" in attributes and "/" in attributes["url"]: + login = attributes["url"].split("/")[-1] + # url could also reference user id (int): /user/id + # or some derived class like /orgs/{org}/invitations/{invitation_id} + if attributes["url"].endswith(f"/users/{login}"): + self._login = self._makeStringAttribute(login) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch @@ -676,12 +708,20 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._total_private_repos = self._makeIntAttribute(attributes["total_private_repos"]) if "twitter_username" in attributes: # pragma no branch self._twitter_username = self._makeStringAttribute(attributes["twitter_username"]) + if "two_factor_authentication" in attributes: # pragma no branch + self._two_factor_authentication = self._makeBoolAttribute(attributes["two_factor_authentication"]) if "type" in attributes: # pragma no branch self._type = self._makeStringAttribute(attributes["type"]) 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"]) + elif type(self) in (NamedUser, NamedUserSearchResult): + # construct url only for NamedUser and NamedUserSearchResult (no OrganizationInvitation) + if "login" in attributes and attributes["login"]: + self._url = self._makeStringAttribute(f"/users/{attributes['login']}") + elif "id" in attributes and attributes["id"]: + self._url = self._makeStringAttribute(f"/user/{attributes['id']}") if "user_view_type" in attributes: # pragma no branch self._user_view_type = self._makeStringAttribute(attributes["user_view_type"]) diff --git a/github/Notification.py b/github/Notification.py index ca8535dbd1..d75ae15b0c 100644 --- a/github/Notification.py +++ b/github/Notification.py @@ -129,7 +129,7 @@ def url(self) -> str: def mark_as_read(self) -> None: """ - :calls: `PATCH /notifications/threads/{id} `_ + :calls: `PATCH /notifications/threads/{thread_id} `_ """ headers, data = self._requester.requestJsonAndCheck( "PATCH", @@ -138,7 +138,7 @@ def mark_as_read(self) -> None: def mark_as_done(self) -> None: """ - :calls: `DELETE /notifications/threads/{id} `_ + :calls: `DELETE /notifications/threads/{thread_id} `_ """ headers, data = self._requester.requestJsonAndCheck( "DELETE", @@ -146,12 +146,10 @@ def mark_as_done(self) -> None: ) def get_pull_request(self) -> github.PullRequest.PullRequest: - headers, data = self._requester.requestJsonAndCheck("GET", self.subject.url) - return github.PullRequest.PullRequest(self._requester, headers, data, completed=True) + return github.PullRequest.PullRequest(self._requester, url=self.subject.url) def get_issue(self) -> github.Issue.Issue: - headers, data = self._requester.requestJsonAndCheck("GET", self.subject.url) - return github.Issue.Issue(self._requester, headers, data, completed=True) + return github.Issue.Issue(self._requester, url=self.subject.url) def _useAttributes(self, attributes: dict[str, Any]) -> None: if "id" in attributes: # pragma no branch diff --git a/github/Organization.py b/github/Organization.py index c7ae0acd48..4ca5b1317f 100644 --- a/github/Organization.py +++ b/github/Organization.py @@ -67,6 +67,7 @@ # Copyright 2025 Enrico Minack # # Copyright 2025 Pavel Abramov <31950564+uncleDecart@users.noreply.github.com> # # Copyright 2025 Zachary <6599715+interifter@users.noreply.github.com> # +# Copyright 2026 Matt Davis <35502728+matt-davis27@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -92,6 +93,8 @@ from datetime import datetime from typing import TYPE_CHECKING, Any +from typing_extensions import deprecated + import github.CodeSecurityConfig import github.CodeSecurityConfigRepository import github.Copilot @@ -100,9 +103,11 @@ import github.GithubObject import github.HookDelivery import github.NamedUser +import github.OrganizationCodeScanAlert import github.OrganizationCustomProperty import github.OrganizationDependabotAlert import github.OrganizationSecret +import github.OrganizationSecretScanAlert import github.OrganizationVariable import github.Plan import github.Project @@ -137,6 +142,7 @@ from github.Label import Label from github.Migration import Migration from github.NamedUser import NamedUser, OrganizationInvitation + from github.OrganizationCodeScanAlert import OrganizationCodeScanAlert from github.OrganizationCustomProperty import ( CustomProperty, OrganizationCustomProperty, @@ -144,6 +150,7 @@ ) from github.OrganizationDependabotAlert import OrganizationDependabotAlert from github.OrganizationSecret import OrganizationSecret + from github.OrganizationSecretScanAlert import OrganizationSecretScanAlert from github.OrganizationVariable import OrganizationVariable from github.Plan import Plan from github.Project import Project @@ -655,7 +662,7 @@ def web_commit_signoff_required(self) -> bool: def add_to_members(self, member: NamedUser, role: Opt[str] = NotSet) -> None: """ - :calls: `PUT /orgs/{org}/memberships/{user} `_ + :calls: `PUT /orgs/{org}/memberships/{username} `_ """ assert is_optional(role, str), role assert isinstance(member, github.NamedUser.NamedUser), member @@ -666,7 +673,7 @@ def add_to_members(self, member: NamedUser, role: Opt[str] = NotSet) -> None: def add_to_public_members(self, public_member: NamedUser) -> None: """ - :calls: `PUT /orgs/{org}/public_members/{user} `_ + :calls: `PUT /orgs/{org}/public_members/{username} `_ """ assert isinstance(public_member, github.NamedUser.NamedUser), public_member headers, data = self._requester.requestJsonAndCheck( @@ -731,7 +738,7 @@ def create_hook( active: Opt[bool] = NotSet, ) -> Hook: """ - :calls: `POST /orgs/{owner}/hooks `_ + :calls: `POST /orgs/{org}/hooks `_ :param name: string :param config: dict :param events: list of string @@ -886,7 +893,8 @@ def create_secret( :param selected_repositories: list of repositrories that the secret will be available in :param secret_type: string options actions or dependabot - :calls: `PUT /orgs/{org}/{secret_type}/secrets/{secret_name} `_ + :calls: `PUT /orgs/{org}/actions/secrets/{secret_name} `_ + :calls: `PUT /orgs/{org}/dependabot/secrets/{secret_name} `_ """ assert isinstance(secret_name, str), secret_name assert isinstance(unencrypted_value, str), unencrypted_value @@ -917,18 +925,17 @@ def create_secret( if secret_type == "dependabot": put_parameters["selected_repository_ids"] = [str(element.id) for element in selected_repositories] - self._requester.requestJsonAndCheck( - "PUT", f"{self.url}/{secret_type}/secrets/{urllib.parse.quote(secret_name)}", input=put_parameters - ) + quoted_secret_name = urllib.parse.quote(secret_name, safe="") + url = f"{self.url}/{secret_type}/secrets/{quoted_secret_name}" + self._requester.requestJsonAndCheck("PUT", url, input=put_parameters) return github.OrganizationSecret.OrganizationSecret( - requester=self._requester, - headers={}, + self._requester, + url=url, attributes={ "name": secret_name, "visibility": visibility, - "selected_repositories_url": f"{self.url}/{secret_type}/secrets/{urllib.parse.quote(secret_name)}/repositories", - "url": f"{self.url}/{secret_type}/secrets/{urllib.parse.quote(secret_name)}", + "selected_repositories_url": f"{url}/repositories", }, completed=False, ) @@ -937,7 +944,9 @@ def get_secrets(self, secret_type: str = "actions") -> PaginatedList[Organizatio """ Gets all organization secrets :param secret_type: string options actions or dependabot :rtype: - :class:`PaginatedList` of :class:`github.OrganizationSecret.OrganizationSecret` + :calls: `GET /orgs/{org}/actions/secrets `_ :calls: `GET /orgs/{org}/dependabot/secrets + `_ """ assert secret_type in ["actions", "dependabot"], "secret_type should be actions or dependabot" @@ -951,19 +960,17 @@ def get_secrets(self, secret_type: str = "actions") -> PaginatedList[Organizatio def get_secret(self, secret_name: str, secret_type: str = "actions") -> OrganizationSecret: """ - :calls: `GET /orgs/{org}/{secret_type}/secrets/{secret_name} `_ + :calls: `GET /orgs/{org}/actions/secrets/{secret_name} `_ + :calls: `GET /orgs/{org}/dependabot/secrets/{secret_name} `_ :param secret_name: string :param secret_type: string options actions or dependabot :rtype: github.OrganizationSecret.OrganizationSecret """ assert isinstance(secret_name, str), secret_name assert secret_type in ["actions", "dependabot"], "secret_type should be actions or dependabot" - return github.OrganizationSecret.OrganizationSecret( - requester=self._requester, - headers={}, - attributes={"url": f"{self.url}/{secret_type}/secrets/{urllib.parse.quote(secret_name)}"}, - completed=False, - ) + secret_name = urllib.parse.quote(secret_name, safe="") + url = f"{self.url}/{secret_type}/secrets/{secret_name}" + return github.OrganizationSecret.OrganizationSecret(self._requester, url=url) def create_team( self, @@ -1020,7 +1027,7 @@ def create_variable( selected_repositories: github.GithubObject.Opt[list[github.Repository.Repository]] = NotSet, ) -> github.OrganizationVariable.OrganizationVariable: """ - :calls: `POST /orgs/{org}/actions/variables/ `_ + :calls: `POST /orgs/{org}/actions/variables `_ :param variable_name: string :param value: string :param visibility: string @@ -1075,21 +1082,18 @@ def get_variables(self) -> PaginatedList[OrganizationVariable]: def get_variable(self, variable_name: str) -> OrganizationVariable: """ - :calls: `GET /orgs/{org}/actions/variables/{variable_name} `_ + :calls: `GET /orgs/{org}/actions/variables/{name} `_ :param variable_name: string :rtype: github.OrganizationVariable.OrganizationVariable """ assert isinstance(variable_name, str), variable_name - return github.OrganizationVariable.OrganizationVariable( - requester=self._requester, - headers={}, - attributes={"url": f"{self.url}/actions/variables/{urllib.parse.quote(variable_name)}"}, - completed=False, - ) + variable_name = urllib.parse.quote(variable_name, safe="") + url = f"{self.url}/actions/variables/{variable_name}" + return github.OrganizationVariable.OrganizationVariable(self._requester, url=url) def delete_hook(self, id: int) -> None: """ - :calls: `DELETE /orgs/{owner}/hooks/{id} `_ + :calls: `DELETE /orgs/{org}/hooks/{hook_id} `_ :param id: integer :rtype: None` """ @@ -1130,7 +1134,9 @@ def edit( headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() + @deprecated("Use Organization.get_hook(id).edit(…) instead") def edit_hook( self, id: int, @@ -1140,7 +1146,7 @@ def edit_hook( active: Opt[bool] = NotSet, ) -> Hook: """ - :calls: `PATCH /orgs/{owner}/hooks/{id} `_ + :calls: `PATCH /orgs/{org}/hooks/{hook_id} `_ """ assert isinstance(id, int), id assert isinstance(name, str), name @@ -1163,21 +1169,21 @@ def get_events(self) -> PaginatedList[Event]: def get_hook(self, id: int) -> github.Hook.Hook: """ - :calls: `GET /orgs/{owner}/hooks/{id} `_ + :calls: `GET /orgs/{org}/hooks/{hook_id} `_ """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/hooks/{id}") - return github.Hook.Hook(self._requester, headers, data, completed=True) + url = f"{self.url}/hooks/{id}" + return github.Hook.Hook(self._requester, url=url) def get_hooks(self) -> PaginatedList[Hook]: """ - :calls: `GET /orgs/{owner}/hooks `_ + :calls: `GET /orgs/{org}/hooks `_ """ return PaginatedList(github.Hook.Hook, self._requester, f"{self.url}/hooks", None) def get_hook_delivery(self, hook_id: int, delivery_id: int) -> github.HookDelivery.HookDelivery: """ - :calls: `GET /orgs/{owner}/hooks/{hook_id}/deliveries/{delivery_id} `_ + :calls: `GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id} `_ :param hook_id: integer :param delivery_id: integer :rtype: :class:`github.HookDelivery.HookDelivery` @@ -1191,7 +1197,7 @@ def get_hook_delivery(self, hook_id: int, delivery_id: int) -> github.HookDelive def get_hook_deliveries(self, hook_id: int) -> PaginatedList[github.HookDelivery.HookDeliverySummary]: """ - :calls: `GET /orgs/{owner}/hooks/{hook_id}/deliveries `_ + :calls: `GET /orgs/{org}/hooks/{hook_id}/deliveries `_ :param hook_id: integer :rtype: :class:`PaginatedList` of :class:`github.HookDelivery.HookDeliverySummary` """ @@ -1323,7 +1329,8 @@ def convert_to_outside_collaborator(self, member: NamedUser) -> None: def get_public_key(self, secret_type: str = "actions") -> PublicKey: """ - :calls: `GET /orgs/{org}/{secret_type}/secrets/public-key `_ + :calls: `GET /orgs/{org}/actions/secrets/public-key `_ + :calls: `GET /orgs/{org}/dependabot/secrets/public-key `_ :param secret_type: string options actions or dependabot :rtype: :class:`github.PublicKey.PublicKey` """ @@ -1343,13 +1350,9 @@ def get_repo(self, name: str) -> Repository: :rtype: :class:`github.Repository.Repository` """ assert isinstance(name, str), name - name = urllib.parse.quote(name) - headers, data = self._requester.requestJsonAndCheck( - "GET", - f"/repos/{self.login}/{name}", - headers={"Accept": Consts.repoVisibilityPreview}, - ) - return github.Repository.Repository(self._requester, headers, data, completed=True) + name = urllib.parse.quote(name, safe="") + url = f"/repos/{self.login}/{name}" + return github.Repository.Repository(self._requester, url=url, accept=Consts.repoVisibilityPreview) def get_repos( self, @@ -1379,20 +1382,20 @@ def get_repos( def get_team(self, id: int) -> Team: """ - :calls: `GET /teams/{id} `_ + :calls: `GET /teams/{team_id} `_ """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"/teams/{id}") - return github.Team.Team(self._requester, headers, data, completed=True) + url = f"/teams/{id}" + return github.Team.Team(self._requester, url=url) def get_team_by_slug(self, slug: str) -> Team: """ :calls: `GET /orgs/{org}/teams/{team_slug} `_ """ assert isinstance(slug, str), slug - slug = urllib.parse.quote(slug) - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/teams/{slug}") - return github.Team.Team(self._requester, headers, data, completed=True) + slug = urllib.parse.quote(slug, safe="") + url = f"{self.url}/teams/{slug}" + return github.Team.Team(self._requester, url=url) def get_teams(self) -> PaginatedList[Team]: """ @@ -1460,7 +1463,7 @@ def cancel_invitation(self, invitee: NamedUser) -> bool: def has_in_members(self, member: NamedUser) -> bool: """ - :calls: `GET /orgs/{org}/members/{user} `_ + :calls: `GET /orgs/{org}/members/{username} `_ :param member: :class:`github.NamedUser.NamedUser` :rtype: bool """ @@ -1472,7 +1475,7 @@ def has_in_members(self, member: NamedUser) -> bool: def has_in_public_members(self, public_member: NamedUser) -> bool: """ - :calls: `GET /orgs/{org}/public_members/{user} `_ + :calls: `GET /orgs/{org}/public_members/{username} `_ :param public_member: :class:`github.NamedUser.NamedUser` :rtype: bool """ @@ -1484,7 +1487,7 @@ def has_in_public_members(self, public_member: NamedUser) -> bool: def remove_from_membership(self, member: NamedUser) -> None: """ - :calls: `DELETE /orgs/{org}/memberships/{user} `_ + :calls: `DELETE /orgs/{org}/memberships/{username} `_ :param member: :class:`github.NamedUser.NamedUser` :rtype: None """ @@ -1493,7 +1496,7 @@ def remove_from_membership(self, member: NamedUser) -> None: def remove_from_members(self, member: NamedUser) -> None: """ - :calls: `DELETE /orgs/{org}/members/{user} `_ + :calls: `DELETE /orgs/{org}/members/{username} `_ :param member: :class:`github.NamedUser.NamedUser` :rtype: None """ @@ -1502,7 +1505,7 @@ def remove_from_members(self, member: NamedUser) -> None: def remove_from_public_members(self, public_member: NamedUser) -> None: """ - :calls: `DELETE /orgs/{org}/public_members/{user} `_ + :calls: `DELETE /orgs/{org}/public_members/{username} `_ :param public_member: :class:`github.NamedUser.NamedUser` :rtype: None """ @@ -1623,6 +1626,134 @@ def get_dependabot_alerts( url_parameters, ) + def get_codescan_alerts( + self, + tool_name: Opt[str] = NotSet, + tool_guid: Opt[str] = NotSet, + ref: Opt[str] = NotSet, + pr: Opt[int] = NotSet, + sort: Opt[str] = NotSet, + direction: Opt[str] = NotSet, + state: Opt[str] = NotSet, + severity: Opt[str] = NotSet, + ) -> PaginatedList[OrganizationCodeScanAlert]: + """ + :calls: `GET /orgs/{org}/code-scanning/alerts `_ + :param tool_name: Optional string + :param tool_guid: Optional string + :param ref: Optional string + :param pr: Optional integer + :param sort: Optional string + :param direction: Optional string + :param state: Optional string + :param severity: Optional string + :rtype: :class:`PaginatedList` of :class:`github.CodeScanAlert.CodeScanAlert` + """ + allowed_sorts = ["created", "updated"] + allowed_directions = ["asc", "desc"] + allowed_states = ["open", "closed", "dismissed", "fixed"] + allowed_severities = ["critical", "high", "medium", "low", "warning", "note", "error"] + assert is_optional(tool_name, str), tool_name + assert is_optional(tool_guid, str), tool_guid + assert ( + tool_name is NotSet or tool_guid is NotSet + ), "You can specify the tool by using either tool_guid or tool_name, but not both." + assert is_optional(ref, str), ref + assert is_optional(pr, int), pr + assert sort in allowed_sorts + [NotSet], f"Sort can be one of {', '.join(allowed_sorts)}" + assert direction in allowed_directions + [NotSet], f"Direction can be one of {', '.join(allowed_directions)}" + assert state in allowed_states + [NotSet], f"State can be one of {', '.join(allowed_states)}" + assert severity in allowed_severities + [NotSet], f"Severity can be one of {', '.join(allowed_severities)}" + url_parameters = NotSet.remove_unset_items( + { + "tool_name": tool_name, + "tool_guid": tool_guid, + "ref": ref, + "pr": pr, + "sort": sort, + "direction": direction, + "state": state, + "severity": severity, + } + ) + return PaginatedList( + github.OrganizationCodeScanAlert.OrganizationCodeScanAlert, + self._requester, + f"{self.url}/code-scanning/alerts", + url_parameters, + ) + + def get_secret_scanning_alerts( + self, + state: Opt[str] = NotSet, + secret_type: Opt[str] = NotSet, + resolution: Opt[str] = NotSet, + sort: Opt[str] = NotSet, + direction: Opt[str] = NotSet, + validity: Opt[str] = NotSet, + is_publicly_leaked: Opt[bool] = NotSet, + is_multi_repo: Opt[bool] = NotSet, + hide_secret: Opt[bool] = NotSet, + ) -> PaginatedList[OrganizationSecretScanAlert]: + """ + :calls: `GET /orgs/{org}/secret-scanning/alerts `_ + :param state: Optional string + :param secret_type: Optional string + :param resolution: Optional string + :param sort: Optional string + :param direction: Optional string + :param validity: Optional string + :param is_publicly_leaked: Optional bool + :param is_multi_repo: Optional bool + :param hide_secret: Optional bool + :rtype: :class:`PaginatedList` of :class:`github.SecretScanAlert.SecretScanAlert` + """ + allowed_states = ["open", "resolved"] + # allowed_secret_types = ["http_basic_authentication_header", "http_bearer_authentication_header", ...] + allowed_resolutions = [ + "false_positive", + "wont_fix", + "revoked", + "pattern_edited", + "pattern_deleted", + "used_in_tests", + ] + allowed_sorts = ["created", "updated"] + allowed_directions = ["asc", "desc"] + allowed_validities = ["active", "inactive", "unknown"] + assert state in allowed_states + [NotSet], f"State can be one of {', '.join(allowed_states)}" + # assert secret_type in allowed_secret_types + [NotSet], \ + # "Secret_type can be one of the tokens listed on \ + # https://docs.github.com/en/code-security/secret-scanning/introduction/supported-secret-scanning-patterns#supported-secrets" + assert resolution in allowed_resolutions + [ + NotSet + ], f"Resolution can be one of {', '.join(allowed_resolutions)}" + assert sort in allowed_sorts + [NotSet], f"Sort can be one of {', '.join(allowed_sorts)}" + assert direction in allowed_directions + [NotSet], f"Direction can be one of {', '.join(allowed_directions)}" + assert validity in allowed_validities + [NotSet], f"Validity can be one of {', '.join(allowed_validities)}" + assert is_optional(is_publicly_leaked, bool), is_publicly_leaked + assert is_optional(is_multi_repo, bool), is_multi_repo + assert is_optional(hide_secret, bool), hide_secret + url_parameters = NotSet.remove_unset_items( + { + "state": state, + "secret_type": secret_type, + "resolution": resolution, + "sort": sort, + "direction": direction, + "validity": validity, + "is_publicly_leaked": is_publicly_leaked, + "is_multi_repo": is_multi_repo, + "hide_secret": hide_secret, + } + ) + return PaginatedList( + github.OrganizationSecretScanAlert.OrganizationSecretScanAlert, + self._requester, + f"{self.url}/secret-scanning/alerts", + url_parameters, + ) + def get_custom_properties(self) -> PaginatedList[OrganizationCustomProperty]: """ :calls: `GET /orgs/{org}/properties/schema `_ @@ -1637,7 +1768,7 @@ def get_custom_properties(self) -> PaginatedList[OrganizationCustomProperty]: def get_custom_property(self, property_name: str) -> OrganizationCustomProperty: """ - :calls: `GET /orgs/{org}/properties/schema/{property_name} `_ + :calls: `GET /orgs/{org}/properties/schema/{custom_property_name} `_ :param property_name: string :rtype: :class:`github.OrganizationCustomProperty.OrganizationCustomProperty` """ @@ -1674,7 +1805,7 @@ def create_custom_properties(self, properties: list[CustomProperty]) -> list[Org def create_custom_property(self, property: CustomProperty) -> OrganizationCustomProperty: """ Create or update a custom property for an organization - :calls: `PUT /orgs/{org}/properties/schema/{property_name} `_ + :calls: `PUT /orgs/{org}/properties/schema/{custom_property_name} `_ :param property: :class:`github.OrganizationCustomProperty.CustomProperty` :rtype: :class:`github.OrganizationCustomProperty.OrganizationCustomProperty` """ @@ -1692,7 +1823,7 @@ def create_custom_property(self, property: CustomProperty) -> OrganizationCustom def remove_custom_property(self, property_name: str) -> None: """ - :calls: `DELETE /orgs/{org}/properties/schema/{property_name} `_ + :calls: `DELETE /orgs/{org}/properties/schema/{custom_property_name} `_ :param property_name: string :rtype: None """ @@ -1703,7 +1834,7 @@ def list_custom_property_values( self, repository_query: Opt[str] = NotSet ) -> PaginatedList[RepositoryCustomPropertyValues]: """ - :calls: `GET /orgs/{org}/properties `_ + :calls: `GET /orgs/{org}/properties/values `_ :rtype: :class:`PaginatedList` of dict """ return PaginatedList( @@ -1718,7 +1849,7 @@ def create_custom_property_values( ) -> None: """ Create or update custom property values for organization repositories - :calls: `PATCH /orgs/{org}/properties `_ + :calls: `PATCH /orgs/{org}/properties/values `_ :param repository_names: list of strings :param properties: dict of string to string, list or None :rtype: None @@ -2152,6 +2283,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._location = self._makeStringAttribute(attributes["location"]) if "login" in attributes: # pragma no branch self._login = self._makeStringAttribute(attributes["login"]) + elif "url" in attributes: + self._login = self._makeStringAttribute(attributes["url"].split("/")[-1]) if "members_allowed_repository_creation_type" in attributes: # pragma no branch self._members_allowed_repository_creation_type = self._makeStringAttribute( attributes["members_allowed_repository_creation_type"] diff --git a/github/OrganizationCodeScanAlert.py b/github/OrganizationCodeScanAlert.py new file mode 100644 index 0000000000..5812e067e9 --- /dev/null +++ b/github/OrganizationCodeScanAlert.py @@ -0,0 +1,60 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2024 Enrico Minack # +# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2024 Thomas Cooper # +# Copyright 2025 Enrico Minack # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from typing import Any + +from github.CodeScanAlert import CodeScanAlert +from github.GithubObject import Attribute, NotSet +from github.Repository import Repository + + +class OrganizationCodeScanAlert(CodeScanAlert): + """ + This class represents a Code Scan Alerts for an organization. + + The reference can be found here + https://docs.github.com/en/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-an-organization + + The OpenAPI schema can be found at + + - /components/schemas/code-scanning-organization-alert-items + + """ + + def _initAttributes(self) -> None: + super()._initAttributes() + self._repository: Attribute[Repository] = NotSet + + @property + def repository(self) -> Repository: + return self._repository.value + + def _useAttributes(self, attributes: dict[str, Any]) -> None: + super()._useAttributes(attributes) + if "repository" in attributes: + self._repository = self._makeClassAttribute(Repository, attributes["repository"]) diff --git a/github/OrganizationCustomProperty.py b/github/OrganizationCustomProperty.py index 50707a64b1..5bdda4d3d6 100644 --- a/github/OrganizationCustomProperty.py +++ b/github/OrganizationCustomProperty.py @@ -160,6 +160,10 @@ class RepositoryCustomPropertyValues(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/orgs/custom-properties#list-custom-property-values-for-organization-repositories + The OpenAPI schema can be found at + + - /components/schemas/org-repo-custom-property-values + """ def _initAttributes(self) -> None: @@ -185,8 +189,12 @@ def repository_name(self) -> str: return self._repository_name.value def _useAttributes(self, attributes: dict[str, Any]) -> None: - self._repository_id = self._makeIntAttribute(attributes["repository_id"]) - self._repository_name = self._makeStringAttribute(attributes["repository_name"]) - self._repository_full_name = self._makeStringAttribute(attributes["repository_full_name"]) - properties = {p["property_name"]: p["value"] for p in attributes["properties"]} - self._properties = self._makeDictAttribute(properties) + if "properties" in attributes: # pragma no branch + properties = {p["property_name"]: p["value"] for p in attributes["properties"]} + self._properties = self._makeDictAttribute(properties) + if "repository_full_name" in attributes: # pragma no branch + self._repository_full_name = self._makeStringAttribute(attributes["repository_full_name"]) + if "repository_id" in attributes: # pragma no branch + self._repository_id = self._makeIntAttribute(attributes["repository_id"]) + if "repository_name" in attributes: # pragma no branch + self._repository_name = self._makeStringAttribute(attributes["repository_name"]) diff --git a/github/OrganizationSecret.py b/github/OrganizationSecret.py index f1d1f1310a..bae5499e7e 100644 --- a/github/OrganizationSecret.py +++ b/github/OrganizationSecret.py @@ -27,6 +27,7 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from typing import Any @@ -43,6 +44,10 @@ class OrganizationSecret(Secret): The reference can be found here https://docs.github.com/en/rest/actions/secrets + The OpenAPI schema can be found at + + - /components/schemas/organization-actions-secret + """ def _initAttributes(self) -> None: @@ -54,6 +59,11 @@ def _initAttributes(self) -> None: self._url: Attribute[str] = NotSet self._visibility: Attribute[str] = NotSet + @property + def selected_repositories_url(self) -> str: + self._completeIfNotSet(self._selected_repositories_url) + return self._selected_repositories_url.value + @property def visibility(self) -> str: """ @@ -79,7 +89,8 @@ def edit( secret_type: str = "actions", ) -> bool: """ - :calls: `PATCH /orgs/{org}/{secret_type}/secrets/{variable_name} `_ + :calls: `PATCH /orgs/{org}/actions/secrets/{secret_name} `_ + :calls: `PATCH /orgs/{org}/dependabot/secrets/{secret_name} `_ :param variable_name: string :param value: string :param visibility: string @@ -105,7 +116,7 @@ def edit( def add_repo(self, repo: Repository) -> bool: """ - :calls: `PUT /orgs/{org}/actions/secrets/{secret_name}` `_ + :calls: `PUT /orgs/{org}/actions/secrets/{secret_name} `_ :param repo: github.Repository.Repository :rtype: bool """ @@ -116,7 +127,7 @@ def add_repo(self, repo: Repository) -> bool: def remove_repo(self, repo: Repository) -> bool: """ - :calls: `DELETE /orgs/{org}/actions/secrets/{secret_name}` `_ + :calls: `DELETE /orgs/{org}/actions/secrets/{secret_name} `_ :param repo: github.Repository.Repository :rtype: bool """ @@ -130,6 +141,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "name" in attributes: self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes and attributes["url"]: + quoted_name = attributes["url"].split("/")[-1] + name = urllib.parse.unquote(quoted_name) + self._name = self._makeStringAttribute(name) if "selected_repositories_url" in attributes: self._selected_repositories_url = self._makeStringAttribute(attributes["selected_repositories_url"]) if "updated_at" in attributes: diff --git a/github/OrganizationSecretScanAlert.py b/github/OrganizationSecretScanAlert.py new file mode 100644 index 0000000000..5775f494e5 --- /dev/null +++ b/github/OrganizationSecretScanAlert.py @@ -0,0 +1,60 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2024 Enrico Minack # +# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2024 Thomas Cooper # +# Copyright 2025 Enrico Minack # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from typing import Any + +from github.GithubObject import Attribute, NotSet +from github.Repository import Repository +from github.SecretScanAlert import SecretScanAlert + + +class OrganizationSecretScanAlert(SecretScanAlert): + """ + This class represents a Secret Scanning Alert on an organization. + + The reference can be found here + https://docs.github.com/en/rest/secret-scanning/secret-scanning#list-secret-scanning-alerts-for-an-organization + + The OpenAPI schema can be found at + + - /components/schemas/organization-secret-scanning-alert + + """ + + def _initAttributes(self) -> None: + super()._initAttributes() + self._repository: Attribute[Repository] = NotSet + + @property + def repository(self) -> Repository: + return self._repository.value + + def _useAttributes(self, attributes: dict[str, Any]) -> None: + super()._useAttributes(attributes) + if "repository" in attributes: + self._repository = self._makeClassAttribute(Repository, attributes["repository"]) diff --git a/github/OrganizationVariable.py b/github/OrganizationVariable.py index c3552f91ea..494fd57d07 100644 --- a/github/OrganizationVariable.py +++ b/github/OrganizationVariable.py @@ -26,6 +26,7 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from typing import Any @@ -42,6 +43,10 @@ class OrganizationVariable(Variable): The reference can be found here https://docs.github.com/en/rest/actions/variables + The OpenAPI schema can be found at + + - /components/schemas/organization-actions-variable + """ def _initAttributes(self) -> None: @@ -53,6 +58,11 @@ def _initAttributes(self) -> None: self._url: Attribute[str] = NotSet self._visibility: Attribute[str] = NotSet + @property + def selected_repositories_url(self) -> str: + self._completeIfNotSet(self._selected_repositories_url) + return self._selected_repositories_url.value + @property def visibility(self) -> str: """ @@ -77,7 +87,7 @@ def edit( visibility: str = "all", ) -> bool: """ - :calls: `PATCH /orgs/{org}/actions/variables/{variable_name} `_ + :calls: `PATCH /orgs/{org}/actions/variables/{name} `_ :param variable_name: string :param value: string :param visibility: string @@ -101,7 +111,7 @@ def edit( def add_repo(self, repo: Repository) -> bool: """ - :calls: `PUT /orgs/{org}/actions/variables/{variable_name} `_ + :calls: `PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id} `_ :param repo: github.Repository.Repository :rtype: bool """ @@ -112,7 +122,7 @@ def add_repo(self, repo: Repository) -> bool: def remove_repo(self, repo: Repository) -> bool: """ - :calls: `DELETE /orgs/{org}/actions/variables/{variable_name} `_ + :calls: `DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id} `_ :param repo: github.Repository.Repository :rtype: bool """ @@ -126,6 +136,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "name" in attributes: self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes and attributes["url"]: + quoted_name = attributes["url"].split("/")[-1] + name = urllib.parse.unquote(quoted_name) + self._name = self._makeStringAttribute(name) if "selected_repositories_url" in attributes: self._selected_repositories_url = self._makeStringAttribute(attributes["selected_repositories_url"]) if "updated_at" in attributes: diff --git a/github/PaginatedList.py b/github/PaginatedList.py index 390256c127..ca569bd4f8 100644 --- a/github/PaginatedList.py +++ b/github/PaginatedList.py @@ -31,8 +31,11 @@ # Copyright 2023 YugoHino # # Copyright 2024 Enrico Minack # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # Copyright 2025 Matej Focko # # Copyright 2025 Sam <35731946+sam93210@users.noreply.github.com> # +# Copyright 2025 odedperezcodes # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -54,7 +57,8 @@ from __future__ import annotations -from typing import Any, Callable, Generic, Iterator, TypeVar, overload +from collections.abc import Callable, Iterator +from typing import Any, Generic, TypeVar, overload from urllib.parse import parse_qs from github import Consts @@ -110,6 +114,12 @@ def _grow(self) -> list[T]: self.__elements += newElements return newElements + def _clear(self) -> None: + self.__elements.clear() + + def _reverse(self) -> None: + self.__elements.reverse() + class _Slice: def __init__(self, theList: PaginatedListBase[T], theSlice: slice): self.__list = theList @@ -161,6 +171,17 @@ class PaginatedList(PaginatedListBase[T]): some_repos = repos.get_page(0) some_other_repos = repos.get_page(3) + + Individual items of this list are fetched in pages. The size of those pages + is configured via ``per_page`` when creating the :class:`github.MainClass.Github` instance:: + + g = github.Github(per_page=100) + + The default page size is 30. The maximum page size is usually 100. + + Paginated lists are returned by ``get_…`` methods. Additionally, some classes have one property + that is a paginated list, called `paginated property `_. + """ # v3: move * before firstUrl and fix call sites @@ -188,19 +209,28 @@ def __init__( 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") + firstParams = firstParams or {} + + # we add the per_page parameter if that value is not the default + # but only if there is no per_page parameter in the firstParams + if "per_page" not in firstParams and requester.per_page != Consts.DEFAULT_PER_PAGE: + firstParams["per_page"] = requester.per_page + self.__requester = requester self.__contentClass = contentClass self.__is_rest = firstUrl is not None or firstData is not None self.__firstUrl = firstUrl - self.__firstParams: dict[str, Any] = firstParams or {} + self.__firstParams: dict[str, Any] = firstParams + self.__firstData = firstData + self.__firstHeaders = firstHeaders self.__nextUrl = firstUrl - self.__nextParams: dict[str, Any] = firstParams or {} + self.__nextParams: dict[str, Any] = firstParams + self.__lastUrl: str | None = None self.__headers = headers self.__list_item = list_item self.__total_count_item = total_count_item - if self.__requester.per_page != 30: - self.__nextParams["per_page"] = self.__requester.per_page + self._reversed = False self.__totalCount: int | None = None self._attributesTransformer = attributesTransformer @@ -240,22 +270,18 @@ def totalCount(self) -> int: 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 + links = self.__parseLinkHeader(headers) + lastUrl = links.get("last") + if lastUrl: + self.__totalCount = int(parse_qs(lastUrl)["page"][0]) + elif 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: - links = self.__parseLinkHeader(headers) - lastUrl = links.get("last") - if lastUrl: - self.__totalCount = int(parse_qs(lastUrl)["page"][0]) - else: - self.__totalCount = 0 + self.__totalCount = 0 else: variables = self.__graphql_variables.copy() if not self._reversed: @@ -286,6 +312,9 @@ def reversed(self) -> PaginatedList[T]: self.__firstParams, headers=self.__headers, list_item=self.__list_item, + total_count_item=self.__total_count_item, + firstData=self.__firstData, + firstHeaders=self.__firstHeaders, attributesTransformer=self._attributesTransformer, graphql_query=self.__graphql_query, graphql_variables=self.__graphql_variables, @@ -296,16 +325,20 @@ def reversed(self) -> PaginatedList[T]: def __reverse(self) -> None: self._reversed = True 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() - } + if self.__lastUrl is None: + self.__lastUrl = self._getLastPageUrl() + if self.__lastUrl: + if self.__lastUrl != self.__firstUrl: + super()._clear() + self.__nextUrl = self.__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() + } + super()._reverse() # To support Python's built-in `reversed()` method def __reversed__(self) -> PaginatedList[T]: @@ -367,6 +400,8 @@ def _getPage(self, data: Any, headers: dict[str, str | int] | None) -> list[T]: self.__nextUrl = links["prev"] elif "next" in links: self.__nextUrl = links["next"] + if "last" in links: + self.__lastUrl = links["last"] self.__nextParams = {} if self.__list_item in data: self.__totalCount = data.get(self.__total_count_item) diff --git a/github/Permissions.py b/github/Permissions.py index 22d7a50d46..e4cf83d2d4 100644 --- a/github/Permissions.py +++ b/github/Permissions.py @@ -56,6 +56,7 @@ class Permissions(NonCompletableGithubObject): - /components/schemas/nullable-repository/properties/permissions - /components/schemas/repo-search-result-item/properties/permissions - /components/schemas/repository/properties/permissions + - /components/schemas/team-repository/properties/permissions - /components/schemas/team/properties/permissions """ diff --git a/github/Plan.py b/github/Plan.py index 5efb7be5fe..8b8dd173be 100644 --- a/github/Plan.py +++ b/github/Plan.py @@ -51,6 +51,7 @@ class Plan(NonCompletableGithubObject): The OpenAPI schema can be found at - /components/schemas/organization-full/properties/plan + - /components/schemas/private-user/properties/plan - /components/schemas/public-user/properties/plan - /components/schemas/team-organization/properties/plan diff --git a/github/Project.py b/github/Project.py index 9d3d309d44..a1c9f9332a 100644 --- a/github/Project.py +++ b/github/Project.py @@ -212,6 +212,7 @@ def edit( headers={"Accept": Consts.mediaTypeProjectsPreview}, ) self._useAttributes(data) + self._set_complete() def get_columns(self) -> PaginatedList[github.ProjectColumn.ProjectColumn]: """ @@ -257,6 +258,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch diff --git a/github/ProjectCard.py b/github/ProjectCard.py index d8f2acd634..a284825a41 100644 --- a/github/ProjectCard.py +++ b/github/ProjectCard.py @@ -154,7 +154,8 @@ def get_content( self, content_type: Opt[str] = NotSet ) -> github.PullRequest.PullRequest | github.Issue.Issue | None: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number} `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number} `_ + :calls: `GET /repos/{owner}/{repo}/issues/{pull_number} `_ """ assert content_type is NotSet or isinstance(content_type, str), content_type if self.content_url is None: @@ -169,8 +170,7 @@ def get_content( retclass = github.Issue.Issue else: raise ValueError(f"Unknown content type: {content_type}") - headers, data = self._requester.requestJsonAndCheck("GET", url) - return retclass(self._requester, headers, data, completed=True) + return retclass(self._requester, url=url) def move(self, position: str, column: github.ProjectColumn.ProjectColumn | int) -> bool: """ diff --git a/github/ProjectColumn.py b/github/ProjectColumn.py index 7d61c90328..a1108fd043 100644 --- a/github/ProjectColumn.py +++ b/github/ProjectColumn.py @@ -164,7 +164,7 @@ def create_card( def move(self, position: str) -> bool: """ - :calls: `POST POST /projects/columns/{column_id}/moves `_ + :calls: `POST /projects/columns/{column_id}/moves `_ """ assert isinstance(position, str), position post_parameters = {"position": position} diff --git a/github/PublicKey.py b/github/PublicKey.py index 07b443c62e..1f34590277 100644 --- a/github/PublicKey.py +++ b/github/PublicKey.py @@ -117,7 +117,7 @@ def url(self) -> str: return self._url.value def encrypt(self, unencrypted_value: str) -> str: - return encrypt(self._key.value, unencrypted_value) + return encrypt(self.key, unencrypted_value) def _useAttributes(self, attributes: dict[str, Any]) -> None: if "created_at" in attributes: # pragma no branch diff --git a/github/PullRequest.py b/github/PullRequest.py index ba790fd01e..85c728d06b 100644 --- a/github/PullRequest.py +++ b/github/PullRequest.py @@ -49,6 +49,7 @@ # Copyright 2024 Evan Fetsko # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Kobbi Gal <85439776+kgal-pan@users.noreply.github.com> # +# Copyright 2025 Aidan McNay # # Copyright 2025 Bruno Didot # # Copyright 2025 Eddie Santos <9561596+eddie-santos@users.noreply.github.com> # # Copyright 2025 Enrico Minack # @@ -449,14 +450,13 @@ def user(self) -> NamedUser: def as_issue(self) -> Issue: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number} `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number} `_ """ - headers, data = self._requester.requestJsonAndCheck("GET", self.issue_url) - return github.Issue.Issue(self._requester, headers, data, completed=True) + return github.Issue.Issue(self._requester, url=self.issue_url) def create_comment(self, body: str, commit: github.Commit.Commit, path: str, position: int) -> PullRequestComment: """ - :calls: `POST /repos/{owner}/{repo}/pulls/{number}/comments `_ + :calls: `POST /repos/{owner}/{repo}/pulls/{pull_number}/comments `_ """ return self.create_review_comment(body, commit, path, position) @@ -475,7 +475,7 @@ def create_review_comment( as_suggestion: bool = False, ) -> PullRequestComment: """ - :calls: `POST /repos/{owner}/{repo}/pulls/{number}/comments `_ + :calls: `POST /repos/{owner}/{repo}/pulls/{pull_number}/comments `_ """ assert isinstance(body, str), body assert isinstance(commit, (github.Commit.Commit, str)), commit @@ -532,7 +532,7 @@ def create_review_comment_reply(self, comment_id: int, body: str) -> PullRequest def create_issue_comment(self, body: str) -> IssueComment: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/comments `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/comments `_ """ assert isinstance(body, str), body post_parameters = { @@ -549,7 +549,7 @@ def create_review( comments: Opt[list[ReviewComment]] = NotSet, ) -> PullRequestReview: """ - :calls: `POST /repos/{owner}/{repo}/pulls/{number}/reviews `_ + :calls: `POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews `_ """ assert is_optional(commit, github.Commit.Commit), commit assert is_optional(body, str), body @@ -572,7 +572,7 @@ def create_review_request( team_reviewers: Opt[list[str] | str] = NotSet, ) -> None: """ - :calls: `POST /repos/{owner}/{repo}/pulls/{number}/requested_reviewers `_ + :calls: `POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers `_ """ assert is_optional(reviewers, str) or is_optional_list(reviewers, str), reviewers assert is_optional(team_reviewers, str) or is_optional_list(team_reviewers, str), team_reviewers @@ -594,7 +594,7 @@ def delete_review_request( team_reviewers: Opt[list[str] | str] = NotSet, ) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/pulls/{number}/requested_reviewers `_ + :calls: `DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers `_ """ assert is_optional(reviewers, str) or is_optional_list(reviewers, str), reviewers assert is_optional(team_reviewers, str) or is_optional_list(team_reviewers, str), team_reviewers @@ -619,7 +619,7 @@ def edit( maintainer_can_modify: Opt[bool] = NotSet, ) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/pulls/{number} `_ + :calls: `PATCH /repos/{owner}/{repo}/pulls/{pull_number} `_ """ assert is_optional(title, str), title assert is_optional(body, str), body @@ -632,20 +632,21 @@ def edit( headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def get_comment(self, id: int) -> PullRequestComment: """ - :calls: `GET /repos/{owner}/{repo}/pulls/comments/{number} `_ + :calls: `GET /repos/{owner}/{repo}/pulls/comments/{comment_id} `_ """ return self.get_review_comment(id) def get_review_comment(self, id: int) -> PullRequestComment: """ - :calls: `GET /repos/{owner}/{repo}/pulls/comments/{number} `_ + :calls: `GET /repos/{owner}/{repo}/pulls/comments/{comment_id} `_ """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self._parentUrl(self.url)}/comments/{id}") - return github.PullRequestComment.PullRequestComment(self._requester, headers, data, completed=True) + url = f"{self._parentUrl(self.url)}/comments/{id}" + return github.PullRequestComment.PullRequestComment(self._requester, url=url) def get_comments( self, @@ -656,7 +657,7 @@ def get_comments( """ Warning: this only returns review comments. For normal conversation comments, use get_issue_comments. - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/comments `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/comments `_ :param sort: string 'created' or 'updated' :param direction: string 'asc' or 'desc' :param since: datetime @@ -672,7 +673,7 @@ def get_review_comments( since: Opt[datetime] = NotSet, ) -> PaginatedList[PullRequestComment]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/comments `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/comments `_ :param sort: string 'created' or 'updated' :param direction: string 'asc' or 'desc' :param since: datetime @@ -694,7 +695,7 @@ def get_review_comments( def get_single_review_comments(self, id: int) -> PaginatedList[PullRequestComment]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/review/{id}/comments `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments `_ """ assert isinstance(id, int), id return PaginatedList( @@ -706,27 +707,27 @@ def get_single_review_comments(self, id: int) -> PaginatedList[PullRequestCommen def get_commits(self) -> PaginatedList[Commit]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/commits `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/commits `_ """ return PaginatedList(github.Commit.Commit, self._requester, f"{self.url}/commits", None) def get_files(self) -> PaginatedList[File]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/files `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/files `_ """ return PaginatedList(github.File.File, self._requester, f"{self.url}/files", None) def get_issue_comment(self, id: int) -> IssueComment: """ - :calls: `GET /repos/{owner}/{repo}/issues/comments/{id} `_ + :calls: `GET /repos/{owner}/{repo}/issues/comments/{comment_id} `_ """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self._parentUrl(self.issue_url)}/comments/{id}") - return github.IssueComment.IssueComment(self._requester, headers, data, completed=True) + url = f"{self._parentUrl(self.issue_url)}/comments/{id}" + return github.IssueComment.IssueComment(self._requester, url=url) def get_issue_comments(self) -> PaginatedList[IssueComment]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/comments `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/comments `_ """ return PaginatedList( github.IssueComment.IssueComment, @@ -763,7 +764,7 @@ def get_issue_timeline(self) -> PaginatedList[TimelineEvent]: def get_review(self, id: int) -> PullRequestReview: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/reviews/{id} `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} `_ :param id: integer :rtype: :class:`github.PullRequestReview.PullRequestReview` """ @@ -776,7 +777,7 @@ def get_review(self, id: int) -> PullRequestReview: def get_reviews(self) -> PaginatedList[PullRequestReview]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/reviews `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews `_ :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.PullRequestReview.PullRequestReview` """ return PaginatedList( @@ -788,7 +789,7 @@ def get_reviews(self) -> PaginatedList[PullRequestReview]: def get_review_requests(self) -> tuple[PaginatedList[NamedUser], PaginatedList[Team]]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/requested_reviewers `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers `_ :rtype: tuple of :class:`github.PaginatedList.PaginatedList` of :class:`github.NamedUser.NamedUser` and of :class:`github.PaginatedList.PaginatedList` of :class:`github.Team.Team` """ return ( @@ -810,13 +811,13 @@ def get_review_requests(self) -> tuple[PaginatedList[NamedUser], PaginatedList[T def get_labels(self) -> PaginatedList[Label]: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ return PaginatedList(github.Label.Label, self._requester, f"{self.issue_url}/labels", None) def add_to_labels(self, *labels: github.Label.Label | str) -> None: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ assert all(isinstance(element, (github.Label.Label, str)) for element in labels), labels post_parameters = [label.name if isinstance(label, github.Label.Label) else label for label in labels] @@ -824,13 +825,13 @@ def add_to_labels(self, *labels: github.Label.Label | str) -> None: def delete_labels(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.issue_url}/labels") def remove_from_labels(self, label: github.Label.Label | str) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/labels/{name} `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name} `_ """ assert isinstance(label, (github.Label.Label, str)), label if isinstance(label, github.Label.Label): @@ -841,7 +842,7 @@ def remove_from_labels(self, label: github.Label.Label | str) -> None: def set_labels(self, *labels: github.Label.Label | str) -> None: """ - :calls: `PUT /repos/{owner}/{repo}/issues/{number}/labels `_ + :calls: `PUT /repos/{owner}/{repo}/issues/{issue_number}/labels `_ """ assert all(isinstance(element, (github.Label.Label, str)) for element in labels), labels post_parameters = [label.name if isinstance(label, github.Label.Label) else label for label in labels] @@ -849,7 +850,7 @@ def set_labels(self, *labels: github.Label.Label | str) -> None: def is_merged(self) -> bool: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number}/merge `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/merge `_ """ status, headers, data = self._requester.requestJson("GET", f"{self.url}/merge") return status == 204 @@ -883,7 +884,7 @@ def enable_automerge( ) -> dict[str, Any]: """ :calls: `POST /graphql `_ with a mutation to enable pull request auto merge - + """ assert is_optional(author_email, str), author_email assert is_optional(client_mutation_id, str), client_mutation_id @@ -917,7 +918,7 @@ def disable_automerge( ) -> dict[str, Any]: """ :calls: `POST /graphql `_ with a mutation to disable pull request auto merge - + """ assert is_optional(client_mutation_id, str), client_mutation_id @@ -944,7 +945,7 @@ def merge( delete_branch: bool = False, ) -> PullRequestMergeStatus: """ - :calls: `PUT /repos/{owner}/{repo}/pulls/{number}/merge `_ + :calls: `PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge `_ """ assert is_optional(commit_message, str), commit_message assert is_optional(commit_title, str), commit_title @@ -961,7 +962,7 @@ def merge( def add_to_assignees(self, *assignees: github.NamedUser.NamedUser | str) -> None: """ - :calls: `POST /repos/{owner}/{repo}/issues/{number}/assignees `_ + :calls: `POST /repos/{owner}/{repo}/issues/{issue_number}/assignees `_ """ assert all(isinstance(element, (github.NamedUser.NamedUser, str)) for element in assignees), assignees post_parameters = { @@ -978,7 +979,7 @@ def add_to_assignees(self, *assignees: github.NamedUser.NamedUser | str) -> None def remove_from_assignees(self, *assignees: github.NamedUser.NamedUser | str) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/assignees `_ + :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees `_ """ assert all(isinstance(element, (github.NamedUser.NamedUser, str)) for element in assignees), assignees post_parameters = { @@ -1013,7 +1014,7 @@ def convert_to_draft( ) -> dict[str, Any]: """ :calls: `POST /graphql `_ to convert pull request to draft - + """ assert is_optional(client_mutation_id, str), client_mutation_id @@ -1038,7 +1039,7 @@ def mark_ready_for_review( ) -> dict[str, Any]: """ :calls: `POST /graphql `_ to mark pull request ready for review - + """ assert is_optional(client_mutation_id, str), client_mutation_id @@ -1133,6 +1134,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._node_id = self._makeStringAttribute(attributes["node_id"]) if "number" in attributes: # pragma no branch self._number = self._makeIntAttribute(attributes["number"]) + elif "url" in attributes: + number = attributes["url"].split("/")[-1] + if number.isnumeric(): + self._number = self._makeIntAttribute(int(number)) if "patch_url" in attributes: # pragma no branch self._patch_url = self._makeStringAttribute(attributes["patch_url"]) if "rebaseable" in attributes: # pragma no branch diff --git a/github/PullRequestComment.py b/github/PullRequestComment.py index cea0c1601b..bb7eedac2b 100644 --- a/github/PullRequestComment.py +++ b/github/PullRequestComment.py @@ -53,6 +53,7 @@ import github.GithubObject import github.NamedUser +import github.Organization import github.Reaction from github import Consts from github.GithubObject import Attribute, CompletableGithubObject, NotSet @@ -69,6 +70,7 @@ class PullRequestComment(CompletableGithubObject): The OpenAPI schema can be found at - /components/schemas/pull-request-review-comment + - /components/schemas/review-comment """ @@ -253,14 +255,14 @@ def user(self) -> github.NamedUser.NamedUser: def delete(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/pulls/comments/{number} `_ + :calls: `DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id} `_ :rtype: None """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) def edit(self, body: str) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/pulls/comments/{number} `_ + :calls: `PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id} `_ :param body: string :rtype: None """ @@ -270,10 +272,11 @@ def edit(self, body: str) -> None: } headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def get_reactions(self) -> PaginatedList[github.Reaction.Reaction]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/comments/{number}/reactions + :calls: `GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions `_ :return: :class: :class:`github.PaginatedList.PaginatedList` of :class:`github.Reaction.Reaction` """ @@ -287,7 +290,7 @@ def get_reactions(self) -> PaginatedList[github.Reaction.Reaction]: def create_reaction(self, reaction_type: str) -> github.Reaction.Reaction: """ - :calls: `POST /repos/{owner}/{repo}/pulls/comments/{number}/reactions + :calls: `POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions `_ :param reaction_type: string :rtype: :class:`github.Reaction.Reaction` @@ -302,7 +305,7 @@ def create_reaction(self, reaction_type: str) -> github.Reaction.Reaction: input=post_parameters, headers={"Accept": Consts.mediaTypeReactionsPreview}, ) - return github.Reaction.Reaction(self._requester, headers, data, completed=True) + return github.Reaction.Reaction(self._requester, headers, data) def delete_reaction(self, reaction_id: int) -> bool: """ @@ -340,6 +343,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "in_reply_to_id" in attributes: # pragma no branch self._in_reply_to_id = self._makeIntAttribute(attributes["in_reply_to_id"]) if "line" in attributes: # pragma no branch diff --git a/github/PullRequestMergeStatus.py b/github/PullRequestMergeStatus.py index 5a3b7be066..496693742f 100644 --- a/github/PullRequestMergeStatus.py +++ b/github/PullRequestMergeStatus.py @@ -53,6 +53,10 @@ class PullRequestMergeStatus(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/pulls#check-if-a-pull-request-has-been-merged + The OpenAPI schema can be found at + + - /components/schemas/pull-request-merge-result + """ def _initAttributes(self) -> None: diff --git a/github/PullRequestReview.py b/github/PullRequestReview.py index 0bf5e56650..46f82adb26 100644 --- a/github/PullRequestReview.py +++ b/github/PullRequestReview.py @@ -50,6 +50,7 @@ import github.GithubObject import github.NamedUser +import github.Organization from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet @@ -60,13 +61,21 @@ class PullRequestReview(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/pulls#reviews + The OpenAPI schema can be found at + + - /components/schemas/pull-request-review + """ def _initAttributes(self) -> None: + self._author_association: Attribute[str] = NotSet self._body: Attribute[str] = NotSet + self._body_html: Attribute[str] = NotSet + self._body_text: Attribute[str] = NotSet self._commit_id: Attribute[str] = NotSet self._html_url: Attribute[str] = NotSet self._id: Attribute[int] = NotSet + self._node_id: Attribute[str] = NotSet self._pull_request_url: Attribute[str] = NotSet self._state: Attribute[str] = NotSet self._submitted_at: Attribute[datetime] = NotSet @@ -75,10 +84,22 @@ def _initAttributes(self) -> None: def __repr__(self) -> str: return self.get__repr__({"id": self._id.value, "user": self._user.value}) + @property + def author_association(self) -> str: + return self._author_association.value + @property def body(self) -> str: return self._body.value + @property + def body_html(self) -> str: + return self._body_html.value + + @property + def body_text(self) -> str: + return self._body_text.value + @property def commit_id(self) -> str: return self._commit_id.value @@ -91,6 +112,10 @@ def html_url(self) -> str: def id(self) -> int: return self._id.value + @property + def node_id(self) -> str: + return self._node_id.value + @property def pull_request_url(self) -> str: return self._pull_request_url.value @@ -109,7 +134,7 @@ def user(self) -> github.NamedUser.NamedUser: def dismiss(self, message: str) -> None: """ - :calls: `PUT /repos/{owner}/{repo}/pulls/{number}/reviews/{review_id}/dismissals `_ + :calls: `PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals `_ """ post_parameters = {"message": message} headers, data = self._requester.requestJsonAndCheck( @@ -121,13 +146,13 @@ def dismiss(self, message: str) -> None: def delete(self) -> None: """ - :calls: `DELETE /repos/:owner/:repo/pulls/:number/reviews/:review_id `_ + :calls: `DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.pull_request_url}/reviews/{self.id}") def edit(self, body: str) -> None: """ - :calls: `PUT /repos/{owner}/{repo}/pulls/{number}/reviews/{review_id} + :calls: `PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id} `_ """ assert isinstance(body, str), body @@ -142,14 +167,22 @@ def edit(self, body: str) -> None: self._useAttributes(data) def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "author_association" in attributes: # pragma no branch + self._author_association = self._makeStringAttribute(attributes["author_association"]) if "body" in attributes: # pragma no branch self._body = self._makeStringAttribute(attributes["body"]) + if "body_html" in attributes: # pragma no branch + self._body_html = self._makeStringAttribute(attributes["body_html"]) + if "body_text" in attributes: # pragma no branch + self._body_text = self._makeStringAttribute(attributes["body_text"]) if "commit_id" in attributes: # pragma no branch self._commit_id = self._makeStringAttribute(attributes["commit_id"]) if "html_url" in attributes: # pragma no branch self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) if "pull_request_url" in attributes: # pragma no branch self._pull_request_url = self._makeStringAttribute(attributes["pull_request_url"]) if "state" in attributes: # pragma no branch diff --git a/github/RateLimitOverview.py b/github/RateLimitOverview.py index 3022729a10..158c774393 100644 --- a/github/RateLimitOverview.py +++ b/github/RateLimitOverview.py @@ -4,6 +4,7 @@ # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Thomas Cooper # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -52,6 +53,7 @@ class RateLimitOverview(NonCompletableGithubObject): def _initAttributes(self) -> None: self._rate: Attribute[Rate] = NotSet self._resources: Attribute[RateLimit] = NotSet + self._url: Attribute[str] = NotSet def __repr__(self) -> str: return self.get__repr__({"rate": self._rate.value}) @@ -64,8 +66,14 @@ def rate(self) -> Rate: def resources(self) -> RateLimit: return self._resources.value + @property + def url(self) -> str: + return self._url.value + def _useAttributes(self, attributes: dict[str, Any]) -> None: if "rate" in attributes: # pragma no branch self._rate = self._makeClassAttribute(github.Rate.Rate, attributes["rate"]) if "resources" in attributes: # pragma no branch self._resources = self._makeClassAttribute(github.RateLimit.RateLimit, attributes["resources"]) + if "url" in attributes: # pragma no branch + self._url = self._makeStringAttribute(attributes["url"]) diff --git a/github/Reaction.py b/github/Reaction.py index 56e2c6c81b..7309c846b2 100644 --- a/github/Reaction.py +++ b/github/Reaction.py @@ -20,6 +20,8 @@ # Copyright 2023 Trim21 # # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # +# Copyright 2026 iarspider # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -44,28 +46,35 @@ from datetime import datetime from typing import TYPE_CHECKING, Any -import github.NamedUser -from github.GithubObject import Attribute, CompletableGithubObject, NotSet +from typing_extensions import deprecated -from . import Consts +import github.Consts +import github.NamedUser +import github.Organization +from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet if TYPE_CHECKING: from github.NamedUser import NamedUser -class Reaction(CompletableGithubObject): +class Reaction(NonCompletableGithubObject): """ This class represents Reactions. The reference can be found here https://docs.github.com/en/rest/reference/reactions + The OpenAPI schema can be found at + + - /components/schemas/reaction + """ def _initAttributes(self) -> None: self._content: Attribute[str] = NotSet self._created_at: Attribute[datetime] = NotSet self._id: Attribute[int] = NotSet + self._node_id: Attribute[str] = NotSet self._user: Attribute[NamedUser] = NotSet def __repr__(self) -> str: @@ -73,24 +82,27 @@ def __repr__(self) -> str: @property def content(self) -> str: - self._completeIfNotSet(self._content) return self._content.value @property def created_at(self) -> datetime: - self._completeIfNotSet(self._created_at) return self._created_at.value @property def id(self) -> int: - self._completeIfNotSet(self._id) return self._id.value + @property + def node_id(self) -> str: + return self._node_id.value + @property def user(self) -> NamedUser: - self._completeIfNotSet(self._user) return self._user.value + @deprecated( + "Deprecated, use IssueComment.delete_reaction, PullRequestComment.delete_reaction, CommitComment.delete_reaction or Issue.delete_reaction" + ) def delete(self) -> None: """ :calls: `DELETE /reactions/{id} `_ @@ -99,7 +111,7 @@ def delete(self) -> None: self._requester.requestJsonAndCheck( "DELETE", f"{self._parentUrl('')}/reactions/{self.id}", - headers={"Accept": Consts.mediaTypeReactionsPreview}, + headers={"Accept": github.Consts.mediaTypeReactionsPreview}, ) def _useAttributes(self, attributes: dict[str, Any]) -> None: @@ -109,5 +121,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + if "node_id" in attributes: # pragma no branch + self._node_id = self._makeStringAttribute(attributes["node_id"]) if "user" in attributes: # pragma no branch self._user = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["user"]) diff --git a/github/Repository.py b/github/Repository.py index 3f98c4944b..2980c03421 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -135,6 +135,7 @@ # Copyright 2024 Thomas Cooper # # Copyright 2024 Thomas Crowley <15927917+thomascrowley@users.noreply.github.com># # Copyright 2024 jodelasur <34933233+jodelasur@users.noreply.github.com> # +# Copyright 2025 Aidan McNay # # Copyright 2025 Bill Napier # # Copyright 2025 Christoph Reiter # # Copyright 2025 Cristiano Salerno <119511125+csalerno-asml@users.noreply.github.com># @@ -144,8 +145,11 @@ # Copyright 2025 Matt Ball <96152357+mball-agathos@users.noreply.github.com> # # Copyright 2025 Mikhail f. Shiryaev # # Copyright 2025 Oscar van Leusen # +# Copyright 2025 Ryosuke <88011751+nrysk@users.noreply.github.com> # # Copyright 2025 Tan An Nie <121005973+tanannie22@users.noreply.github.com> # # Copyright 2025 Zdenek Styblik <6183869+zstyblik@users.noreply.github.com> # +# Copyright 2026 Enrico Minack # +# Copyright 2026 Matt Davis <35502728+matt-davis27@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -233,6 +237,7 @@ import github.RepositoryKey import github.RepositoryPreferences import github.Secret +import github.SecretScanAlert import github.SecurityAndAnalysis import github.SelfHostedActionsRunner import github.SourceImport @@ -249,7 +254,6 @@ import github.Workflow import github.WorkflowRun from github import Consts -from github.Environment import Environment from github.GeneratedReleaseNotes import GeneratedReleaseNotes from github.GithubObject import ( Attribute, @@ -280,6 +284,7 @@ from github.DependabotAlert import DependabotAlert from github.Deployment import Deployment from github.Download import Download + from github.Environment import Environment from github.EnvironmentDeploymentBranchPolicy import ( EnvironmentDeploymentBranchPolicyParams, ) @@ -317,6 +322,7 @@ from github.RepositoryDiscussion import RepositoryDiscussion from github.RepositoryKey import RepositoryKey from github.RepositoryPreferences import RepositoryPreferences + from github.SecretScanAlert import SecretScanAlert from github.SecurityAndAnalysis import SecurityAndAnalysis from github.SelfHostedActionsRunner import SelfHostedActionsRunner from github.SourceImport import SourceImport @@ -461,10 +467,16 @@ def _initAttributes(self) -> None: self._web_commit_signoff_required: Attribute[bool] = NotSet def __repr__(self) -> str: - return self.get__repr__({"full_name": self._full_name.value}) + if is_defined(self._full_name) or is_undefined(self._id): + return self.get__repr__({"full_name": self._full_name.value}) + return self.get__repr__({"id": self._id.value}) @property def _identity(self) -> str: + if is_undefined(self._owner) or is_undefined(self._name): + if is_undefined(self._full_name): + return str(self._id.value) + return self.full_name return f"{self.owner.login}/{self.name}" @property @@ -1231,8 +1243,6 @@ def updated_at(self) -> datetime: @property def url(self) -> str: - if is_undefined(self._url) and is_defined(self._owner) and is_defined(self._name): - self._url = self._makeStringAttribute(self._requester.base_url + f"/repos/{self.owner.login}/{self.name}") self._completeIfNotSet(self._url) return self._url.value @@ -1277,7 +1287,7 @@ def as_url_param(repo: str | Repository) -> str: def add_to_collaborators(self, collaborator: str | NamedUser, permission: Opt[str] = NotSet) -> Invitation | None: """ - :calls: `PUT /repos/{owner}/{repo}/collaborators/{user} `_ + :calls: `PUT /repos/{owner}/{repo}/collaborators/{username} `_ :param collaborator: string or :class:`github.NamedUser.NamedUser` :param permission: string 'pull', 'push', 'admin', 'maintain', 'triage', or a custom repository role name, if the owning organization has defined any :rtype: None @@ -1359,23 +1369,22 @@ def remove_invitation(self, invite_id: int) -> None: headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/invitations/{invite_id}") - def compare(self, base: str, head: str) -> Comparison: + def compare(self, base: str, head: str, *, comparison_commits_per_page: int | None = None) -> Comparison: """ - :calls: `GET /repos/{owner}/{repo}/compare/{base...:head} `_ + :calls: `GET /repos/{owner}/{repo}/compare/{basehead} `_ :param base: string :param head: string + :param comparison_commits_per_page: int Number of commits retrieved with the comparison. Iterating over the commits property will fetch pages of this size. The default page size is 250, the maximum is 1000. At most 10000 commits can be retrieved. :rtype: :class:`github.Comparison.Comparison` """ assert isinstance(base, str), base assert isinstance(head, str), head + # comparison_commits_per_page asserted in Commit(CompletableGithubObjectWithPaginatedProperty) base = urllib.parse.quote(base) head = urllib.parse.quote(head) - # the compare API has a per_page default of 250, which is different to Consts.DEFAULT_PER_PAGE - per_page = self._requester.per_page if self._requester.per_page != Consts.DEFAULT_PER_PAGE else 250 - # only with page=1 we get the pagination headers for the commits element - params = {"page": 1, "per_page": per_page} - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/compare/{base}...{head}", params) - return github.Comparison.Comparison(self._requester, headers, data, completed=True) + return github.Comparison.Comparison( + self._requester, url=f"{self.url}/compare/{base}...{head}", per_page=comparison_commits_per_page + ) def create_autolink( self, key_prefix: str, url_template: str, is_alphanumeric: Opt[bool] = NotSet @@ -1999,30 +2008,27 @@ def create_secret( secret_type: str = "actions", ) -> github.Secret.Secret: """ - :calls: `PUT /repos/{owner}/{repo}/{secret_type}/secrets/{secret_name} `_ + :calls: `PUT /repos/{owner}/{repo}/actions/secrets/{secret_name} `_ + :calls: `PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name} `_ :param secret_type: string options actions or dependabot """ assert isinstance(secret_name, str), secret_name assert isinstance(unencrypted_value, str), unencrypted_value assert secret_type in ["actions", "dependabot"], "secret_type should be actions or dependabot" - secret_name = urllib.parse.quote(secret_name, safe="") + quoted_secret_name = urllib.parse.quote(secret_name, safe="") + url = f"{self.url}/{secret_type}/secrets/{quoted_secret_name}" public_key = self.get_public_key(secret_type=secret_type) payload = public_key.encrypt(unencrypted_value) put_parameters = { "key_id": public_key.key_id, "encrypted_value": payload, } - self._requester.requestJsonAndCheck( - "PUT", f"{self.url}/{secret_type}/secrets/{secret_name}", input=put_parameters - ) + self._requester.requestJsonAndCheck("PUT", url, input=put_parameters) return github.Secret.Secret( - requester=self._requester, - headers={}, - attributes={ - "name": secret_name, - "url": f"{self.url}/{secret_type}/secrets/{secret_name}", - }, + self._requester, + url=url, + attributes={"name": secret_name}, completed=False, ) @@ -2055,16 +2061,12 @@ def get_secret(self, secret_name: str, secret_type: str = "actions") -> github.S assert secret_type in ["actions", "dependabot"], "secret_type should be actions or dependabot" secret_name = urllib.parse.quote(secret_name, safe="") - return github.Secret.Secret( - requester=self._requester, - headers={}, - attributes={"url": f"{self.url}/{secret_type}/secrets/{secret_name}"}, - completed=False, - ) + url = f"{self.url}/{secret_type}/secrets/{secret_name}" + return github.Secret.Secret(self._requester, url=url) def create_variable(self, variable_name: str, value: str) -> github.Variable.Variable: """ - :calls: `POST /repos/{owner}/{repo}/actions/variables/{variable_name} `_ + :calls: `POST /repos/{owner}/{repo}/actions/variables/{name} `_ """ assert isinstance(variable_name, str), variable_name assert isinstance(value, str), value @@ -2073,13 +2075,15 @@ def create_variable(self, variable_name: str, value: str) -> github.Variable.Var "value": value, } self._requester.requestJsonAndCheck("POST", f"{self.url}/actions/variables", input=post_parameters) + + quoted_variable_name = urllib.parse.quote(variable_name, safe="") + url = f"{self.url}/actions/variables/{quoted_variable_name}" return github.Variable.Variable( self._requester, - headers={}, + url=url, attributes={ "name": variable_name, "value": value, - "url": f"{self.url}/actions/variables/{variable_name}", }, completed=False, ) @@ -2099,22 +2103,19 @@ def get_variables(self) -> PaginatedList[github.Variable.Variable]: def get_variable(self, variable_name: str) -> github.Variable.Variable: """ - :calls: `GET /orgs/{org}/actions/variables/{variable_name} `_ + :calls: `GET /repos/{owner}/{repo}/actions/variables/{name} `_ :param variable_name: string :rtype: github.Variable.Variable """ assert isinstance(variable_name, str), variable_name variable_name = urllib.parse.quote(variable_name, safe="") - return github.Variable.Variable( - requester=self._requester, - headers={}, - attributes={"url": f"{self.url}/actions/variables/{variable_name}"}, - completed=False, - ) + url = f"{self.url}/actions/variables/{variable_name}" + return github.Variable.Variable(self._requester, url=url) def delete_secret(self, secret_name: str, secret_type: str = "actions") -> bool: """ - :calls: `DELETE /repos/{owner}/{repo}/{secret_type}/secrets/{secret_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name} `_ :param secret_name: string :param secret_type: string options actions or dependabot :rtype: bool @@ -2127,7 +2128,7 @@ def delete_secret(self, secret_name: str, secret_type: str = "actions") -> bool: def delete_variable(self, variable_name: str) -> bool: """ - :calls: `DELETE /repos/{owner}/{repo}/actions/variables/{variable_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/actions/variables/{name} `_ :param variable_name: string :rtype: bool """ @@ -2205,6 +2206,7 @@ def edit( archived: Opt[bool] = NotSet, allow_forking: Opt[bool] = NotSet, web_commit_signoff_required: Opt[bool] = NotSet, + security_and_analysis: Opt[dict[str, Any]] = NotSet, ) -> None: """ :calls: `PATCH /repos/{owner}/{repo} `_ @@ -2241,6 +2243,7 @@ def edit( assert is_optional(archived, bool), archived assert is_optional(allow_forking, bool), allow_forking assert is_optional(web_commit_signoff_required, bool), web_commit_signoff_required + assert is_optional(security_and_analysis, dict), security_and_analysis post_parameters: dict[str, Any] = NotSet.remove_unset_items( { @@ -2269,11 +2272,13 @@ def edit( "archived": archived, "allow_forking": allow_forking, "web_commit_signoff_required": web_commit_signoff_required, + "security_and_analysis": security_and_analysis, } ) headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def get_archive_link(self, archive_format: str, ref: Opt[str] = NotSet) -> str: """ @@ -2370,13 +2375,13 @@ def get_collaborators( def get_comment(self, id: int) -> CommitComment: """ - :calls: `GET /repos/{owner}/{repo}/comments/{id} `_ + :calls: `GET /repos/{owner}/{repo}/comments/{comment_id} `_ :param id: integer :rtype: :class:`github.CommitComment.CommitComment` """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/comments/{id}") - return github.CommitComment.CommitComment(self._requester, headers, data, completed=True) + url = f"{self.url}/comments/{id}" + return github.CommitComment.CommitComment(self._requester, url=url) def get_comments(self) -> PaginatedList[CommitComment]: """ @@ -2390,16 +2395,18 @@ def get_comments(self) -> PaginatedList[CommitComment]: None, ) - def get_commit(self, sha: str) -> Commit: + def get_commit(self, sha: str, *, commit_files_per_page: int | None = None) -> Commit: """ - :calls: `GET /repos/{owner}/{repo}/commits/{sha} `_ + :calls: `GET /repos/{owner}/{repo}/commits/{ref} `_ :param sha: string + :param commit_files_per_page: int Number of files retrieved with the commit. Iterating over the files property will fetch pages of this size. Default is 300. Maximum is 300. At most 3000 files can be retrieved. :rtype: :class:`github.Commit.Commit` """ assert isinstance(sha, str), sha - sha = urllib.parse.quote(sha) - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/commits/{sha}") - return github.Commit.Commit(self._requester, headers, data, completed=True) + # commit_files_per_page asserted in Commit(CompletableGithubObjectWithPaginatedProperty) + sha = urllib.parse.quote(sha, safe="") + url = f"{self.url}/commits/{sha}" + return github.Commit.Commit(self._requester, url=url, per_page=commit_files_per_page) def get_commits( self, @@ -2515,16 +2522,12 @@ def get_deployments( def get_deployment(self, id_: int) -> Deployment: """ :calls: `GET /repos/{owner}/{repo}/deployments/{deployment_id} `_ - :param: id_: int + :param: id: int :rtype: :class:`github.Deployment.Deployment` """ assert isinstance(id_, int), id_ - headers, data = self._requester.requestJsonAndCheck( - "GET", - f"{self.url}/deployments/{id_}", - headers={"Accept": Consts.deploymentEnhancementsPreview}, - ) - return github.Deployment.Deployment(self._requester, headers, data, completed=True) + url = f"{self.url}/deployments/{id_}" + return github.Deployment.Deployment(self._requester, url=url, accept=Consts.deploymentEnhancementsPreview) def create_deployment( self, @@ -2805,7 +2808,7 @@ def get_repository_advisories( def get_repository_advisory(self, ghsa: str) -> github.RepositoryAdvisory.RepositoryAdvisory: """ - :calls: `GET /repos/{owner}/{repo}/security-advisories/{ghsa} `_ + :calls: `GET /repos/{owner}/{repo}/security-advisories/{ghsa_id} `_ :param ghsa: string :rtype: :class:`github.RepositoryAdvisory.RepositoryAdvisory` """ @@ -2961,8 +2964,8 @@ def get_download(self, id: int) -> Download: :rtype: :class:`github.Download.Download` """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/downloads/{id}") - return github.Download.Download(self._requester, headers, data, completed=True) + url = f"{self.url}/downloads/{id}" + return github.Download.Download(self._requester, url=url) def get_downloads(self) -> PaginatedList[Download]: """ @@ -3020,23 +3023,23 @@ def create_fork( def get_git_blob(self, sha: str) -> GitBlob: """ - :calls: `GET /repos/{owner}/{repo}/git/blobs/{sha} `_ + :calls: `GET /repos/{owner}/{repo}/git/blobs/{file_sha} `_ :param sha: string :rtype: :class:`github.GitBlob.GitBlob` """ assert isinstance(sha, str), sha - sha = urllib.parse.quote(sha) + sha = urllib.parse.quote(sha, safe="") headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/git/blobs/{sha}") return github.GitBlob.GitBlob(self._requester, headers, data, completed=True) def get_git_commit(self, sha: str) -> GitCommit: """ - :calls: `GET /repos/{owner}/{repo}/git/commits/{sha} `_ + :calls: `GET /repos/{owner}/{repo}/git/commits/{commit_sha} `_ :param sha: string :rtype: :class:`github.GitCommit.GitCommit` """ assert isinstance(sha, str), sha - sha = urllib.parse.quote(sha) + sha = urllib.parse.quote(sha, safe="") headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/git/commits/{sha}") return github.GitCommit.GitCommit(self._requester, headers, data, completed=True) @@ -3050,9 +3053,9 @@ def get_git_ref(self, ref: str) -> GitRef: if not self._requester.FIX_REPO_GET_GIT_REF: prefix = "/git/" assert isinstance(ref, str), ref - ref = urllib.parse.quote(ref) - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}{prefix}{ref}") - return github.GitRef.GitRef(self._requester, headers, data, completed=True) + quoted_ref = urllib.parse.quote(ref) + url = f"{self.url}{prefix}{quoted_ref}" + return github.GitRef.GitRef(self._requester, url=url, attributes={"ref": ref}) def get_git_refs(self) -> PaginatedList[GitRef]: """ @@ -3077,7 +3080,7 @@ def get_git_matching_refs(self, ref: str) -> PaginatedList[GitRef]: def get_git_tag(self, sha: str) -> GitTag: """ - :calls: `GET /repos/{owner}/{repo}/git/tags/{sha} `_ + :calls: `GET /repos/{owner}/{repo}/git/tags/{tag_sha} `_ :param sha: string :rtype: :class:`github.GitTag.GitTag` """ @@ -3088,14 +3091,14 @@ def get_git_tag(self, sha: str) -> GitTag: def get_git_tree(self, sha: str, recursive: Opt[bool] = NotSet) -> GitTree: """ - :calls: `GET /repos/{owner}/{repo}/git/trees/{sha} `_ + :calls: `GET /repos/{owner}/{repo}/git/trees/{tree_sha} `_ :param sha: string :param recursive: bool :rtype: :class:`github.GitTree.GitTree` """ assert isinstance(sha, str), sha assert is_optional(recursive, bool), recursive - sha = urllib.parse.quote(sha) + sha = urllib.parse.quote(sha, safe="") url_parameters = dict() if is_defined(recursive) and recursive: # GitHub API requires the recursive parameter be set to 1. @@ -3107,13 +3110,13 @@ def get_git_tree(self, sha: str, recursive: Opt[bool] = NotSet) -> GitTree: def get_hook(self, id: int) -> Hook: """ - :calls: `GET /repos/{owner}/{repo}/hooks/{id} `_ + :calls: `GET /repos/{owner}/{repo}/hooks/{hook_id} `_ :param id: integer :rtype: :class:`github.Hook.Hook` """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/hooks/{id}") - return github.Hook.Hook(self._requester, headers, data, completed=True) + url = f"{self.url}/hooks/{id}" + return github.Hook.Hook(self._requester, url=url) def get_hooks(self) -> PaginatedList[Hook]: """ @@ -3153,13 +3156,13 @@ def get_hook_deliveries(self, hook_id: int) -> PaginatedList[github.HookDelivery def get_issue(self, number: int) -> Issue: """ - :calls: `GET /repos/{owner}/{repo}/issues/{number} `_ + :calls: `GET /repos/{owner}/{repo}/issues/{issue_number} `_ :param number: integer :rtype: :class:`github.Issue.Issue` """ assert isinstance(number, int), number - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/issues/{number}") - return github.Issue.Issue(self._requester, headers, data, completed=True) + url = f"{self.url}/issues/{number}" + return github.Issue.Issue(self._requester, url=url) def get_issues( self, @@ -3172,6 +3175,7 @@ def get_issues( direction: Opt[str] = NotSet, since: Opt[datetime] = NotSet, creator: Opt[NamedUser] = NotSet, + type: Opt[str] = NotSet, ) -> PaginatedList[Issue]: """ :calls: `GET /repos/{owner}/{repo}/issues `_ @@ -3184,11 +3188,13 @@ def get_issues( :param direction: string :param since: datetime :param creator: string or :class:`github.NamedUser.NamedUser` + :param type: string :rtype: :class:`PaginatedList` of :class:`github.Issue.Issue` """ assert milestone in ["*", "none", NotSet] or isinstance(milestone, github.Milestone.Milestone), milestone assert is_optional(state, str), state assert is_optional(assignee, (str, github.NamedUser.NamedUser)), assignee + assert is_optional(type, str), type assert is_optional(mentioned, github.NamedUser.NamedUser), mentioned assert is_optional_list(labels, (github.Label.Label, str)), labels assert is_optional(sort, str), sort @@ -3208,6 +3214,8 @@ def get_issues( url_parameters["assignee"] = assignee._identity else: url_parameters["assignee"] = assignee + if is_defined(type): + url_parameters["type"] = type if is_defined(mentioned): url_parameters["mentioned"] = mentioned._identity if is_defined(labels): @@ -3259,7 +3267,7 @@ def get_issues_comments( def get_issues_event(self, id: int) -> IssueEvent: """ - :calls: `GET /repos/{owner}/{repo}/issues/events/{id} `_ + :calls: `GET /repos/{owner}/{repo}/issues/events/{event_id} `_ :param id: integer :rtype: :class:`github.IssueEvent.IssueEvent` """ @@ -3286,13 +3294,13 @@ def get_issues_events(self) -> PaginatedList[IssueEvent]: def get_key(self, id: int) -> RepositoryKey: """ - :calls: `GET /repos/{owner}/{repo}/keys/{id} `_ + :calls: `GET /repos/{owner}/{repo}/keys/{key_id} `_ :param id: integer :rtype: :class:`github.RepositoryKey.RepositoryKey` """ assert isinstance(id, int), id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/keys/{id}") - return github.RepositoryKey.RepositoryKey(self._requester, headers, data, completed=True) + url = f"{self.url}/keys/{id}" + return github.RepositoryKey.RepositoryKey(self._requester, url=url) def get_keys(self) -> PaginatedList[RepositoryKey]: """ @@ -3313,10 +3321,9 @@ def get_label(self, name: str) -> Label: :rtype: :class:`github.Label.Label` """ assert isinstance(name, str), name - headers, data = self._requester.requestJsonAndCheck( - "GET", f"{self.url}/labels/{urllib.parse.quote(name, safe='')}" - ) - return github.Label.Label(self._requester, headers, data, completed=True) + label_name = urllib.parse.quote(name, safe="") + url = f"{self.url}/labels/{label_name}" + return github.Label.Label(self._requester, url=url) def get_labels(self) -> PaginatedList[Label]: """ @@ -3344,13 +3351,13 @@ def get_license(self) -> ContentFile: def get_milestone(self, number: int) -> Milestone: """ - :calls: `GET /repos/{owner}/{repo}/milestones/{number} `_ + :calls: `GET /repos/{owner}/{repo}/milestones/{milestone_number} `_ :param number: integer :rtype: :class:`github.Milestone.Milestone` """ assert isinstance(number, int), number - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/milestones/{number}") - return github.Milestone.Milestone(self._requester, headers, data, completed=True) + url = f"{self.url}/milestones/{number}" + return github.Milestone.Milestone(self._requester, url=url) def get_milestones( self, @@ -3396,7 +3403,8 @@ def get_network_events(self) -> PaginatedList[Event]: def get_public_key(self, secret_type: str = "actions") -> PublicKey: """ - :calls: `GET /repos/{owner}/{repo}/actions/secrets/public-key `_ + :calls: `GET /repos/{owner}/{repo}/actions/secrets/public-key `_ + :calls: `GET /repos/{owner}/{repo}/dependabot/secrets/public-key `_ :param secret_type: string options actions or dependabot :rtype: :class:`github.PublicKey.PublicKey` """ @@ -3407,13 +3415,13 @@ def get_public_key(self, secret_type: str = "actions") -> PublicKey: def get_pull(self, number: int) -> PullRequest: """ - :calls: `GET /repos/{owner}/{repo}/pulls/{number} `_ + :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number} `_ :param number: integer :rtype: :class:`github.PullRequest.PullRequest` """ assert isinstance(number, int), number - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/pulls/{number}") - return github.PullRequest.PullRequest(self._requester, headers, data, completed=True) + url = f"{self.url}/pulls/{number}" + return github.PullRequest.PullRequest(self._requester, url=url) def get_pulls( self, @@ -3462,7 +3470,7 @@ def get_pulls_comments( since: Opt[datetime] = NotSet, ) -> PaginatedList[PullRequestComment]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/comments `_ + :calls: `GET /repos/{owner}/{repo}/pulls/comments `__ :param sort: string :param direction: string :param since: datetime @@ -3477,7 +3485,7 @@ def get_pulls_review_comments( since: Opt[datetime] = NotSet, ) -> PaginatedList[PullRequestComment]: """ - :calls: `GET /repos/{owner}/{repo}/pulls/comments `_ + :calls: `GET /repos/{owner}/{repo}/pulls/comments `_: :param sort: string 'created', 'updated', 'created_at' :param direction: string 'asc' or 'desc' :param since: datetime @@ -3515,7 +3523,7 @@ def get_readme(self, ref: Opt[str] = NotSet) -> ContentFile: def get_self_hosted_runner(self, runner_id: int) -> SelfHostedActionsRunner: """ - :calls: `GET /repos/{owner}/{repo}/actions/runners/{id} `_ + :calls: `GET /repos/{owner}/{repo}/actions/runners/{runner_id} `_ :param runner_id: int :rtype: :class:`github.SelfHostedActionsRunner.SelfHostedActionsRunner` """ @@ -3657,26 +3665,25 @@ def get_releases(self) -> PaginatedList[GitRelease]: def get_release(self, id: int | str) -> GitRelease: """ - :calls: `GET /repos/{owner}/{repo}/releases/{id} `_ + :calls: `GET /repos/{owner}/{repo}/releases/{release_id} `_ :param id: int (release id), str (tag name) :rtype: None or :class:`github.GitRelease.GitRelease` """ assert isinstance(id, (int, str)), id if isinstance(id, int): - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/releases/{id}") - return github.GitRelease.GitRelease(self._requester, headers, data, completed=True) - elif isinstance(id, str): - id = urllib.parse.quote(id, safe="") - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/releases/tags/{id}") - return github.GitRelease.GitRelease(self._requester, headers, data, completed=True) + url = f"{self.url}/releases/{id}" + else: + tag = urllib.parse.quote(id, safe="") + url = f"{self.url}/releases/tags/{tag}" + return github.GitRelease.GitRelease(self._requester, url=url) def get_latest_release(self) -> GitRelease: """ :calls: `GET /repos/{owner}/{repo}/releases/latest `_ :rtype: :class:`github.GitRelease.GitRelease` """ - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/releases/latest") - return github.GitRelease.GitRelease(self._requester, headers, data, completed=True) + url = f"{self.url}/releases/latest" + return github.GitRelease.GitRelease(self._requester, url=url) def get_teams(self) -> PaginatedList[Team]: """ @@ -3725,8 +3732,8 @@ def get_workflow(self, id_or_file_name: str | int) -> Workflow: """ assert isinstance(id_or_file_name, (int, str)), id_or_file_name id_or_file_name = urllib.parse.quote(str(id_or_file_name), safe="") - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/actions/workflows/{id_or_file_name}") - return github.Workflow.Workflow(self._requester, headers, data, completed=True) + url = f"{self.url}/actions/workflows/{id_or_file_name}" + return github.Workflow.Workflow(self._requester, url=url) def get_workflow_runs( self, @@ -3800,8 +3807,8 @@ def get_workflow_run(self, id_: int) -> WorkflowRun: :rtype: :class:`github.WorkflowRun.WorkflowRun` """ assert isinstance(id_, int) - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/actions/runs/{id_}") - return github.WorkflowRun.WorkflowRun(self._requester, headers, data, completed=True) + url = f"{self.url}/actions/runs/{id_}" + return github.WorkflowRun.WorkflowRun(self._requester, url=url) def has_in_assignees(self, assignee: str | NamedUser) -> bool: """ @@ -3821,7 +3828,7 @@ def has_in_assignees(self, assignee: str | NamedUser) -> bool: def has_in_collaborators(self, collaborator: str | NamedUser) -> bool: """ - :calls: `GET /repos/{owner}/{repo}/collaborators/{user} `_ + :calls: `GET /repos/{owner}/{repo}/collaborators/{username} `_ :param collaborator: string or :class:`github.NamedUser.NamedUser` :rtype: bool """ @@ -4041,7 +4048,7 @@ def disable_automated_security_fixes(self) -> bool: def remove_from_collaborators(self, collaborator: str | NamedUser) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/collaborators/{user} `_ + :calls: `DELETE /repos/{owner}/{repo}/collaborators/{username} `_ :param collaborator: string or :class:`github.NamedUser.NamedUser` :rtype: None """ @@ -4072,7 +4079,7 @@ def remove_self_hosted_runner(self, runner: SelfHostedActionsRunner | int) -> bo def remove_autolink(self, autolink: Autolink | int) -> bool: """ - :calls: `DELETE /repos/{owner}/{repo}/autolinks/{id} `_ + :calls: `DELETE /repos/{owner}/{repo}/autolinks/{autolink_id} `_ :param autolink: int or :class:`github.Autolink.Autolink` :rtype: None """ @@ -4125,13 +4132,8 @@ def get_check_suite(self, check_suite_id: int) -> CheckSuite: :rtype: :class:`github.CheckSuite.CheckSuite` """ assert isinstance(check_suite_id, int), check_suite_id - requestHeaders = {"Accept": "application/vnd.github.v3+json"} - headers, data = self._requester.requestJsonAndCheck( - "GET", - f"{self.url}/check-suites/{check_suite_id}", - headers=requestHeaders, - ) - return github.CheckSuite.CheckSuite(self._requester, headers, data) + url = f"{self.url}/check-suites/{check_suite_id}" + return github.CheckSuite.CheckSuite(self._requester, url=url, accept="application/vnd.github.v3+json") def update_check_suites_preferences( self, auto_trigger_checks: list[dict[str, bool | int]] @@ -4166,9 +4168,9 @@ def _hub(self, mode: str, event: str, callback: str, secret: Opt[str]) -> None: headers, output = self._requester.requestMultipartAndCheck("POST", "/hub", input=post_parameters) def get_release_asset(self, id: int) -> GitReleaseAsset: - assert isinstance(id, (int)), id - resp_headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/releases/assets/{id}") - return github.GitReleaseAsset.GitReleaseAsset(self._requester, resp_headers, data, completed=True) + assert isinstance(id, int), id + url = f"{self.url}/releases/assets/{id}" + return github.GitReleaseAsset.GitReleaseAsset(self._requester, url=url) def create_check_run( self, @@ -4240,8 +4242,8 @@ def get_check_run(self, check_run_id: int) -> CheckRun: :rtype: :class:`github.CheckRun.CheckRun` """ assert isinstance(check_run_id, int), check_run_id - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/check-runs/{check_run_id}") - return github.CheckRun.CheckRun(self._requester, headers, data, completed=True) + url = f"{self.url}/check-runs/{check_run_id}" + return github.CheckRun.CheckRun(self._requester, url=url) def get_artifacts(self, name: Opt[str] = NotSet) -> PaginatedList[Artifact]: """ @@ -4272,25 +4274,170 @@ def get_artifact(self, artifact_id: int) -> Artifact: headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/actions/artifacts/{artifact_id}") return github.Artifact.Artifact(self._requester, headers, data) - def get_codescan_alerts(self) -> PaginatedList[CodeScanAlert]: + def get_codescan_alerts( + self, + tool_name: Opt[str] = NotSet, + tool_guid: Opt[str] = NotSet, + ref: Opt[str] = NotSet, + pr: Opt[int] = NotSet, + sort: Opt[str] = NotSet, + direction: Opt[str] = NotSet, + state: Opt[str] = NotSet, + severity: Opt[str] = NotSet, + ) -> PaginatedList[CodeScanAlert]: """ - :calls: `GET https://api.github.com/repos/{owner}/{repo}/code-scanning/alerts `_ + :calls: `GET /repos/{owner}/{repo}/code-scanning/alerts `_ + :param tool_name: Optional string + :param tool_guid: Optional string + :param ref: Optional string + :param pr: Optional integer + :param sort: Optional string + :param direction: Optional string + :param state: Optional string + :param severity: Optional string :rtype: :class:`PaginatedList` of :class:`github.CodeScanAlert.CodeScanAlert` """ + allowed_sorts = ["created", "updated"] + allowed_directions = ["asc", "desc"] + allowed_states = ["open", "closed", "dismissed", "fixed"] + allowed_severities = ["critical", "high", "medium", "low", "warning", "note", "error"] + assert is_optional(tool_name, str), tool_name + assert is_optional(tool_guid, str), tool_guid + assert ( + tool_name is NotSet or tool_guid is NotSet + ), "You can specify the tool by using either tool_guid or tool_name, but not both." + assert is_optional(ref, str), ref + assert is_optional(pr, int), pr + assert sort in allowed_sorts + [NotSet], f"Sort can be one of {', '.join(allowed_sorts)}" + assert direction in allowed_directions + [NotSet], f"Direction can be one of {', '.join(allowed_directions)}" + assert state in allowed_states + [NotSet], f"State can be one of {', '.join(allowed_states)}" + assert severity in allowed_severities + [NotSet], f"Severity can be one of {', '.join(allowed_severities)}" + url_parameters = NotSet.remove_unset_items( + { + "tool_name": tool_name, + "tool_guid": tool_guid, + "ref": ref, + "pr": pr, + "sort": sort, + "direction": direction, + "state": state, + "severity": severity, + } + ) return PaginatedList( github.CodeScanAlert.CodeScanAlert, self._requester, f"{self.url}/code-scanning/alerts", - None, + url_parameters, + ) + + def get_codescan_alert(self, number: int) -> CodeScanAlert: + """ + :calls: `GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number} `_ + :param number: int + :rtype: :class:`github.CodeScanAlert.CodeScanAlert` + """ + assert isinstance(number, int), number + headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/code-scanning/alerts/{number}") + return github.CodeScanAlert.CodeScanAlert(self._requester, headers, data) + + def get_secret_scanning_alerts( + self, + state: Opt[str] = NotSet, + secret_type: Opt[str] = NotSet, + resolution: Opt[str] = NotSet, + sort: Opt[str] = NotSet, + direction: Opt[str] = NotSet, + validity: Opt[str] = NotSet, + is_publicly_leaked: Opt[bool] = NotSet, + is_multi_repo: Opt[bool] = NotSet, + hide_secret: Opt[bool] = NotSet, + ) -> PaginatedList[SecretScanAlert]: + """ + :calls: `GET /repos/{owner}/{repo}/secret-scanning/alerts `_ + :param state: Optional string + :param secret_type: Optional string + :param resolution: Optional string + :param sort: Optional string + :param direction: Optional string + :param validity: Optional string + :param is_publicly_leaked: Optional bool + :param is_multi_repo: Optional bool + :param hide_secret: Optional bool + :rtype: :class:`PaginatedList` of :class:`github.SecretScanAlert.SecretScanAlert` + """ + allowed_states = ["open", "resolved"] + # allowed_secret_types = ["http_basic_authentication_header", "http_bearer_authentication_header", ...] + allowed_resolutions = [ + "false_positive", + "wont_fix", + "revoked", + "pattern_edited", + "pattern_deleted", + "used_in_tests", + ] + allowed_sorts = ["created", "updated"] + allowed_directions = ["asc", "desc"] + allowed_validities = ["active", "inactive", "unknown"] + assert state in allowed_states + [NotSet], f"State can be one of {', '.join(allowed_states)}" + # assert secret_type in allowed_secret_types + [NotSet], \ + # "Secret_type can be one of the tokens listed on \ + # https://docs.github.com/en/code-security/secret-scanning/introduction/supported-secret-scanning-patterns#supported-secrets" + assert resolution in allowed_resolutions + [ + NotSet + ], f"Resolution can be one of {', '.join(allowed_resolutions)}" + assert sort in allowed_sorts + [NotSet], f"Sort can be one of {', '.join(allowed_sorts)}" + assert direction in allowed_directions + [NotSet], f"Direction can be one of {', '.join(allowed_directions)}" + assert validity in allowed_validities + [NotSet], f"Validity can be one of {', '.join(allowed_validities)}" + assert is_optional(is_publicly_leaked, bool), is_publicly_leaked + assert is_optional(is_multi_repo, bool), is_multi_repo + assert is_optional(hide_secret, bool), hide_secret + url_parameters = NotSet.remove_unset_items( + { + "state": state, + "secret_type": secret_type, + "resolution": resolution, + "sort": sort, + "direction": direction, + "validity": validity, + "is_publicly_leaked": is_publicly_leaked, + "is_multi_repo": is_multi_repo, + "hide_secret": hide_secret, + } + ) + return PaginatedList( + github.SecretScanAlert.SecretScanAlert, + self._requester, + f"{self.url}/secret-scanning/alerts", + url_parameters, + ) + + def get_secret_scanning_alert(self, number: int, hide_secret: Opt[bool] = NotSet) -> SecretScanAlert: + """ + :calls: `GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number} `_ + :param number: int + :param hide_secret: Optional bool + :rtype: :class:`github.SecretScanAlert.SecretScanAlert` + """ + assert isinstance(number, int), number + assert is_optional(hide_secret, bool), hide_secret + query_parameters = NotSet.remove_unset_items( + { + "hide_secret": hide_secret, + } + ) + headers, data = self._requester.requestJsonAndCheck( + "GET", f"{self.url}/secret-scanning/alerts/{number}", parameters=query_parameters ) + return github.SecretScanAlert.SecretScanAlert(self._requester, headers, data) def get_environments(self) -> PaginatedList[Environment]: """ - :calls: `GET /repositories/{self._repository.id}/environments/{self.environment_name}/environments `_ + :calls: `GET /repos/{owner}/{repo}/environments `_ :rtype: :class:`PaginatedList` of :class:`github.Environment.Environment` """ return PaginatedList( - Environment, + github.Environment.Environment, self._requester, f"{self.url}/environments", None, @@ -4302,14 +4449,13 @@ def get_environments(self) -> PaginatedList[Environment]: def get_environment(self, environment_name: str) -> Environment: """ - :calls: `GET /repositories/{self._repository.id}/environments/{self.environment_name}/environments/{environment_name} `_ + :calls: `GET /repos/{owner}/{repo}/environments/{environment_name} `_ :rtype: :class:`github.Environment.Environment` """ assert isinstance(environment_name, str), environment_name environment_name = urllib.parse.quote(environment_name, safe="") - headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/environments/{environment_name}") - data["environments_url"] = f"/repositories/{self.id}/environments" - return Environment(self._requester, headers, data, completed=True) + url = f"{self.url}/environments/{environment_name}" + return github.Environment.Environment(self._requester, url=url) def create_environment( self, @@ -4320,7 +4466,7 @@ def create_environment( deployment_branch_policy: EnvironmentDeploymentBranchPolicyParams | None = None, ) -> Environment: """ - :calls: `PUT /repositories/{self._repository.id}/environments/{self.environment_name}/environments/{environment_name} `_ + :calls: `PUT /repos/{owner}/{repo}/environments/{environment_name} `_ :param environment_name: string :param wait_timer: int :param reviewers: List[:class:github.EnvironmentDeploymentBranchPolicy.EnvironmentDeploymentBranchPolicyParams] @@ -4354,12 +4500,13 @@ def create_environment( headers, data = self._requester.requestJsonAndCheck( "PUT", f"{self.url}/environments/{environment_name}", input=put_parameters ) - data["environments_url"] = f"/repositories/{self.id}/environments" - return Environment(self._requester, headers, data, completed=True) + if "url" not in data: + data["url"] = f"{self.url}/environments/{environment_name}" + return github.Environment.Environment(self._requester, headers, data, completed=True) def delete_environment(self, environment_name: str) -> None: """ - :calls: `DELETE /repositories/{self._repository.id}/environments/{self.environment_name}/environments/{environment_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/environments/{environment_name} `_ :param environment_name: string :rtype: None """ @@ -4600,6 +4747,19 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._forks_url = self._makeStringAttribute(attributes["forks_url"]) if "full_name" in attributes: # pragma no branch self._full_name = self._makeStringAttribute(attributes["full_name"]) + elif "url" in attributes and attributes["url"]: + url = attributes["url"] + if url.startswith(self.requester.base_url): + base_url = self.requester.base_url + if base_url.endswith("/"): + base_url = base_url[:-1] + url = url.removeprefix(base_url) + if url.startswith("/repos/") and url.count("/") == 3: + self._full_name = self._makeStringAttribute(url.split("/", maxsplit=2)[-1]) + elif "owner" in attributes and "login" in attributes["owner"] and "name" in attributes: + login = attributes["owner"]["login"] + name = attributes["name"] + self._full_name = self._makeStringAttribute(f"{login}/{name}") if "git_commits_url" in attributes: # pragma no branch self._git_commits_url = self._makeStringAttribute(attributes["git_commits_url"]) if "git_refs_url" in attributes: # pragma no branch @@ -4628,6 +4788,17 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes: + url = attributes["url"] + if url.startswith(self.requester.base_url): + base_url = self.requester.base_url + if base_url.endswith("/"): + base_url = base_url[:-1] + url = url.removeprefix(base_url) + if url.startswith("/repositories/") and url.count("/") == 2: + id = url.split("/", maxsplit=2)[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "is_template" in attributes: # pragma no branch self._is_template = self._makeBoolAttribute(attributes["is_template"]) if "issue_comment_url" in attributes: # pragma no branch @@ -4660,6 +4831,18 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._mirror_url = self._makeStringAttribute(attributes["mirror_url"]) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes: + url = attributes["url"] + if url.startswith(self.requester.base_url): + base_url = self.requester.base_url + if base_url.endswith("/"): + base_url = base_url[:-1] + url = url.removeprefix(base_url) + if url.startswith("/repos/") and url.count("/") == 3: + self._name = self._makeStringAttribute(attributes["url"].split("/")[-1]) + elif "full_name" in attributes and "/" in attributes["full_name"]: + name = attributes["full_name"].split("/", 2)[1] + self._name = self._makeStringAttribute(name) if "network_count" in attributes: # pragma no branch self._network_count = self._makeIntAttribute(attributes["network_count"]) if "node_id" in attributes: # pragma no branch @@ -4736,6 +4919,14 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: # pragma no branch self._url = self._makeStringAttribute(attributes["url"]) + elif "owner" in attributes and "login" in attributes["owner"] and "name" in attributes: + login = attributes["owner"]["login"] + name = attributes["name"] + self._url = self._makeStringAttribute(f"/repos/{login}/{name}") + elif "full_name" in attributes: + self._url = self._makeStringAttribute(f"/repos/{attributes['full_name']}") + elif "id" in attributes: + self._url = self._makeStringAttribute(f"/repositories/{attributes['id']}") if "use_squash_pr_title_as_default" in attributes: # pragma no branch self._use_squash_pr_title_as_default = self._makeBoolAttribute(attributes["use_squash_pr_title_as_default"]) if "visibility" in attributes: # pragma no branch diff --git a/github/RepositoryAdvisory.py b/github/RepositoryAdvisory.py index 94afa68a06..15cb2a4d9b 100644 --- a/github/RepositoryAdvisory.py +++ b/github/RepositoryAdvisory.py @@ -9,6 +9,7 @@ # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Thomas Cooper # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -30,8 +31,9 @@ from __future__ import annotations +from collections.abc import Iterable from datetime import datetime -from typing import TYPE_CHECKING, Any, Iterable +from typing import TYPE_CHECKING, Any import github.AdvisoryCredit import github.AdvisoryCreditDetailed @@ -146,7 +148,7 @@ def add_vulnerability( vulnerable_functions: list[str] | None = None, ) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id `\ + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} `\ """ return self.add_vulnerabilities( [ @@ -164,7 +166,7 @@ def add_vulnerability( def add_vulnerabilities(self, vulnerabilities: Iterable[AdvisoryVulnerabilityInput]) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id ` + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} ` """ assert isinstance(vulnerabilities, Iterable), vulnerabilities for vulnerability in vulnerabilities: @@ -192,7 +194,7 @@ def offer_credit( Offers credit to a user for a vulnerability in a repository. Unless you are giving credit to yourself, the user having credit offered will need to explicitly accept the credit. - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id ` + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} ` """ self.offer_credits([{"login": login_or_user, "type": credit_type}]) @@ -205,7 +207,7 @@ def offer_credits( Offers credit to a list of users for a vulnerability in a repository. Unless you are giving credit to yourself, the user having credit offered will need to explicitly accept the credit. - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id ` + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} ` :param credited: iterable of dict with keys "login" and "type" """ @@ -228,7 +230,7 @@ def offer_credits( def revoke_credit(self, login_or_user: str | github.NamedUser.NamedUser) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id `_ + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} `_ """ assert isinstance(login_or_user, (str, github.NamedUser.NamedUser)), login_or_user if isinstance(login_or_user, github.NamedUser.NamedUser): @@ -247,7 +249,7 @@ def revoke_credit(self, login_or_user: str | github.NamedUser.NamedUser) -> None def clear_credits(self) -> None: """ - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id `_ + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} `_ """ patch_parameters: dict[str, Any] = {"credits": []} headers, data = self._requester.requestJsonAndCheck( @@ -269,7 +271,7 @@ def edit( state: Opt[str] = NotSet, ) -> RepositoryAdvisory: """ - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id `_ + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} `_ """ assert summary is NotSet or isinstance(summary, str), summary assert description is NotSet or isinstance(description, str), description @@ -325,7 +327,7 @@ def accept_report(self) -> None: """ Accepts the advisory reported from an external reporter via private vulnerability reporting. - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id ` + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} ` """ patch_parameters = {"state": "draft"} @@ -340,7 +342,7 @@ def publish(self) -> None: """ Publishes the advisory. - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id ` + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} ` """ patch_parameters = {"state": "published"} @@ -367,7 +369,7 @@ def close(self) -> None: """ Closes the advisory. - :calls: `PATCH /repos/{owner}/{repo}/security-advisories/:advisory_id ` + :calls: `PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id} ` """ patch_parameters = {"state": "closed"} diff --git a/github/RepositoryKey.py b/github/RepositoryKey.py index 42b2be6577..a96880dbcc 100644 --- a/github/RepositoryKey.py +++ b/github/RepositoryKey.py @@ -133,7 +133,7 @@ def verified(self) -> bool: def delete(self) -> None: """ - :calls: `DELETE /repos/{owner}/{repo}/keys/{id} `_ + :calls: `DELETE /repos/{owner}/{repo}/keys/{key_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) @@ -146,6 +146,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._enabled = self._makeBoolAttribute(attributes["enabled"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "key" in attributes: # pragma no branch self._key = self._makeStringAttribute(attributes["key"]) if "last_used" in attributes: # pragma no branch diff --git a/github/Requester.py b/github/Requester.py index ee6a70ea03..0c7b71bc97 100644 --- a/github/Requester.py +++ b/github/Requester.py @@ -60,9 +60,11 @@ # Copyright 2025 Alec Ostrander # # Copyright 2025 Chris Kuehl # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # Copyright 2025 Jakub Smolar # # Copyright 2025 Neel Malik <41765022+neel-m@users.noreply.github.com> # # Copyright 2025 Timothy Klopotoski # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -95,19 +97,10 @@ import urllib import urllib.parse from collections import deque +from collections.abc import Callable, ItemsView, Iterator from datetime import datetime, timezone from io import IOBase -from typing import ( - TYPE_CHECKING, - Any, - BinaryIO, - Callable, - Deque, - Generic, - ItemsView, - Iterator, - TypeVar, -) +from typing import TYPE_CHECKING, Any, BinaryIO, Deque, Generic, TypeVar import requests import requests.adapters @@ -116,7 +109,7 @@ import github.Consts as Consts import github.GithubException import github.GithubException as GithubException -from github.GithubObject import as_rest_api_attributes +from github.GithubObject import Opt, as_rest_api_attributes, is_undefined if TYPE_CHECKING: from .AppAuthentication import AppAuthentication @@ -418,6 +411,10 @@ def __init__( self.__graphql_prefix = self.get_graphql_prefix(o.path) self.__graphql_url = urllib.parse.urlunparse(o._replace(path=self.__graphql_prefix)) self.__hostname = o.hostname # type: ignore + if base_url == Consts.DEFAULT_BASE_URL: + self.__domains = ["github.com", "githubusercontent.com"] + else: + self.__domains = list({o.hostname, o.hostname.removeprefix("api.")}) # type: ignore self.__port = o.port self.__prefix = o.path self.__timeout = timeout @@ -439,6 +436,7 @@ def __init__( self.rate_limiting = (-1, -1) self.rate_limiting_resettime = 0 self.FIX_REPO_GET_GIT_REF = True + assert isinstance(per_page, int) and per_page > 0, per_page self.per_page = per_page self.oauth_scopes = None @@ -501,7 +499,7 @@ def add_parameters_to_url( ) -> 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 + # union parameters in url with given parameters, the latter has 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 @@ -510,7 +508,8 @@ def add_parameters_to_url( if len(parameter_list) == 0: return url else: - return f"{url}?{urllib.parse.urlencode(parameter_list)}" + # we need deterministic URLs for stable test assertions + return f"{url}?{urllib.parse.urlencode(sorted(parameter_list))}" def close(self) -> None: """ @@ -589,15 +588,18 @@ def is_lazy(self) -> bool: def is_not_lazy(self) -> bool: return not self.__lazy - def withLazy(self, lazy: bool) -> Requester: + def withLazy(self, lazy: Opt[bool]) -> Requester: """ Create a new requester instance with identical configuration but the given lazy setting. - :param lazy: completable objects created from this instance are lazy, as well as completable objects created - from those, and so on - :return: new Requester instance + :param lazy: if True, completable objects created from this instance are lazy, as well as completable objects + created from those, and so on. + :return: new Requester instance if is_defined(lazy) and lazy != self.is_lazy, this instance otherwise """ + if is_undefined(lazy) or self.is_lazy == lazy: + return self + kwargs = self.kwargs kwargs.update(lazy=lazy) return Requester(**kwargs) @@ -620,16 +622,20 @@ def requestJsonAndCheck( :raises: :class:`GithubException` for error status codes """ - return self.__check( - *self.requestJson( - verb, - url, - parameters, - headers, - input, - self.__customConnection(url), - follow_302_redirect=follow_302_redirect, - ) + return self.__postProcess( + verb, + url, + *self.__check( + *self.requestJson( + verb, + url, + parameters, + headers, + input, + self.__customConnection(url), + follow_302_redirect=follow_302_redirect, + ) + ), ) def requestMultipartAndCheck( @@ -649,7 +655,11 @@ def requestMultipartAndCheck( :raises: :class:`GithubException` for error status codes """ - return self.__check(*self.requestMultipart(verb, url, parameters, headers, input, self.__customConnection(url))) + return self.__postProcess( + verb, + url, + *self.__check(*self.requestMultipart(verb, url, parameters, headers, input, self.__customConnection(url))), + ) def requestBlobAndCheck( self, @@ -669,7 +679,11 @@ def requestBlobAndCheck( :raises: :class:`GithubException` for error status codes """ - return self.__check(*self.requestBlob(verb, url, parameters, headers, input, self.__customConnection(url))) + return self.__postProcess( + verb, + url, + *self.__check(*self.requestBlob(verb, url, parameters, headers, input, self.__customConnection(url))), + ) @classmethod def paths_of_dict(cls, d: dict) -> dict: @@ -853,8 +867,24 @@ def __check( raise self.createException(status, responseHeaders, data) return responseHeaders, data + def __postProcess( + self, verb: str, url: str, responseHeaders: dict[str, Any], data: Any + ) -> tuple[dict[str, Any], Any]: + if verb == "GET" and isinstance(data, dict) and "url" not in data: + if "_links" in data and "self" in data["_links"] and data["_links"]["self"]: + self_link = data["_links"]["self"] + if isinstance(self_link, str): + data["url"] = self_link + elif isinstance(self_link, dict): + href = self_link.get("href") + if href: + data["url"] = href + else: + data["url"] = url + return responseHeaders, data + @classmethod - def __hostnameHasDomain(cls, hostname: str, domain_or_domains: str | tuple[str, ...]) -> bool: + def __hostnameHasDomain(cls, hostname: str, domain_or_domains: str | list[str]) -> bool: if isinstance(domain_or_domains, str): if hostname == domain_or_domains: return True @@ -870,10 +900,7 @@ def __assertUrlAllowed(self, url: str) -> None: assert o.path.startswith(tuple(prefixes)), o.path assert o.port == self.__port, o.port else: - if self.__base_url == Consts.DEFAULT_BASE_URL: - assert self.__hostnameHasDomain(o.hostname, ("github.com", "githubusercontent.com")), o.hostname - else: - assert self.__hostnameHasDomain(o.hostname, self.__hostname), o.hostname + assert self.__hostnameHasDomain(o.hostname, self.__domains), o.hostname def __customConnection(self, url: str) -> HTTPRequestsConnectionClass | HTTPSRequestsConnectionClass | None: cnx: HTTPRequestsConnectionClass | HTTPSRequestsConnectionClass | None = None @@ -1148,7 +1175,7 @@ def encode(_: Any) -> tuple[str, Any]: status, responseHeaders, output = self.__requestEncode(cnx, verb, url, parameters, headers, file_like, encode) if isinstance(output, str): - return self.__check(status, responseHeaders, output) + return self.__postProcess(verb, url, *self.__check(status, responseHeaders, output)) raise ValueError("requestMemoryBlobAndCheck() Expected a str, should never happen") def __requestEncode( diff --git a/github/Secret.py b/github/Secret.py index db4a928718..c92636bcf6 100644 --- a/github/Secret.py +++ b/github/Secret.py @@ -40,6 +40,7 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from typing import Any @@ -112,8 +113,11 @@ def url(self) -> str: def delete(self) -> None: """ - :calls: `DELETE {secret_url} `_ - :rtype: None + :calls: `DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name} `_ + :calls: `DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name} `_ + :calls: `DELETE /orgs/{org}/actions/secrets/{secret_name} `_ + :calls: `DELETE /orgs/{org}/dependabot/secrets/{secret_name} `_ """ self._requester.requestJsonAndCheck("DELETE", self.url) @@ -122,6 +126,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "name" in attributes: self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes and attributes["url"]: + quoted_name = attributes["url"].split("/")[-1] + name = urllib.parse.unquote(quoted_name) + self._name = self._makeStringAttribute(name) if "secrets_url" in attributes: self._secrets_url = self._makeStringAttribute(attributes["secrets_url"]) if "updated_at" in attributes: diff --git a/github/SecretScanAlert.py b/github/SecretScanAlert.py new file mode 100644 index 0000000000..bad900066d --- /dev/null +++ b/github/SecretScanAlert.py @@ -0,0 +1,256 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from datetime import datetime +from typing import TYPE_CHECKING, Any + +import github.NamedUser +import github.SecretScanAlertInstance +from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet + +if TYPE_CHECKING: + from github.NamedUser import NamedUser + from github.SecretScanAlertInstance import SecretScanAlertInstance + + +class SecretScanAlert(NonCompletableGithubObject): + """ + This class represents alerts from secret scanning. + + The reference can be found here + https://docs.github.com/en/rest/reference/secret-scanning. + + The OpenAPI schema can be found at + + - /components/schemas/secret-scanning-alert + + """ + + def _initAttributes(self) -> None: + self._created_at: Attribute[datetime] = NotSet + self._first_location_detected: Attribute[SecretScanAlertInstance] = NotSet + self._has_more_locations: Attribute[bool] = NotSet + self._html_url: Attribute[str] = NotSet + self._is_base64_encoded: Attribute[bool] = NotSet + self._locations_url: Attribute[str] = NotSet + self._multi_repo: Attribute[bool] = NotSet + self._number: Attribute[int] = NotSet + self._publicly_leaked: Attribute[bool] = NotSet + self._push_protection_bypass_request_comment: Attribute[str | None] = NotSet + self._push_protection_bypass_request_html_url: Attribute[str | None] = NotSet + self._push_protection_bypass_request_reviewer: Attribute[NamedUser | None] = NotSet + self._push_protection_bypass_request_reviewer_comment: Attribute[str | None] = NotSet + self._push_protection_bypassed: Attribute[bool] = NotSet + self._push_protection_bypassed_at: Attribute[datetime | None] = NotSet + self._push_protection_bypassed_by: Attribute[NamedUser | None] = NotSet + self._resolution: Attribute[str | None] = NotSet + self._resolution_comment: Attribute[str | None] = NotSet + self._resolved_at: Attribute[datetime | None] = NotSet + self._resolved_by: Attribute[NamedUser | None] = NotSet + self._secret: Attribute[str] = NotSet + self._secret_type: Attribute[str] = NotSet + self._secret_type_display_name: Attribute[str] = NotSet + self._state: Attribute[str] = NotSet + self._updated_at: Attribute[datetime] = NotSet + self._url: Attribute[str] = NotSet + self._validity: Attribute[str] = NotSet + + def __repr__(self) -> str: + return self.get__repr__({"number": self.number}) + + @property + def created_at(self) -> datetime: + return self._created_at.value + + @property + def first_location_detected(self) -> SecretScanAlertInstance: + return self._first_location_detected.value + + @property + def has_more_locations(self) -> bool: + return self._has_more_locations.value + + @property + def html_url(self) -> str: + return self._html_url.value + + @property + def is_base64_encoded(self) -> bool: + return self._is_base64_encoded.value + + @property + def locations_url(self) -> str: + return self._locations_url.value + + @property + def multi_repo(self) -> bool: + return self._multi_repo.value + + @property + def number(self) -> int: + return self._number.value + + @property + def publicly_leaked(self) -> bool: + return self._publicly_leaked.value + + @property + def push_protection_bypass_request_comment(self) -> str | None: + return self._push_protection_bypass_request_comment.value + + @property + def push_protection_bypass_request_html_url(self) -> str | None: + return self._push_protection_bypass_request_html_url.value + + @property + def push_protection_bypass_request_reviewer(self) -> NamedUser | None: + return self._push_protection_bypass_request_reviewer.value + + @property + def push_protection_bypass_request_reviewer_comment(self) -> str | None: + return self._push_protection_bypass_request_reviewer_comment.value + + @property + def push_protection_bypassed(self) -> bool: + return self._push_protection_bypassed.value + + @property + def push_protection_bypassed_at(self) -> datetime | None: + return self._push_protection_bypassed_at.value + + @property + def push_protection_bypassed_by(self) -> NamedUser | None: + return self._push_protection_bypassed_by.value + + @property + def resolution(self) -> str | None: + return self._resolution.value + + @property + def resolution_comment(self) -> str | None: + return self._resolution_comment.value + + @property + def resolved_at(self) -> datetime | None: + return self._resolved_at.value + + @property + def resolved_by(self) -> NamedUser | None: + return self._resolved_by.value + + @property + def secret(self) -> str: + return self._secret.value + + @property + def secret_type(self) -> str: + return self._secret_type.value + + @property + def secret_type_display_name(self) -> str: + return self._secret_type_display_name.value + + @property + def state(self) -> str: + return self._state.value + + @property + def updated_at(self) -> datetime: + return self._updated_at.value + + @property + def url(self) -> str: + return self._url.value + + @property + def validity(self) -> str: + return self._validity.value + + def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "created_at" in attributes: + self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) + if "first_location_detected" in attributes: + self._first_location_detected = self._makeClassAttribute( + github.SecretScanAlertInstance.SecretScanAlertInstance, attributes["first_location_detected"] + ) + if "has_more_locations" in attributes: + self._has_more_locations = self._makeBoolAttribute(attributes["has_more_locations"]) + if "html_url" in attributes: + self._html_url = self._makeStringAttribute(attributes["html_url"]) + if "is_base64_encoded" in attributes: + self._is_base64_encoded = self._makeBoolAttribute(attributes["is_base64_encoded"]) + if "locations_url" in attributes: + self._locations_url = self._makeStringAttribute(attributes["locations_url"]) + if "multi_repo" in attributes: + self._multi_repo = self._makeBoolAttribute(attributes["multi_repo"]) + if "number" in attributes: + self._number = self._makeIntAttribute(attributes["number"]) + if "publicly_leaked" in attributes: + self._publicly_leaked = self._makeBoolAttribute(attributes["publicly_leaked"]) + if "push_protection_bypass_request_comment" in attributes: + self._push_protection_bypass_request_comment = self._makeStringAttribute( + attributes["push_protection_bypass_request_comment"] + ) + if "push_protection_bypass_request_html_url" in attributes: + self._push_protection_bypass_request_html_url = self._makeStringAttribute( + attributes["push_protection_bypass_request_html_url"] + ) + if "push_protection_bypass_request_reviewer" in attributes: + self._push_protection_bypass_request_reviewer = self._makeClassAttribute( + github.NamedUser.NamedUser, attributes["push_protection_bypass_request_reviewer"] + ) + if "push_protection_bypass_request_reviewer_comment" in attributes: + self._push_protection_bypass_request_reviewer_comment = self._makeStringAttribute( + attributes["push_protection_bypass_request_reviewer_comment"] + ) + if "push_protection_bypassed" in attributes: + self._push_protection_bypassed = self._makeBoolAttribute(attributes["push_protection_bypassed"]) + if "push_protection_bypassed_at" in attributes: + self._push_protection_bypassed_at = self._makeDatetimeAttribute(attributes["push_protection_bypassed_at"]) + if "push_protection_bypassed_by" in attributes: + self._push_protection_bypassed_by = self._makeClassAttribute( + github.NamedUser.NamedUser, attributes["push_protection_bypassed_by"] + ) + if "resolution" in attributes: + self._resolution = self._makeStringAttribute(attributes["resolution"]) + if "resolution_comment" in attributes: + self._resolution_comment = self._makeStringAttribute(attributes["resolution_comment"]) + if "resolved_at" in attributes: + self._resolved_at = self._makeDatetimeAttribute(attributes["resolved_at"]) + if "resolved_by" in attributes: + self._resolved_by = self._makeClassAttribute(github.NamedUser.NamedUser, attributes["resolved_by"]) + if "secret" in attributes: + self._secret = self._makeStringAttribute(attributes["secret"]) + if "secret_type" in attributes: + self._secret_type = self._makeStringAttribute(attributes["secret_type"]) + if "secret_type_display_name" in attributes: + self._secret_type_display_name = self._makeStringAttribute(attributes["secret_type_display_name"]) + if "state" in attributes: + self._state = self._makeStringAttribute(attributes["state"]) + if "updated_at" in attributes: + self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) + if "url" in attributes: + self._url = self._makeStringAttribute(attributes["url"]) + if "validity" in attributes: + self._validity = self._makeStringAttribute(attributes["validity"]) diff --git a/github/SecretScanAlertInstance.py b/github/SecretScanAlertInstance.py new file mode 100644 index 0000000000..3bf8c6dd8b --- /dev/null +++ b/github/SecretScanAlertInstance.py @@ -0,0 +1,126 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2020 Dhruv Manilawala # +# Copyright 2020 Steve Kowalik # +# Copyright 2022 Eric Nieuwland # +# Copyright 2023 Enrico Minack # +# Copyright 2023 Trim21 # +# Copyright 2024 Enrico Minack # +# Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from typing import Any + +from github.GithubObject import Attribute, NonCompletableGithubObject, NotSet + + +class SecretScanAlertInstance(NonCompletableGithubObject): + """ + This class represents secret scanning alert instances. + + The reference can be found here + https://docs.github.com/en/rest/reference/secret-scanning. + + """ + + def _initAttributes(self) -> None: + self._blob_sha: Attribute[str] = NotSet + self._blob_url: Attribute[str] = NotSet + self._commit_sha: Attribute[str] = NotSet + self._commit_url: Attribute[str] = NotSet + self._end_column: Attribute[int] = NotSet + self._end_line: Attribute[int] = NotSet + self._path: Attribute[str] = NotSet + self._start_column: Attribute[int] = NotSet + self._start_line: Attribute[int] = NotSet + + def __repr__(self) -> str: + return self.get__repr__( + { + "path": self.path, + "start_line": self.start_line, + "start_column": self.start_column, + "end_line": self.end_line, + "end_column": self.end_column, + } + ) + + def __str__(self) -> str: + return f"{self.path} @ l{self.start_line}:c{self.start_column}-l{self.end_line}:c{self.end_column}" + + @property + def blob_sha(self) -> str: + return self._blob_sha.value + + @property + def blob_url(self) -> str: + return self._blob_url.value + + @property + def commit_sha(self) -> str: + return self._commit_sha.value + + @property + def commit_url(self) -> str: + return self._commit_url.value + + @property + def end_column(self) -> int: + return self._end_column.value + + @property + def end_line(self) -> int: + return self._end_line.value + + @property + def path(self) -> str: + return self._path.value + + @property + def start_column(self) -> int: + return self._start_column.value + + @property + def start_line(self) -> int: + return self._start_line.value + + def _useAttributes(self, attributes: dict[str, Any]) -> None: + if "blob_sha" in attributes: + self._blob_sha = self._makeStringAttribute(attributes["blob_sha"]) + if "blob_url" in attributes: + self._blob_url = self._makeStringAttribute(attributes["blob_url"]) + if "commit_sha" in attributes: + self._commit_sha = self._makeStringAttribute(attributes["commit_sha"]) + if "commit_url" in attributes: + self._commit_url = self._makeStringAttribute(attributes["commit_url"]) + if "end_column" in attributes: + self._end_column = self._makeIntAttribute(attributes["end_column"]) + if "end_line" in attributes: + self._end_line = self._makeIntAttribute(attributes["end_line"]) + if "path" in attributes: + self._path = self._makeStringAttribute(attributes["path"]) + if "start_column" in attributes: + self._start_column = self._makeIntAttribute(attributes["start_column"]) + if "start_line" in attributes: + self._start_line = self._makeIntAttribute(attributes["start_line"]) diff --git a/github/SourceImport.py b/github/SourceImport.py index 3a094792b6..9c4dd8fd57 100644 --- a/github/SourceImport.py +++ b/github/SourceImport.py @@ -13,6 +13,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -203,9 +204,11 @@ def vcs_url(self) -> str: self._completeIfNotSet(self._vcs_url) return self._vcs_url.value - def update(self, additional_headers: None | dict[str, Any] = None) -> bool: + def update( + self, additional_headers: dict[str, Any] | None = None, parameters: dict[str, Any] | None = None + ) -> bool: import_header = {"Accept": Consts.mediaTypeImportPreview} - return super().update(additional_headers=import_header) + return super().update(additional_headers=import_header, parameters=parameters) def _useAttributes(self, attributes: dict[str, Any]) -> None: if "authors_count" in attributes: # pragma no branch diff --git a/github/Team.py b/github/Team.py index d3306bdbef..841b5554ee 100644 --- a/github/Team.py +++ b/github/Team.py @@ -79,7 +79,7 @@ import github.TeamDiscussion from github import Consts from github.GithubException import UnknownObjectException -from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt +from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, method_returns if TYPE_CHECKING: from github.Membership import Membership @@ -111,6 +111,7 @@ class Team(CompletableGithubObject): def _initAttributes(self) -> None: self._created_at: Attribute[datetime] = NotSet self._description: Attribute[str] = NotSet + self._enterprise_id: Attribute[int] = NotSet self._group_id: Attribute[int] = NotSet self._group_name: Attribute[str] = NotSet self._html_url: Attribute[str] = NotSet @@ -122,6 +123,7 @@ def _initAttributes(self) -> None: self._node_id: Attribute[str] = NotSet self._notification_setting: Attribute[str] = NotSet self._organization: Attribute[Organization] = NotSet + self._organization_id: Attribute[int] = NotSet self._organization_selection_type: Attribute[str] = NotSet self._parent: Attribute[github.Team.Team] = NotSet self._permission: Attribute[str] = NotSet @@ -131,6 +133,7 @@ def _initAttributes(self) -> None: self._repositories_url: Attribute[str] = NotSet self._slug: Attribute[str] = NotSet self._sync_to_organizations: Attribute[str] = NotSet + self._type: Attribute[str] = NotSet self._updated_at: Attribute[datetime] = NotSet self._url: Attribute[str] = NotSet @@ -151,6 +154,11 @@ def description(self) -> str: self._completeIfNotSet(self._description) return self._description.value + @property + def enterprise_id(self) -> int: + self._completeIfNotSet(self._enterprise_id) + return self._enterprise_id.value + @property def group_id(self) -> int: self._completeIfNotSet(self._group_id) @@ -206,6 +214,11 @@ def organization(self) -> Organization: self._completeIfNotSet(self._organization) return self._organization.value + @property + def organization_id(self) -> int: + self._completeIfNotSet(self._organization_id) + return self._organization_id.value + @property def organization_selection_type(self) -> str: self._completeIfNotSet(self._organization_selection_type) @@ -251,6 +264,11 @@ def sync_to_organizations(self) -> str: self._completeIfNotSet(self._sync_to_organizations) return self._sync_to_organizations.value + @property + def type(self) -> str: + self._completeIfNotSet(self._type) + return self._type.value + @property def updated_at(self) -> datetime: self._completeIfNotSet(self._updated_at) @@ -261,19 +279,20 @@ def url(self) -> str: self._completeIfNotSet(self._url) return self._url.value + @deprecated("Use add_membership instead") def add_to_members(self, member: NamedUser) -> None: """ This API call is deprecated. Use `add_membership` instead. https://docs.github.com/en/rest/reference/teams#add-or-update-team-membership-for-a-user-legacy - :calls: `PUT /teams/{id}/members/{user} `_ + :calls: `PUT /teams/{team_id}/members/{username} `_ """ assert isinstance(member, github.NamedUser.NamedUser), member headers, data = self._requester.requestJsonAndCheck("PUT", f"{self.url}/members/{member._identity}") def add_membership(self, member: NamedUser, role: Opt[str] = NotSet) -> None: """ - :calls: `PUT /teams/{id}/memberships/{user} `_ + :calls: `PUT /teams/{team_id}/memberships/{username} `_ """ assert isinstance(member, github.NamedUser.NamedUser), member assert role is NotSet or isinstance(role, str), role @@ -292,7 +311,7 @@ def add_membership(self, member: NamedUser, role: Opt[str] = NotSet) -> None: def get_team_membership(self, member: str | NamedUser) -> Membership: """ - :calls: `GET /orgs/{org}/memberships/team/{team_id}/{username} `_ + :calls: `GET /orgs/{org}/teams/{team_slug}/memberships/{username} `_ """ assert isinstance(member, str) or isinstance(member, github.NamedUser.NamedUser), member if isinstance(member, github.NamedUser.NamedUser): @@ -304,16 +323,17 @@ def get_team_membership(self, member: str | NamedUser) -> Membership: def add_to_repos(self, repo: str | Repository) -> None: """ - :calls: `PUT /teams/{id}/repos/{org}/{repo} `_ + :calls: `PUT /teams/{team_id}/repos/{owner}/{repo} `_ """ assert isinstance(repo, (str, github.Repository.Repository)), repo headers, data = self._requester.requestJsonAndCheck( "PUT", f"{self.url}/repos/{github.Repository.Repository.as_url_param(repo)}" ) + @method_returns(schema_property="permissions") def get_repo_permission(self, repo: str | Repository) -> Permissions | None: """ - :calls: `GET /teams/{id}/repos/{org}/{repo} `_ + :calls: `GET /teams/{team_id}/repos/{owner}/{repo} `_ """ assert isinstance(repo, (str, github.Repository.Repository)), repo try: @@ -333,7 +353,7 @@ def get_repo_permission(self, repo: str | Repository) -> Permissions | None: ) def set_repo_permission(self, repo: str | Repository, permission: str) -> None: """ - :calls: `PUT /teams/{id}/repos/{org}/{repo} `_ + :calls: `PUT /teams/{team_id}/repos/{owner}/{repo} `_ :param repo: :class:`github.Repository.Repository` :param permission: string :rtype: None @@ -364,7 +384,7 @@ def update_team_repository(self, repo: str | Repository, permission: str) -> boo def delete(self) -> None: """ - :calls: `DELETE /teams/{id} `_ + :calls: `DELETE /teams/{team_id} `_ """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) @@ -378,7 +398,7 @@ def edit( notification_setting: Opt[str] = NotSet, ) -> None: """ - :calls: `PATCH /teams/{id} `_ + :calls: `PATCH /teams/{team_id} `_ """ assert isinstance(name, str), name assert description is NotSet or isinstance(description, str), description @@ -399,10 +419,11 @@ def edit( headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters) self._useAttributes(data) + self._set_complete() def get_teams(self) -> PaginatedList[Team]: """ - :calls: `GET /teams/{id}/teams `_ + :calls: `GET /teams/{team_id}/teams `_ """ return github.PaginatedList.PaginatedList( github.Team.Team, @@ -413,7 +434,7 @@ def get_teams(self) -> PaginatedList[Team]: def get_discussions(self) -> PaginatedList[TeamDiscussion]: """ - :calls: `GET /teams/{id}/discussions `_ + :calls: `GET /teams/{team_id}/discussions `_ """ return github.PaginatedList.PaginatedList( github.TeamDiscussion.TeamDiscussion, @@ -425,7 +446,7 @@ def get_discussions(self) -> PaginatedList[TeamDiscussion]: def get_members(self, role: Opt[str] = NotSet) -> PaginatedList[NamedUser]: """ - :calls: `GET /teams/{id}/members `_ + :calls: `GET /teams/{team_id}/members `_ """ assert role is NotSet or isinstance(role, str), role url_parameters: dict[str, Any] = {} @@ -441,7 +462,7 @@ def get_members(self, role: Opt[str] = NotSet) -> PaginatedList[NamedUser]: def get_repos(self) -> PaginatedList[Repository]: """ - :calls: `GET /teams/{id}/repos `_ + :calls: `GET /teams/{team_id}/repos `_ """ return github.PaginatedList.PaginatedList( github.Repository.Repository, self._requester, f"{self.url}/repos", None @@ -449,7 +470,7 @@ def get_repos(self) -> PaginatedList[Repository]: def invitations(self) -> PaginatedList[OrganizationInvitation]: """ - :calls: `GET /teams/{id}/invitations `_ + :calls: `GET /teams/{team_id}/invitations `_ """ return github.PaginatedList.PaginatedList( github.NamedUser.OrganizationInvitation, @@ -461,7 +482,7 @@ def invitations(self) -> PaginatedList[OrganizationInvitation]: def has_in_members(self, member: NamedUser) -> bool: """ - :calls: `GET /teams/{id}/members/{user} `_ + :calls: `GET /teams/{team_id}/members/{username} `_ """ assert isinstance(member, github.NamedUser.NamedUser), member status, headers, data = self._requester.requestJson("GET", f"{self.url}/members/{member._identity}") @@ -469,7 +490,7 @@ def has_in_members(self, member: NamedUser) -> bool: def has_in_repos(self, repo: str | Repository) -> bool: """ - :calls: `GET /teams/{id}/repos/{owner}/{repo} `_ + :calls: `GET /teams/{team_id}/repos/{owner}/{repo} `_ """ assert isinstance(repo, (str, github.Repository.Repository)), repo status, headers, data = self._requester.requestJson( @@ -484,19 +505,20 @@ def remove_membership(self, member: NamedUser) -> None: assert isinstance(member, github.NamedUser.NamedUser), member headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/memberships/{member._identity}") + @deprecated("Use remove_membership instead") def remove_from_members(self, member: NamedUser) -> None: """ This API call is deprecated. Use `remove_membership` instead: https://docs.github.com/en/rest/reference/teams#add-or-update-team-membership-for-a-user-legacy - :calls: `DELETE /teams/{id}/members/{user} `_ + :calls: `DELETE /teams/{team_id}/members/{username} `_ """ assert isinstance(member, github.NamedUser.NamedUser), member headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/members/{member._identity}") def remove_from_repos(self, repo: str | Repository) -> None: """ - :calls: `DELETE /teams/{id}/repos/{owner}/{repo} `_ + :calls: `DELETE /teams/{team_id}/repos/{owner}/{repo} `_ """ assert isinstance(repo, (str, github.Repository.Repository)), repo headers, data = self._requester.requestJsonAndCheck( @@ -508,6 +530,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "description" in attributes: # pragma no branch self._description = self._makeStringAttribute(attributes["description"]) + if "enterprise_id" in attributes: # pragma no branch + self._enterprise_id = self._makeIntAttribute(attributes["enterprise_id"]) if "group_id" in attributes: # pragma no branch self._group_id = self._makeIntAttribute(attributes["group_id"]) if "group_name" in attributes: # pragma no branch @@ -516,6 +540,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "ldap_dn" in attributes: # pragma no branch self._ldap_dn = self._makeStringAttribute(attributes["ldap_dn"]) if "members_count" in attributes: # pragma no branch @@ -530,6 +558,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._notification_setting = self._makeStringAttribute(attributes["notification_setting"]) if "organization" in attributes: # pragma no branch self._organization = self._makeClassAttribute(github.Organization.Organization, attributes["organization"]) + if "organization_id" in attributes: # pragma no branch + self._organization_id = self._makeIntAttribute(attributes["organization_id"]) if "organization_selection_type" in attributes: # pragma no branch self._organization_selection_type = self._makeStringAttribute(attributes["organization_selection_type"]) if "parent" in attributes: # pragma no branch @@ -548,6 +578,8 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._slug = self._makeStringAttribute(attributes["slug"]) if "sync_to_organizations" in attributes: # pragma no branch self._sync_to_organizations = self._makeStringAttribute(attributes["sync_to_organizations"]) + if "type" in attributes: # pragma no branch + self._type = self._makeStringAttribute(attributes["type"]) if "updated_at" in attributes: # pragma no branch self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: # pragma no branch diff --git a/github/TeamDiscussion.py b/github/TeamDiscussion.py index b3e0ca5ca4..0b533f29fe 100644 --- a/github/TeamDiscussion.py +++ b/github/TeamDiscussion.py @@ -23,6 +23,7 @@ # Copyright 2023 Trim21 # # Copyright 2024 Enrico Minack # # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -57,6 +58,10 @@ class TeamDiscussion(DiscussionBase): The reference can be found here https://docs.github.com/en/rest/reference/teams#discussions + The OpenAPI schema can be found at + + - /components/schemas/team-discussion + """ def _initAttributes(self) -> None: diff --git a/github/TimelineEvent.py b/github/TimelineEvent.py index 8d22cb765e..9ef4b769b8 100644 --- a/github/TimelineEvent.py +++ b/github/TimelineEvent.py @@ -60,6 +60,10 @@ class TimelineEvent(NonCompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/reference/issues#timeline + The OpenAPI schema can be found at + + - /components/schemas/timeline-issue-events + """ def _initAttributes(self) -> None: diff --git a/github/UserKey.py b/github/UserKey.py index 71862e700d..b8107cd657 100644 --- a/github/UserKey.py +++ b/github/UserKey.py @@ -57,6 +57,7 @@ class UserKey(CompletableGithubObject): The OpenAPI schema can be found at - /components/schemas/key + - /components/schemas/key-simple """ @@ -115,7 +116,7 @@ def verified(self) -> bool: def delete(self) -> None: """ - :calls: `DELETE /user/keys/{id} `_ + :calls: `DELETE /user/keys/{key_id} `_ :rtype: None """ headers, data = self._requester.requestJsonAndCheck("DELETE", self.url) diff --git a/github/Variable.py b/github/Variable.py index 6d69d268d3..6ba5f4f15d 100644 --- a/github/Variable.py +++ b/github/Variable.py @@ -27,6 +27,7 @@ from __future__ import annotations +import urllib.parse from datetime import datetime from typing import Any @@ -40,6 +41,10 @@ class Variable(CompletableGithubObject): The reference can be found here https://docs.github.com/en/rest/actions/variables + The OpenAPI schema can be found at + + - /components/schemas/actions-variable + """ def _initAttributes(self) -> None: @@ -104,7 +109,7 @@ def variables_url(self) -> str: def edit(self, value: str) -> bool: """ - :calls: `PATCH /repos/{owner}/{repo}/actions/variables/{variable_name} `_ + :calls: `PATCH /repos/{owner}/{repo}/actions/variables/{name} `_ :param variable_name: string :param value: string :rtype: bool @@ -123,7 +128,9 @@ def edit(self, value: str) -> bool: def delete(self) -> None: """ - :calls: `DELETE {variable_url} `_ + :calls: `DELETE /orgs/{org}/actions/variables/{name} `_ + :calls: `DELETE /repos/{owner}/{repo}/actions/variables/{name} `_ + :calls: `DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name} `_ :rtype: None """ self._requester.requestJsonAndCheck("DELETE", self.url) @@ -133,6 +140,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._created_at = self._makeDatetimeAttribute(attributes["created_at"]) if "name" in attributes: self._name = self._makeStringAttribute(attributes["name"]) + elif "url" in attributes and attributes["url"]: + quoted_name = attributes["url"].split("/")[-1] + name = urllib.parse.unquote(quoted_name) + self._name = self._makeStringAttribute(name) if "updated_at" in attributes: self._updated_at = self._makeDatetimeAttribute(attributes["updated_at"]) if "url" in attributes: diff --git a/github/Workflow.py b/github/Workflow.py index 563fa9bd13..a62c5a0b01 100644 --- a/github/Workflow.py +++ b/github/Workflow.py @@ -24,6 +24,7 @@ # Copyright 2024 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # # Copyright 2025 Nick McClorey <32378821+nickrmcclorey@users.noreply.github.com># +# Copyright 2026 Denis Blanchette # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -142,11 +143,16 @@ def url(self) -> str: self._completeIfNotSet(self._url) return self._url.value + # v3: default throw to True def create_dispatch( - self, ref: github.Branch.Branch | github.Tag.Tag | github.Commit.Commit | str, inputs: Opt[dict] = NotSet + self, + ref: github.Branch.Branch | github.Tag.Tag | github.Commit.Commit | str, + inputs: Opt[dict] = NotSet, + throw: bool = False, ) -> bool: """ :calls: `POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches `_ + Note: raises or return False without details on error, depending on the ``throw`` parameter. """ assert ( isinstance(ref, github.Branch.Branch) @@ -163,10 +169,15 @@ def create_dispatch( ref = ref.name if inputs is NotSet: inputs = {} - status, _, _ = self._requester.requestJson( - "POST", f"{self.url}/dispatches", input={"ref": ref, "inputs": inputs} - ) - return status == 204 + url = f"{self.url}/dispatches" + input = {"ref": ref, "inputs": inputs} + + if throw: + self._requester.requestJsonAndCheck("POST", url, input=input) + return True + else: + status, _, _ = self._requester.requestJson("POST", url, input=input) + return status == 204 def get_runs( self, @@ -244,6 +255,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "name" in attributes: # pragma no branch self._name = self._makeStringAttribute(attributes["name"]) if "node_id" in attributes: # pragma no branch diff --git a/github/WorkflowRun.py b/github/WorkflowRun.py index aa94f67fd9..991523acab 100644 --- a/github/WorkflowRun.py +++ b/github/WorkflowRun.py @@ -319,7 +319,7 @@ def get_artifacts(self) -> PaginatedList[Artifact]: return PaginatedList( github.Artifact.Artifact, self._requester, - self._artifacts_url.value, + self.artifacts_url, None, list_item="artifacts", ) @@ -413,6 +413,10 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None: self._html_url = self._makeStringAttribute(attributes["html_url"]) if "id" in attributes: # pragma no branch self._id = self._makeIntAttribute(attributes["id"]) + elif "url" in attributes and attributes["url"]: + id = attributes["url"].split("/")[-1] + if id.isnumeric(): + self._id = self._makeIntAttribute(int(id)) if "jobs_url" in attributes: # pragma no branch self._jobs_url = self._makeStringAttribute(attributes["jobs_url"]) if "logs_url" in attributes: # pragma no branch diff --git a/github/openapi.index.json b/github/openapi.index.json index 8c2260fa72..72d87d8d83 100644 --- a/github/openapi.index.json +++ b/github/openapi.index.json @@ -27,6 +27,7 @@ "Requester.graphql_query_class": "POST" }, "ignored OpenAPI schemas": [ + "/components/schemas/empty-object", "/paths/\"/repos/{owner}/{repo}/deployments\"/post/responses/202/content/\"application/json\"/schema" ] } diff --git a/pyproject.toml b/pyproject.toml index ea66238900..c15bef4582 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,18 +12,18 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Software Development", ] description = "Use the full Github API v3" keywords = ["github"] name = "PyGithub" readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.9" dynamic = ["version"] @@ -52,7 +52,7 @@ packages = ["github"] github = ["py.typed", '*.pyi'] [tool.mypy] -python_version = '3.8' +python_version = '3.9' ignore_missing_imports = true namespace_packages = true diff --git a/scripts/openapi-update-classes.sh b/scripts/openapi-update-classes.sh index 553da31771..b98cd988a7 100755 --- a/scripts/openapi-update-classes.sh +++ b/scripts/openapi-update-classes.sh @@ -103,7 +103,7 @@ commit() { if "$git" diff --exit-code 1>&2; then return 0; fi # commit - "$git" commit -a -m "$message" "$@" 1>&2 + "$git" commit --no-verify -a -m "$message" "$@" 1>&2 echo 1>&2 return 255 } diff --git a/scripts/openapi.py b/scripts/openapi.py index ac715bf976..d8212a6cef 100644 --- a/scripts/openapi.py +++ b/scripts/openapi.py @@ -1,6 +1,7 @@ ############################ Copyrights and license ############################ # # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -31,14 +32,14 @@ import re import sys from collections import Counter, defaultdict -from collections.abc import Callable +from collections.abc import Callable, Sequence from enum import Enum from json import JSONEncoder from os import listdir from os.path import isfile, join from pathlib import Path from tempfile import NamedTemporaryFile -from typing import Any, Sequence +from typing import Any import libcst as cst import requests @@ -49,22 +50,35 @@ def resolve_schema(schema_type: dict[str, Any], spec: dict[str, Any]) -> dict[str, Any]: if "$ref" in schema_type: - schema = schema_type.get("$ref").strip("# ") + schema = schema_type.get("$ref").strip("# /") ref_schema_type = spec for step in schema.split("/"): - if step: - if step not in ref_schema_type: - raise ValueError(f"Could not find schema in spec: {schema}") - ref_schema_type = ref_schema_type[step] + if step not in ref_schema_type: + raise ValueError(f"Could not find schema in spec: {schema}") + ref_schema_type = ref_schema_type[step] return ref_schema_type return schema_type +def cst_to_python(value: cst.BaseExpression) -> Any: + if isinstance(value, cst.List): + return [cst_to_python(item.value) for item in value.elements] + if isinstance(value, cst.SimpleString): + return value.evaluated_value + if isinstance(value, cst.Name): + if value.value == "True": + return True + if value.value == "False": + return False + raise ValueError(f"unsupported expr: {value}") + + def as_python_type( schema_type: dict[str, Any], schema_path: list[str], schema_to_class: dict[str, str], classes, + spec: dict[str, Any], *, verbose: bool = False, collect_new_schemas: list[str] | None = None, @@ -72,7 +86,17 @@ def as_python_type( schema = None data_type = schema_type.get("type") if "$ref" in schema_type: - schema = schema_type.get("$ref").strip("# ") + schema_path = schema_type.get("$ref").strip("# /").split("/") + schema_type = resolve_schema(schema_type, spec) + return as_python_type( + schema_type, + schema_path, + schema_to_class, + classes, + spec, + verbose=verbose, + collect_new_schemas=collect_new_schemas, + ) elif "oneOf" in schema_type: types = [ as_python_type( @@ -80,6 +104,7 @@ def as_python_type( schema_path + ["oneOf", str(idx)], schema_to_class, classes, + spec, verbose=verbose, collect_new_schemas=collect_new_schemas, ) @@ -97,6 +122,7 @@ def as_python_type( schema_path + ["allOf", "0"], schema_to_class, classes, + spec, verbose=verbose, collect_new_schemas=collect_new_schemas, ) @@ -147,6 +173,7 @@ def as_python_type( schema_path + ["items"], schema_to_class, classes, + spec, verbose=verbose, collect_new_schemas=collect_new_schemas, ) @@ -204,6 +231,7 @@ class GithubClass: methods: dict properties: dict schemas: list[str] + inherited_schemas: list[str] docstring: str def __hash__(self): @@ -250,6 +278,7 @@ def from_class_name( methods={}, properties={}, schemas=[], + inherited_schemas=[], docstring="", ) else: @@ -340,6 +369,28 @@ def contains_decorator(seq: Sequence[cst.Decorator], decorator_name: str): def is_github_object_property(cls, func_def: cst.FunctionDef): return cls.contains_decorator(func_def.decorators, "property") + @staticmethod + def get_decorators(decorators: Sequence[cst.Decorator], decorator_name: str) -> list[dict[str, Any]]: + return [ + { + k: v + for k, v in [ + (arg.keyword.value, cst_to_python(arg.value)) + for arg in args + if isinstance(arg, cst.Arg) and isinstance(arg.keyword, cst.Name) + ] + } + for decorator in decorators + for decorator in [decorator.decorator] + if isinstance(decorator, cst.Call) + and isinstance(decorator.func, cst.Name) + and decorator.func.value == decorator_name + for args in [decorator.args] + if len(args) > 0 + for name in [args[0].value] + if isinstance(name, SimpleString) + ] + @classmethod def create_subscript(cls, name: str) -> cst.Subscript: fields = name.rstrip("]").split("[", maxsplit=1) @@ -581,6 +632,7 @@ def leave_ClassDef(self, node: cst.ClassDef) -> bool | None: "test_filename": self._test_filename, "docstring": class_docstring, "schemas": class_schemas, + "inherited_schemas": [], "bases": class_bases, "properties": self._properties, "methods": self._methods, @@ -613,6 +665,10 @@ def return_types(return_type: str | None) -> list[str]: def visit_FunctionDef(self, node: cst.FunctionDef) -> None: method_name = node.name.value + decorators = self.get_decorators(node.decorators, "method_returns") + path_property = next( + iter([decorator["schema_property"] for decorator in decorators if "schema_property" in decorator]), None + ) returns = self.return_types(cst.Module([]).code_for_node(node.returns.annotation) if node.returns else None) if self.is_github_object_property(node): @@ -624,18 +680,20 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> None: string = [line for line in visitor.strings[0].splitlines() if ":calls:" in line] if string: fields = string[0].split(":calls:")[1].strip(" `").split(" ", maxsplit=2) + verb = fields[0] if len(fields) > 0 else None + path = fields[1] if len(fields) > 1 else None + path = f"{path}#{path_property}" if path_property else path + docs = fields[2] if len(fields) > 2 else None self._methods[method_name] = { "name": method_name, "call": { - "verb": fields[0] if len(fields) > 0 else None, - "path": fields[1] if len(fields) > 1 else None, - "docs": fields[2] if len(fields) > 2 else None, + "verb": verb, + "path": path, + "docs": docs, }, "returns": returns, } if len(fields) > 1: - verb = fields[0] - path = fields[1] if path not in self._paths: self._paths[path] = {} if verb not in self._paths[path]: @@ -650,16 +708,16 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> None: # check if method (VERB) is same as in the code if len(fields) > 0 and self._method_verbs is not None: - verb = f'"{fields[0]}"' + quoted_verb = f'"{verb}"' full_method_name = f"{self.current_class_name}.{method_name}" if full_method_name in self._method_verbs: # these are methods configured in the github/openapi.index.json file known_verb = f'"{self._method_verbs[full_method_name]}"' - if known_verb != verb: + if known_verb != quoted_verb: print( f"Method {full_method_name} is known to call {known_verb}, " - f"but doc-string says {verb}" + f"but doc-string says {quoted_verb}" ) else: # detect method from code @@ -719,10 +777,10 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> None: if not any( func.startswith(("self._requester.request", "self.__requester.request")) and args - and args[0] == verb + and args[0] == quoted_verb for func, args, base in calls ): - print(f"Not found any {verb} call in {self.current_class_name}.{method_name}") + print(f"Not found any {quoted_verb} call in {self.current_class_name}.{method_name}") for func, args, base in calls: print(f"- calls {func}({', '.join(args)})") # else: @@ -852,9 +910,16 @@ def leave_Module(self, original_node: Module, updated_node: Module) -> Module: import_node = node.body[i].body[0] imported_module = ( ( - import_node.module.value - if isinstance(import_node.module, cst.Name) - else import_node.module.attr.value + "".join("." for _ in import_node.relative) + + ( + ( + import_node.module.value + if isinstance(import_node.module, cst.Name) + else import_node.module.attr.value + ) + if import_node.module is not None + else "" + ) ) if isinstance(import_node, cst.ImportFrom) else import_node.names[0].name.attr.value @@ -1576,6 +1641,7 @@ def __init__( schema_path, self.schema_to_class, self.classes, + self.spec, verbose=False, collect_new_schemas=new_schemas, ) @@ -1583,7 +1649,7 @@ def __init__( print(f"creating new class for schea {new_schema}") create_new_class_func(new_schema) self.api_content = ( - as_python_type(content_schema, schema_path, self.schema_to_class, self.classes, verbose=True) + as_python_type(content_schema, schema_path, self.schema_to_class, self.classes, self.spec, verbose=True) if content_schema else None ) @@ -1649,7 +1715,7 @@ def create_method(self) -> cst.FunctionDef: request_properties = ( { prop: as_python_type( - desc, list(schema_path + (prop,)), self.schema_to_class, self.classes, verbose=True + desc, list(schema_path + (prop,)), self.schema_to_class, self.classes, self.spec, verbose=True ) for prop, desc in request_schema.get("properties", {}).items() } @@ -1867,11 +1933,13 @@ def __init__(self, args: argparse.Namespace): self.verbose = args.verbose index = ( - OpenApi.read_index(args.index_filename) if self.subcommand != "index" and "index_filename" in args else {} + OpenApi.read_json(args.index_filename) if self.subcommand != "index" and "index_filename" in args else {} ) self.classes = index.get("classes", {}) self.schema_to_class = index.get("indices", {}).get("schema_to_classes", {}) self.schema_to_class["default"] = ["GithubObject"] + self.spec = OpenApi.read_json(args.spec) if "spec" in args and self.subcommand not in ["fetch", "index"] else {} + self.ignored_schemas = set(index.get("config", {}).get("ignored_schemas", {})) def as_python_type( self, @@ -1885,12 +1953,13 @@ def as_python_type( schema_path, self.schema_to_class, self.classes, + self.spec, verbose=self.verbose, collect_new_schemas=collect_new_schemas, ) @staticmethod - def read_index(filename: str) -> dict[str, Any]: + def read_json(filename: str) -> dict[str, Any]: with open(filename) as r: return json.load(r) @@ -2051,6 +2120,7 @@ def apply( print(f"Applying API schemas to {len(class_names)} PyGithub classes") new_schemas_as_dict = handle_new_schemas == HandleNewSchemas.as_dict + new_schemas_create_class = handle_new_schemas == HandleNewSchemas.create_class any_change = False for class_name in class_names: clazz = GithubClass.from_class_name(class_name, index) @@ -2075,7 +2145,7 @@ def apply( print(f"Applying schema {schema_name}") schema_path, schema = self.get_schema(spec, schema_name) - if handle_new_schemas == HandleNewSchemas.create_class: + if new_schemas_create_class: new_schemas = [] for k, v in schema.get("properties", {}).items(): # only check for new schemas of new attributes @@ -2128,7 +2198,7 @@ def is_supported_type( for k, v in schema.get("properties", {}).items() for python_type in [self.as_python_type(v, schema_path + ["properties", k])] if is_supported_type(k, v, python_type, self.verbose) - and (is_not_dict_type(python_type) or new_schemas_as_dict) + and (is_not_dict_type(python_type) or new_schemas_as_dict or new_schemas_create_class) } genuine_properties = {k: v for k, v in all_properties.items() if k not in inherited_properties} @@ -2172,7 +2242,7 @@ def fetch(self, api: str, api_version: str, commit: str | None, spec_file: str) print(f"fetching {url}") for chunk in response.iter_content(131072): w.write(chunk) - print(".", end="") + print(".", end="", flush=True) written += len(chunk) print() print(f"written {written // 1024 / 1024:.3f} MBytes") @@ -2222,6 +2292,20 @@ def index( class_to_descendants[cls].append(name) class_to_descendants = {cls: sorted(descendants) for cls, descendants in class_to_descendants.items()} + # add schemas of base classes to derived classes + for name, clazz in sorted(classes.items(), key=lambda v: v[0]): + schemas = clazz.get("schemas") + if not schemas: + continue + + for derived in class_to_descendants.get(name, []): + if derived in classes: + derived_schemas = classes[derived].get("inherited_schemas", []) + for schema in schemas: + if schema not in derived_schemas: + derived_schemas.append(schema) + classes[derived]["inherited_schemas"] = derived_schemas + path_to_call_methods = {} path_to_return_classes = {} schema_to_classes = {} @@ -2568,8 +2652,7 @@ def inner_return_type(return_type: str) -> list[str]: available_schemas[cls_name][key] = [] for st in spec_type: st = st.lstrip("#") - # explicitly ignore these schemas - if st in {"/components/schemas/empty-object"}: + if st in self.ignored_schemas: continue schema_returned_by[st].add(key) if st not in schema_to_classes: @@ -2577,7 +2660,10 @@ def inner_return_type(return_type: str) -> list[str]: # only add as available schema for cls_name if this schema # is not implemented by any other class in the union (cls_names) if not any( - st in classes.get(n, {}).get("schemas", []) for n in cls_names.difference(set(cls_name)) + st in classes.get(n, {}).get("schemas", []) + for n in cls_names.difference(set(cls_name)) + # normalize class names, remove the module and package + for n in ([n.split(".")[-1]] if "." in n else [n]) ): available_schemas[cls_name][key].append(st) @@ -2586,7 +2672,9 @@ def inner_return_type(return_type: str) -> list[str]: for cls, provided_schemas in sorted(available_schemas.items()): available = set() - implemented = classes.get(cls, {}).get("schemas", []) + clazz = classes.get(cls, {}) + implemented = clazz.get("schemas", []) + implemented.extend(clazz.get("inherited_schemas", [])) providing_properties = [] for providing_property, spec_types in provided_schemas.items(): @@ -2614,7 +2702,6 @@ def inner_return_type(return_type: str) -> list[str]: print(f"- {providing_class}.{providing_property}") if add and schemas_to_implement: - clazz = classes.get(cls, {}) filename = clazz.get("filename") clazz_name = clazz.get("name") if not filename or not clazz_name: @@ -2629,15 +2716,20 @@ def inner_return_type(return_type: str) -> list[str]: # suggest schemas based on API calls available_schemas = {} schema_returned_by = defaultdict(set) - ignored_schemas = set(index.get("config", {}).get("ignored_schemas", {})) paths = set(spec.get("paths", {}).keys()).union(path_to_return_classes.keys()) - for path in paths: + # paths can have an optional #property appended + for path_with_property in paths: + path, schema_property = ( + path_with_property.split("#", maxsplit=1) if "#" in path_with_property else (path_with_property, None) + ) for verb in spec.get("paths", {}).get(path, {}).keys(): responses_of_path = spec.get("paths", {}).get(path, {}).get(verb, {}).get("responses", {}) schema_path = ["paths", f'"{path}"', verb, "responses"] # we ignore wrapping types like lists / arrays here and assume methods comply with schema in that sense schemas_of_path = [ - component + "/".join(component.rstrip("/").split("/") + ["properties", schema_property]) + if schema_property + else component for status, response in responses_of_path.items() if status.isnumeric() and int(status) < 400 and "content" in response for schema in [response.get("content").get("application/json", {}).get("schema", {})] @@ -2645,9 +2737,11 @@ def inner_return_type(return_type: str) -> list[str]: schema, schema_path + [str(status), "content", '"application/json"', "schema"] ) for component in [component.lstrip("#")] - if component not in ignored_schemas + if component not in self.ignored_schemas ] - classes_of_path = index.get("indices", {}).get("path_to_return_classes", {}).get(path, {}).get(verb, []) + classes_of_path = set( + index.get("indices", {}).get("path_to_return_classes", {}).get(path_with_property, {}).get(verb, []) + ) for cls in classes_of_path: # we ignore wrapping types like lists / arrays here and assume methods comply with schema in that sense @@ -2658,9 +2752,20 @@ def inner_return_type(return_type: str) -> list[str]: available_schemas[cls] = {} if verb not in available_schemas[cls]: available_schemas[cls][verb] = {} - available_schemas[cls][verb][path] = set(schemas_of_path) + # only add schema as available schema for cls if this schema + # is not implemented by any other class in the union (classes_of_path) + available_schemas[cls][verb][path_with_property] = { + s + for s in schemas_of_path + if not any( + s in classes.get(n, {}).get("schemas", []) + for n in classes_of_path.difference(set(cls)) + # normalize class names, remove the module and package + for n in ([n.split(".")[-1]] if "." in n else [n]) + ) + } for schema in schemas_of_path: - schema_returned_by[schema].add((verb, path)) + schema_returned_by[schema].add((verb, path_with_property)) for cls, available_verbs in sorted(available_schemas.items(), key=lambda v: v[0]): if cls in ["bool", "str", "None"]: @@ -2674,7 +2779,9 @@ def inner_return_type(return_type: str) -> list[str]: paths = {} available = set() - implemented = classes.get(cls, {}).get("schemas", []) + clazz = classes.get(cls, {}) + implemented = clazz.get("schemas", []) + implemented.extend(clazz.get("inherited_schemas", [])) for verb, available_paths in available_verbs.items(): if verb not in paths: @@ -2706,7 +2813,7 @@ def inner_return_type(return_type: str) -> list[str]: print(f"- {verb.upper()} {path}") if add and schemas_to_implement: - filename = classes.get(cls, {}).get("filename") + filename = clazz.get("filename") if not filename: print(f"Filename for class {cls} not known") sys.exit(1) @@ -2908,7 +3015,10 @@ def create_class_for_schema( tests: bool, schema: str, ) -> None: - new_class_name = "".join([term[0].upper() + term[1:] for term in re.split("[-_]", schema.split("/")[-1])]) + item = schema.split("/")[-1] + if item.startswith("_"): + return None + new_class_name = "".join([term[0].upper() + term[1:] for term in re.split("[-_]", item)]) if new_class_name in classes: # we probably created that class in an earlier iteration, or we have a name collision here return diff --git a/scripts/sort_class.py b/scripts/sort_class.py index 07f6cfa701..5f8fc8dd73 100644 --- a/scripts/sort_class.py +++ b/scripts/sort_class.py @@ -1,6 +1,7 @@ ############################ Copyrights and license ############################ # # # Copyright 2025 Enrico Minack # +# Copyright 2025 Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -27,7 +28,7 @@ import json import multiprocessing import sys -from typing import Sequence +from collections.abc import Sequence import libcst as cst diff --git a/tests/AuthenticatedUser.py b/tests/AuthenticatedUser.py index f9ebcbf3d8..e477c140d2 100644 --- a/tests/AuthenticatedUser.py +++ b/tests/AuthenticatedUser.py @@ -33,6 +33,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Oskar Jansson <56458534+janssonoskar@users.noreply.github.com># # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -52,6 +53,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone import github @@ -71,6 +74,7 @@ def testAttributes(self): ) self.assertEqual(self.user.bio, "") self.assertEqual(self.user.blog, "http://vincent-jacques.net") + self.assertIsNone(self.user.business_plus) self.assertEqual(self.user.collaborators, 0) self.assertEqual(self.user.company, "Criteo") self.assertEqual( @@ -79,15 +83,22 @@ def testAttributes(self): ) self.assertEqual(self.user.disk_usage, 16692) self.assertEqual(self.user.email, "vincent@vincent-jacques.net") + self.assertIsNone(self.user.events_url) self.assertEqual(self.user.followers, 13) + self.assertIsNone(self.user.followers_url) self.assertEqual(self.user.following, 24) + self.assertIsNone(self.user.following_url) + self.assertIsNone(self.user.gists_url) self.assertEqual(self.user.gravatar_id, "b68de5ae38616c296fa345d2b9df2225") self.assertFalse(self.user.hireable) self.assertEqual(self.user.html_url, "https://github.com/jacquev6") self.assertEqual(self.user.id, 327146) + self.assertIsNone(self.user.ldap_dn) self.assertEqual(self.user.location, "Paris, France") self.assertEqual(self.user.login, "jacquev6") self.assertEqual(self.user.name, "Vincent Jacques") + self.assertIsNone(self.user.notification_email) + self.assertIsNone(self.user.organizations_url) self.assertEqual(self.user.owned_private_repos, 5) self.assertEqual(self.user.plan.name, "micro") self.assertEqual(self.user.plan.collaborators, 1) @@ -96,12 +107,20 @@ def testAttributes(self): self.assertEqual(self.user.private_gists, 5) self.assertEqual(self.user.public_gists, 1) self.assertEqual(self.user.public_repos, 10) + self.assertIsNone(self.user.received_events_url) + self.assertIsNone(self.user.repos_url) + self.assertIsNone(self.user.site_admin) + self.assertIsNone(self.user.starred_url) + self.assertIsNone(self.user.subscriptions_url) self.assertEqual(self.user.total_private_repos, 5) + self.assertIsNone(self.user.twitter_username) self.assertEqual(self.user.type, "User") + self.assertIsNone(self.user.updated_at) self.assertEqual(self.user.url, "https://api.github.com/users/jacquev6") self.assertEqual(self.user.node_id, "MDQ6VXNlcjMyNzE0Ng==") self.assertEqual(repr(self.user), 'AuthenticatedUser(login="jacquev6")') self.assertTrue(self.user.two_factor_authentication) + self.assertIsNone(self.user.user_view_type) def testEditWithoutArguments(self): self.user.edit() @@ -717,7 +736,7 @@ def testGetNotification(self): notification.updated_at, datetime(2013, 3, 15, 5, 43, 11, tzinfo=timezone.utc), ) - self.assertEqual(notification.url, None) + self.assertEqual(notification.url, "/notifications/threads/8406712") self.assertEqual(notification.subject.url, None) self.assertEqual(notification.subject.latest_comment_url, None) self.assertEqual( diff --git a/tests/Authentication.py b/tests/Authentication.py index e57a6b1bfc..b4d8a93f94 100644 --- a/tests/Authentication.py +++ b/tests/Authentication.py @@ -180,7 +180,9 @@ def testAppAuthAuthenticationWithGithubIntegrationRequesterArgs(self): def testAppInstallationAuthAuthentication(self): # test data copied from testAppAuthentication to test parity installation_auth = github.Auth.AppInstallationAuth(self.app_auth, 29782936) - g = github.Github(auth=installation_auth) + g = github.Github( + auth=installation_auth, lazy=False, seconds_between_requests=None, seconds_between_writes=None + ) # token expires 2024-11-25 01:00:02 token = installation_auth.token diff --git a/tests/Autolink.py b/tests/Autolink.py index e89bb62dcf..2636f354b9 100644 --- a/tests/Autolink.py +++ b/tests/Autolink.py @@ -52,5 +52,6 @@ def setUp(self): def testAttributes(self): self.assertEqual(self.link.id, 209614) self.assertEqual(self.link.key_prefix, "DUMMY-") + self.assertIsNone(self.link.updated_at) self.assertEqual(self.link.url_template, "https://github.com/PyGithub/PyGithub/issues/") self.assertEqual(self.link.is_alphanumeric, True) diff --git a/tests/CheckRun.py b/tests/CheckRun.py index 53a3d4a7dd..bedc3eecc4 100644 --- a/tests/CheckRun.py +++ b/tests/CheckRun.py @@ -72,6 +72,12 @@ def testAttributes(self): self.assertEqual(self.check_run.url, "https://api.github.com/repos/PyGithub/PyGithub/check-runs/34942661139") self.assertEqual(repr(self.check_run), 'CheckRun(id=34942661139, conclusion="success")') + def testLazyAttributes(self): + run = self.g.withLazy(True).get_repo("lazy/repo").get_check_run(42) + self.assertEqual(str(run), "CheckRun(id=42, conclusion=None)") + self.assertEqual(run.id, 42) + self.assertEqual(run.url, "/repos/lazy/repo/check-runs/42") + def testCheckRunOutputAttributes(self): check_run_output = self.repo.get_check_run(1039891917).output self.assertEqual(check_run_output.title, "test (Python 3.6)") diff --git a/tests/CheckSuite.py b/tests/CheckSuite.py index b95b434ecf..9fb3cf15ee 100644 --- a/tests/CheckSuite.py +++ b/tests/CheckSuite.py @@ -73,6 +73,12 @@ def testAttributes(self): "https://api.github.com/repos/wrecker/PySample/check-suites/1004503837", ) + def testLazyAttributes(self): + suite = self.g.withLazy(True).get_repo("lazy/repo").get_check_suite(42) + self.assertEqual(str(suite), 'CheckSuite(url="/repos/lazy/repo/check-suites/42", id=42)') + self.assertEqual(suite.id, 42) + self.assertEqual(suite.url, "/repos/lazy/repo/check-suites/42") + def testGetCheckSuitesForRef(self): check_suites = self.commit.get_check_suites() self.assertEqual(check_suites.totalCount, 6) diff --git a/tests/CodeScanAlert.py b/tests/CodeScanAlert.py new file mode 100644 index 0000000000..9b2e242a75 --- /dev/null +++ b/tests/CodeScanAlert.py @@ -0,0 +1,163 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from datetime import datetime, timezone + +import github.CodeScanAlert +import github.PaginatedList + +from . import Framework + + +class CodeScanAlert(Framework.TestCase): + alert: github.CodeScanAlert.CodeScanAlert + + def setUp(self): + super().setUp() + self.repo = self.g.get_repo("matt-davis27/PyGithub") + + def testAttributes(self): + alert = self.repo.get_codescan_alert(1) + self.assertEqual(alert.number, 1) + self.assertEqual(alert.created_at, datetime(2025, 8, 22, 23, 38, 23, tzinfo=timezone.utc)) + self.assertEqual(alert.updated_at, datetime(2025, 8, 25, 16, 3, 10, tzinfo=timezone.utc)) + self.assertEqual(alert.url, "https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1") + self.assertEqual(alert.html_url, "https://github.com/matt-davis27/PyGithub/security/code-scanning/1") + self.assertEqual(alert.state, "fixed") + self.assertEqual(alert.fixed_at, datetime(2025, 8, 25, 16, 3, 9, tzinfo=timezone.utc)) + self.assertIsNone(alert.dismissed_by) + self.assertIsNone(alert.dismissed_at) + self.assertIsNone(alert.dismissed_reason) + self.assertIsNone(alert.dismissed_comment) + self.assertEqual(alert.rule.id, "actions/missing-workflow-permissions") + self.assertEqual(alert.rule.severity, "warning") + self.assertEqual(alert.rule.description, "Workflow does not contain permissions") + self.assertEqual(alert.rule.name, "actions/missing-workflow-permissions") + self.assertEqual(alert.rule.tags[0], "actions") + self.assertEqual(alert.rule.tags[1], "external/cwe/cwe-275") + self.assertEqual(alert.rule.tags[2], "maintainability") + self.assertEqual(alert.rule.tags[3], "security") + self.assertEqual( + alert.rule.full_description, + "Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.", + ) + self.assertTrue(alert.rule.help.startswith("## Overview")) + self.assertEqual(alert.rule.security_severity_level, "medium") + self.assertEqual(alert.tool.name, "CodeQL") + self.assertIsNone(alert.tool.guid) + self.assertEqual(alert.tool.version, "2.22.4") + self.assertEqual(alert.most_recent_instance.ref, "refs/heads/main") + self.assertEqual(alert.most_recent_instance.analysis_key, ".github/workflows/codeql.yml:analyze") + self.assertEqual(alert.most_recent_instance.environment, '{"build-mode":"none","language":"actions"}') + self.assertEqual(alert.most_recent_instance.category, "/language:actions") + self.assertEqual(alert.most_recent_instance.state, "fixed") + self.assertEqual(alert.most_recent_instance.commit_sha, "908396804d41cdb1d0c0538b97f25a81383ee61b") + self.assertEqual( + alert.most_recent_instance.message["text"], + "Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}", + ) + self.assertEqual(alert.most_recent_instance.location.path, ".github/workflows/lint.yml") + self.assertEqual(alert.most_recent_instance.location.start_line, 12) + self.assertEqual(alert.most_recent_instance.location.end_line, 29) + self.assertEqual(alert.most_recent_instance.location.start_column, 5) + self.assertEqual(alert.most_recent_instance.location.end_column, 3) + self.assertEqual(len(alert.most_recent_instance.classifications), 0) + self.assertEqual( + alert.instances_url, "https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1/instances" + ) + self.assertIsNone(alert.dismissal_approved_by) + + def testMultipleAlerts(self): + multiple_alerts = self.repo.get_codescan_alerts() + self.assertIsInstance(multiple_alerts, github.PaginatedList.PaginatedList) + self.assertIsInstance(multiple_alerts[0], github.CodeScanAlert.CodeScanAlert) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 14) # Update this when more alerts are added to the PyGithub repo + + test_alert = alert_list[ + -1 + ] # Alerts are returned in descending order, so the first alert is the most recent and the last alert is the oldest + # Everything below is the same as testAttributes. This is just to make sure the list works. + self.assertEqual(test_alert.number, 1) + self.assertEqual(test_alert.created_at, datetime(2025, 8, 22, 23, 38, 23, tzinfo=timezone.utc)) + self.assertEqual(test_alert.updated_at, datetime(2025, 8, 25, 16, 3, 10, tzinfo=timezone.utc)) + self.assertEqual(test_alert.url, "https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1") + self.assertEqual(test_alert.html_url, "https://github.com/matt-davis27/PyGithub/security/code-scanning/1") + self.assertEqual(test_alert.state, "fixed") + self.assertEqual(test_alert.fixed_at, datetime(2025, 8, 25, 16, 3, 9, tzinfo=timezone.utc)) + self.assertIsNone(test_alert.dismissed_by) + self.assertIsNone(test_alert.dismissed_at) + self.assertIsNone(test_alert.dismissed_reason) + self.assertIsNone(test_alert.dismissed_comment) + self.assertEqual(test_alert.rule.id, "actions/missing-workflow-permissions") + self.assertEqual(test_alert.rule.severity, "warning") + self.assertEqual(test_alert.rule.description, "Workflow does not contain permissions") + self.assertEqual(test_alert.rule.name, "actions/missing-workflow-permissions") + self.assertEqual(test_alert.rule.tags[0], "actions") + self.assertEqual(test_alert.rule.tags[1], "external/cwe/cwe-275") + self.assertEqual(test_alert.rule.tags[2], "maintainability") + self.assertEqual(test_alert.rule.tags[3], "security") + self.assertEqual( + test_alert.rule.full_description, + "Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.", + ) + self.assertTrue(test_alert.rule.help.startswith("## Overview")) + self.assertEqual(test_alert.rule.security_severity_level, "medium") + self.assertEqual(test_alert.tool.name, "CodeQL") + self.assertIsNone(test_alert.tool.guid) + self.assertEqual(test_alert.tool.version, "2.22.4") + self.assertEqual(test_alert.most_recent_instance.ref, "refs/heads/main") + self.assertEqual(test_alert.most_recent_instance.analysis_key, ".github/workflows/codeql.yml:analyze") + self.assertEqual(test_alert.most_recent_instance.environment, '{"build-mode":"none","language":"actions"}') + self.assertEqual(test_alert.most_recent_instance.category, "/language:actions") + self.assertEqual(test_alert.most_recent_instance.state, "fixed") + self.assertEqual(test_alert.most_recent_instance.commit_sha, "908396804d41cdb1d0c0538b97f25a81383ee61b") + self.assertEqual( + test_alert.most_recent_instance.message["text"], + "Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}", + ) + self.assertEqual(test_alert.most_recent_instance.location.path, ".github/workflows/lint.yml") + self.assertEqual(test_alert.most_recent_instance.location.start_line, 12) + self.assertEqual(test_alert.most_recent_instance.location.end_line, 29) + self.assertEqual(test_alert.most_recent_instance.location.start_column, 5) + self.assertEqual(test_alert.most_recent_instance.location.end_column, 3) + self.assertEqual(len(test_alert.most_recent_instance.classifications), 0) + self.assertEqual( + test_alert.instances_url, + "https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1/instances", + ) + self.assertIsNone(test_alert.dismissal_approved_by) + + def testRepr(self): + alert = self.repo.get_codescan_alert(1) + self.assertEqual(repr(alert), 'CodeScanAlert(number=1, id="actions/missing-workflow-permissions")') + + def testGetAlertsWithArguments(self): + alerts = self.repo.get_codescan_alerts( + tool_name="CodeQL", ref="refs/heads/main", sort="created", direction="asc", state="fixed", severity="medium" + ) + # Note, this doesn't test "tool_guid" or "pr" arguments as they are not found in the PyGithub repo test data + self.assertEqual( + len(list(alerts)), 10 + ) # Update this when more alerts are added to the PyGithub repo and marked as fixed diff --git a/tests/Commit.py b/tests/Commit.py index 80d8f39146..633f57fe0d 100644 --- a/tests/Commit.py +++ b/tests/Commit.py @@ -98,6 +98,13 @@ def testAttributes(self): self.assertEqual(self.commit.commit.tree.sha, "4c6bd50994f0f9823f898b1c6c964ad7d4fa11ab") self.assertEqual(repr(self.commit), 'Commit(sha="1292bf0e22c796e91cc3d6e24b544aece8c21f2a")') + def testLazyAttributes(self): + commit = self.g.withLazy(True).get_repo("lazy/repo").get_commit("sha") + self.assertEqual(str(commit), 'Commit(sha="sha")') + self.assertEqual(commit._identity, "sha") + self.assertEqual(commit.sha, "sha") + self.assertEqual(commit.url, "/repos/lazy/repo/commits/sha") + def testGetBranchesWhereHead(self): repo = self.g.get_repo("PyGithub/PyGithub") commit = repo.get_commit("0791cc7b1a706ab5d7c607ddff35de4d486ba3e9") diff --git a/tests/CommitCombinedStatus.py b/tests/CommitCombinedStatus.py index ec6ae5fd57..acd6169476 100644 --- a/tests/CommitCombinedStatus.py +++ b/tests/CommitCombinedStatus.py @@ -16,6 +16,7 @@ # Copyright 2020 Steve Kowalik # # Copyright 2023 Enrico Minack # # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -35,6 +36,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from . import Framework diff --git a/tests/CommitComment.py b/tests/CommitComment.py index 5e58821a7f..b9f286f2f2 100644 --- a/tests/CommitComment.py +++ b/tests/CommitComment.py @@ -81,6 +81,12 @@ def testAttributes(self): self.assertEqual(self.comment.user.login, "jacquev6") self.assertEqual(repr(self.comment), 'CommitComment(user=NamedUser(login="jacquev6"), id=1362000)') + def testLazyAttributes(self): + comment = self.g.withLazy(True).get_repo("lazy/repo").get_comment(42) + self.assertEqual(str(comment), "CommitComment(user=None, id=42)") + self.assertEqual(comment.id, 42) + self.assertEqual(comment.url, "/repos/lazy/repo/comments/42") + def testEdit(self): self.comment.edit("Comment edited by PyGithub") diff --git a/tests/CommitStatus.py b/tests/CommitStatus.py index ec85dc10fa..d082f7bc32 100644 --- a/tests/CommitStatus.py +++ b/tests/CommitStatus.py @@ -62,6 +62,7 @@ def testAttributes(self): self.assertEqual(self.status.description, "Status successfully created by PyGithub") self.assertEqual(self.status.id, 277040) self.assertIsNone(self.status.node_id) + self.assertIsNone(self.status.required) self.assertEqual(self.status.state, "success") self.assertEqual(self.status.target_url, "https://github.com/jacquev6/PyGithub/issues/67") self.assertEqual( diff --git a/tests/Connection.py b/tests/Connection.py index 3398941191..b25ff64961 100644 --- a/tests/Connection.py +++ b/tests/Connection.py @@ -9,6 +9,7 @@ # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # # Copyright 2025 Maja Massarini <2678400+majamassarini@users.noreply.github.com># +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -91,7 +92,8 @@ def testRecordAndReplay(replaying_connection_class, protocol, response_body, exp connection.getresponse.return_value = response # write mock response to buffer - RecordingMockConnection.setOpenFile(lambda slf, mode: file) + rdf = Framework.ReplayDataFile("string", file) + RecordingMockConnection.setOpenFile(lambda mode: rdf) recording_connection = RecordingMockConnection(protocol, host, None, lambda *args, **kwds: connection) recording_connection.request(verb, url, None, headers) recording_connection.getresponse() @@ -107,7 +109,8 @@ def testRecordAndReplay(replaying_connection_class, protocol, response_body, exp # rewind buffer and attempt to replay response from it file.seek(0) - replaying_connection_class.setOpenFile(lambda slf, mode: file) + rdf = Framework.ReplayDataFile("string", file) + replaying_connection_class.setOpenFile(lambda mode: rdf) replaying_connection = replaying_connection_class(host=host, port=None) replaying_connection.request(verb, url, None, headers) replaying_connection.getresponse() diff --git a/tests/Deployment.py b/tests/Deployment.py index 53d64bb3c4..5edd199a87 100644 --- a/tests/Deployment.py +++ b/tests/Deployment.py @@ -97,3 +97,9 @@ def testAttributes(self): repr(self.deployment), 'Deployment(url="https://api.github.com/repos/jacquev6/PyGithub/deployments/263877258", id=263877258)', ) + + def testLazyAttributes(self): + deploy = self.g.withLazy(True).get_repo("lazy/repo").get_deployment(42) + self.assertEqual(str(deploy), 'Deployment(url="/repos/lazy/repo/deployments/42", id=42)') + self.assertEqual(deploy.id, 42) + self.assertEqual(deploy.url, "/repos/lazy/repo/deployments/42") diff --git a/tests/Download.py b/tests/Download.py index 0d1b699744..c67fda30de 100644 --- a/tests/Download.py +++ b/tests/Download.py @@ -12,6 +12,7 @@ # Copyright 2019 Wan Liuyang # # Copyright 2020 Steve Kowalik # # Copyright 2023 Enrico Minack # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -73,5 +74,11 @@ def testAttributes(self): ) self.assertEqual(repr(self.download), "Download(id=242550)") + def testLazyAttributes(self): + download = self.g.withLazy(True).get_repo("lazy/repo").get_download(42) + self.assertEqual(str(download), "Download(id=42)") + self.assertEqual(download.id, 42) + self.assertEqual(download.url, "/repos/lazy/repo/downloads/42") + def testDelete(self): self.download.delete() diff --git a/tests/EnterpriseAdmin.py b/tests/EnterpriseAdmin.py index f2ffdc7bd9..24503a82c4 100644 --- a/tests/EnterpriseAdmin.py +++ b/tests/EnterpriseAdmin.py @@ -3,6 +3,7 @@ # Copyright 2023 Enrico Minack # # Copyright 2023 YugoHino # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -42,7 +43,7 @@ def testGetConsumedLicenses(self): self.assertEqual(consumed_licenses.total_seats_purchased, 103) def testGetEnterpriseUsers(self): - enterprise_users = self.enterprise.get_consumed_licenses().get_users() + enterprise_users = self.enterprise.get_consumed_licenses().users enterprise_users_list = [ [ users.github_com_login, @@ -68,3 +69,11 @@ def testGetEnterpriseUsers(self): ] self.assertEqual(len(enterprise_users_list), 102) self.assertEqual(enterprise_users_list[42][0], "beaver-user043") + + def testGetEnterpriseGetUsers(self): + enterprise_users = self.enterprise.get_consumed_licenses(licence_users_per_page=1).get_users( + licence_users_per_page=100 + ) + enterprise_users_list = list(enterprise_users) + self.assertEqual(len(enterprise_users_list), 102) + self.assertEqual(enterprise_users_list[42].github_com_login, "beaver-user043") diff --git a/tests/Environment.py b/tests/Environment.py index f007323147..5e919ff031 100644 --- a/tests/Environment.py +++ b/tests/Environment.py @@ -27,6 +27,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from unittest import mock @@ -52,6 +54,7 @@ def testAttributes(self): self.assertEqual(self.environment.name, "dev") self.assertEqual(self.environment.id, 464814513) self.assertEqual(self.environment.node_id, "EN_kwDOHKhL9c4btIGx") + self.assertListKeyEqual(self.environment.protection_rules, lambda r: r.id, [216323, 216324, 216325]) self.assertEqual( self.environment.url, "https://api.github.com/repos/alson/PyGithub/environments/dev", @@ -71,6 +74,12 @@ def testAttributes(self): self.assertTrue(self.environment.deployment_branch_policy.protected_branches) self.assertFalse(self.environment.deployment_branch_policy.custom_branch_policies) + def testLazyAttributes(self): + env = self.g.withLazy(True).get_repo("lazy/repo").get_environment("the env") + self.assertEqual(str(env), 'Environment(name="the env")') + self.assertEqual(env.name, "the env") + self.assertEqual(env.url, "/repos/lazy/repo/environments/the%20env") + def testProtectionRules(self): protection_rules = self.environment.protection_rules self.assertEqual(len(protection_rules), 3) diff --git a/tests/Framework.py b/tests/Framework.py index 8670ea42b8..9672b32718 100644 --- a/tests/Framework.py +++ b/tests/Framework.py @@ -38,6 +38,7 @@ # Copyright 2025 Maja Massarini <2678400+majamassarini@users.noreply.github.com># # Copyright 2025 Matej Focko # # Copyright 2025 Neel Malik <41765022+neel-m@users.noreply.github.com> # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -61,13 +62,15 @@ import base64 import contextlib -import io import json import os import traceback import unittest import warnings +from collections.abc import Generator +from dataclasses import dataclass from io import BytesIO +from typing import Any, Callable import responses from requests.structures import CaseInsensitiveDict @@ -95,13 +98,6 @@ """ -def readLine(file_): - line = file_.readline() - if isinstance(line, bytes): - line = line.decode("utf-8") - return line.strip() - - class FakeHttpResponse: def __init__(self, status, headers, output): self.status = status @@ -137,17 +133,76 @@ def fixAuthorizationHeader(headers): headers["Authorization"] = "Bearer jwt_removed" -class RecordingConnection: - __openFile = None +@dataclass +class Request: + protocol: str + verb: str + host: str + port: int | None + url: str + request_headers: dict[str, Any] + input: Any + + def with_response(self, status: int, response_headers: dict[str, Any], output: bytes) -> RequestResponse: + return RequestResponse( + self.protocol, + self.verb, + self.host, + self.port, + self.url, + self.request_headers, + self.input, + status, + response_headers, + output, + ) - @staticmethod - def setOpenFile(func): - RecordingConnection.__openFile = func +@dataclass +class RequestResponse(Request): + protocol: str + verb: str + host: str + port: int | None + url: str + request_headers: dict[str, Any] + input: Any + status: int + response_headers: dict[str, Any] + output: bytes + + +class Connection: + __openFile: Callable[[str], ReplayDataFile] | None = None + __requests: list[RequestResponse] = [] + + @classmethod + def setOpenFile(cls, func: Callable[[str], ReplayDataFile]): + cls.__openFile = func + + @classmethod + def openFile(cls, mode: str): + assert cls.__openFile is not None + return cls.__openFile(mode) + + @classmethod + def resetRequests(cls, requests: list[RequestResponse]) -> list[RequestResponse]: + try: + return cls.__requests + finally: + cls.__requests = requests + + @classmethod + def addRequest(cls, request: RequestResponse): + cls.__requests.append(request) + + +class RecordingConnection(Connection): def __init__(self, protocol, host, port, *args, **kwds): - self.__file = self.__openFile("w") + self.__file = self.openFile("w") # write operations make the assumption that the file is not in binary mode - assert isinstance(self.__file, io.TextIOBase) + assert isinstance(self.__file, ReplayDataFile) + self.__request = None self.__protocol = protocol self.__host = host self.__port = port @@ -170,6 +225,7 @@ def request(self, verb, url, input, headers, stream=False): # Since it's dict[str, str], a simple copy is enough. anonymous_headers = headers.copy() fixAuthorizationHeader(anonymous_headers) + self.__request = Request(self.__protocol, verb, self.__host, self.__port, url, anonymous_headers, input) self.__writeLine(self.__protocol) self.__writeLine(verb) self.__writeLine(self.__host) @@ -197,6 +253,9 @@ def getresponse(self): self.__writeLine(output) self.__writeLine("") + self.addRequest(self.__request.with_response(status, dict(headers), output)) + self.__request = None + return FakeHttpResponse(status, headers, output) def close(self): @@ -220,15 +279,9 @@ def __init__(self, *args, **kwds): super().__init__("https", *args, **kwds) -class ReplayingConnection: - __openFile = None - - @staticmethod - def setOpenFile(func): - ReplayingConnection.__openFile = func - +class ReplayingConnection(Connection): def __init__(self, protocol, host, port, *args, **kwds): - self.__file = self.__openFile("r") + self.__file = self.openFile("r") self.__protocol = protocol self.__host = host self.__port = port @@ -262,26 +315,32 @@ def request( self.__stream = stream self.__cnx.request(verb, url, input, headers, stream=stream) - def __readNextRequest(self, verb, url, input, headers): + def __replayDataMismatchLine(self) -> str: + return f"Replay data mismatch in {self.__file}" + + def __readNextRequest(self, verb, url, input, headers) -> Request: fixAuthorizationHeader(headers) - assert self.__protocol == readLine(self.__file) - assert verb == readLine(self.__file) - assert self.__host == readLine(self.__file) - assert str(self.__port) == readLine(self.__file) - assert self.__splitUrl(url) == self.__splitUrl(readLine(self.__file)) - assert headers == eval(readLine(self.__file)) - expectedInput = readLine(self.__file) + request = Request(self.__protocol, verb, self.__host, self.__port, url, headers, input) + assert request.protocol == self.__file.readline(), self.__replayDataMismatchLine() + assert request.verb == self.__file.readline(), self.__replayDataMismatchLine() + assert request.host == self.__file.readline(), self.__replayDataMismatchLine() + assert str(request.port) == self.__file.readline(), self.__replayDataMismatchLine() + assert self.__splitUrl(request.url) == self.__splitUrl(self.__file.readline()), self.__replayDataMismatchLine() + assert request.request_headers == eval(self.__file.readline()), self.__replayDataMismatchLine() + expectedInput = self.__file.readline() if isinstance(input, str): trInput = input.replace("\n", "").replace("\r", "") if input.startswith("{"): - assert expectedInput.startswith("{"), expectedInput - assert json.loads(trInput) == json.loads(expectedInput) + assert expectedInput.startswith("{"), self.__replayDataMismatchLine() + assert json.loads(trInput) == json.loads(expectedInput), self.__replayDataMismatchLine() else: - assert trInput == expectedInput + assert trInput == expectedInput, self.__replayDataMismatchLine() else: # for non-string input (e.g. upload asset), let it pass. pass + return request + def __splitUrl(self, url): splitedUrl = url.split("?") if len(splitedUrl) == 1: @@ -291,21 +350,21 @@ def __splitUrl(self, url): return (base, sorted(qs.split("&"))) def __request_callback(self, request, uri, response_headers): - self.__readNextRequest(self.__cnx.verb, self.__cnx.url, self.__cnx.input, self.__cnx.headers) + request = self.__readNextRequest(self.__cnx.verb, self.__cnx.url, self.__cnx.input, self.__cnx.headers) - status = int(readLine(self.__file)) - self.response_headers = CaseInsensitiveDict(eval(readLine(self.__file))) + status = int(self.__file.readline()) + self.response_headers = CaseInsensitiveDict(eval(self.__file.readline())) if self.__stream: output = BytesIO() while True: - line = readLine(self.__file) + line = self.__file.readline() if not line: break output.write(base64.b64decode(line)) output = output.getvalue() else: - output = bytearray(readLine(self.__file), "utf-8") - readLine(self.__file) + output = bytearray(self.__file.readline(), "utf-8") + self.__file.readline() # make a copy of the headers and remove the ones that interfere with the response handling adding_headers = CaseInsensitiveDict(self.response_headers) @@ -314,6 +373,7 @@ def __request_callback(self, request, uri, response_headers): adding_headers.pop("content-encoding", None) response_headers.update(adding_headers) + self.addRequest(request.with_response(status, response_headers, output)) return [status, response_headers, output] @@ -343,6 +403,38 @@ def __init__(self, *args, **kwds): super().__init__("https", *args, **kwds) +class ReplayDataFile: + @staticmethod + def open(filename: str, mode: str, encoding: str) -> ReplayDataFile: + file = open(filename, mode, encoding=encoding) + return ReplayDataFile(filename, file) + + def __init__(self, filename: str, file): + self.__filename = filename + self.__file = file + self.__line = 0 + + def __repr__(self) -> str: + return f"{self.__filename}:{self.__line}" + + def write(self, string: str): + self.__file.write(string) + + def readline(self) -> str: + self.__line += 1 + line = self.__file.readline() + if isinstance(line, bytes): + line = line.decode("utf-8") + return line.strip() + + @property + def line_number(self): + return self.__line + + def close(self): + self.__file.close() + + class BasicTestCase(unittest.TestCase): recordMode = False replayDataFolder = os.path.join(os.path.dirname(__file__), "ReplayData") @@ -364,7 +456,8 @@ def setUp(self): if ( self.recordMode ): # pragma no cover (Branch useful only when recording new tests, not used during automated tests) - RecordingConnection.setOpenFile(self.__openFile) + RecordingHttpConnection.setOpenFile(self.__openFile) + RecordingHttpsConnection.setOpenFile(self.__openFile) github.Requester.Requester.injectConnectionClasses( RecordingHttpConnection, RecordingHttpsConnection, @@ -381,7 +474,8 @@ def setUp(self): else None ) else: - ReplayingConnection.setOpenFile(self.__openFile) + ReplayingHttpConnection.setOpenFile(self.__openFile) + ReplayingHttpsConnection.setOpenFile(self.__openFile) github.Requester.Requester.injectConnectionClasses( ReplayingHttpConnection, ReplayingHttpsConnection, @@ -449,6 +543,16 @@ def replayData(self, filename: str): finally: self.__customFilename = previous + @contextlib.contextmanager + def captureRequests(self) -> Generator[list[RequestResponse]]: + requests: list[RequestResponse] = [] + earlier_requests = Connection.resetRequests(requests) + try: + yield requests + finally: + earlier_requests.extend(requests) + Connection.resetRequests(earlier_requests) + def __openFile(self, mode): fileName = None if self.__customFilename: @@ -463,7 +567,7 @@ def __openFile(self, mode): if fileName != self.__fileName: self.__closeReplayFileIfNeeded() self.__fileName = fileName - self.__file = open(self.__fileName, mode, encoding="utf-8") + self.__file = ReplayDataFile.open(self.__fileName, mode, encoding="utf-8") return self.__file def __closeReplayFileIfNeeded(self, silent=False): @@ -471,7 +575,7 @@ def __closeReplayFileIfNeeded(self, silent=False): if ( not self.recordMode and not silent ): # pragma no branch (Branch useful only when recording new tests, not used during automated tests) - self.assertEqual(readLine(self.__file), "", self.__fileName) + self.assertEqual(self.__file.readline(), "", self.__file) self.__file.close() def assertListKeyEqual(self, elements, key, expectedKeys): diff --git a/tests/Gist.py b/tests/Gist.py index 9603c8f646..6c6efd4a63 100644 --- a/tests/Gist.py +++ b/tests/Gist.py @@ -104,6 +104,12 @@ def testAttributes(self): self.assertEqual(repr(gist), 'Gist(id="6296732")') self.assertEqual(repr(gist.files["GithubAPI.lua"]), 'GistFile(filename="GithubAPI.lua")') + def testLazyAttributes(self): + gist = self.g.withLazy(True).get_gist("gist") + self.assertEqual(str(gist), 'Gist(id="gist")') + self.assertEqual(gist.id, "gist") + self.assertEqual(gist.url, "/gists/gist") + def testEditWithoutParameters(self): gist = self.g.get_gist("2729810") gist.edit() diff --git a/tests/GistComment.py b/tests/GistComment.py index 42442c05fd..a90fbaee36 100644 --- a/tests/GistComment.py +++ b/tests/GistComment.py @@ -65,6 +65,12 @@ def testAttributes(self): 'GistComment(user=NamedUser(login="jacquev6"), id=323629)', ) + def testLazyAttributes(self): + comment = self.g.withLazy(True).get_gist("lazy").get_comment(42) + self.assertEqual(str(comment), "GistComment(user=None, id=42)") + self.assertEqual(comment.id, 42) + self.assertEqual(comment.url, "/gists/lazy/comments/42") + def testEdit(self): self.comment.edit("Comment edited by PyGithub") self.assertEqual(self.comment.body, "Comment edited by PyGithub") diff --git a/tests/GitBlob.py b/tests/GitBlob.py index 5cad9bdc08..dcf049d3c9 100644 --- a/tests/GitBlob.py +++ b/tests/GitBlob.py @@ -57,6 +57,8 @@ def testAttributes(self): ) self.assertEqual(len(self.blob.content), 1757) self.assertEqual(self.blob.encoding, "base64") + self.assertIsNone(self.blob.highlighted_content) + self.assertIsNone(self.blob.node_id) self.assertEqual(self.blob.sha, "53bce9fa919b4544e67275089b3ec5b44be20667") self.assertEqual( self.blob.url, diff --git a/tests/GitCommitVerification.py b/tests/GitCommitVerification.py index 0092b1e4f9..77c8df1472 100644 --- a/tests/GitCommitVerification.py +++ b/tests/GitCommitVerification.py @@ -31,8 +31,10 @@ class GitCommitVerification(Framework.TestCase): def setUp(self): super().setUp() - self.commit = self.g.get_repo("PyGithub/PyGithub", lazy=True).get_commit( - "801d64a4c5c0fcb63f695e0f6799117e76e5fe67" + self.commit = ( + self.g.get_repo("PyGithub/PyGithub", lazy=True) + .get_commit("801d64a4c5c0fcb63f695e0f6799117e76e5fe67") + .complete() ) def testAttributes(self): diff --git a/tests/GitRef.py b/tests/GitRef.py index fadebf57ec..ca8289bdf5 100644 --- a/tests/GitRef.py +++ b/tests/GitRef.py @@ -64,6 +64,12 @@ def testAttributes(self): 'GitObject(sha="1292bf0e22c796e91cc3d6e24b544aece8c21f2a")', ) + def testLazyAttributes(self): + ref = self.g.withLazy(True).get_repo("lazy/repo").get_git_ref("refs/heads/main") + self.assertEqual(str(ref), 'GitRef(ref="refs/heads/main")') + self.assertEqual(ref.ref, "refs/heads/main") + self.assertEqual(ref.url, "/repos/lazy/repo/git/ref/refs/heads/main") + def testEdit(self): self.ref.edit("04cde900a0775b51f762735637bd30de392a2793") diff --git a/tests/GitRelease.py b/tests/GitRelease.py index bda9cc3685..f492937209 100644 --- a/tests/GitRelease.py +++ b/tests/GitRelease.py @@ -156,6 +156,7 @@ def testAttributes(self): self.assertEqual(release.tag_name, tag) self.assertEqual(release.tarball_url, "https://api.github.com/repos/rickrickston123/RepoTest/tarball/v1.0") self.assertEqual(release.target_commitish, "master") + self.assertIsNone(release.updated_at) self.assertEqual( release.upload_url, f"https://uploads.github.com/repos/{user}/{repo_name}/releases/{release_id}/assets{{?name,label}}", @@ -193,6 +194,17 @@ def testAttributes(self): f'{user}/{repo_name}/releases/assets/{release.raw_data["assets"][0]["id"]}")', ) + def testLazyAttributes(self): + id_release = self.g.withLazy(True).get_repo("lazy/repo").get_release(42) + self.assertEqual(str(id_release), "GitRelease(name=None)") + self.assertEqual(id_release.id, 42) + self.assertEqual(id_release.url, "/repos/lazy/repo/releases/42") + + id_release = self.g.withLazy(True).get_repo("lazy/repo").get_release("v42") + self.assertEqual(str(id_release), "GitRelease(name=None)") + self.assertEqual(id_release.tag_name, "v42") + self.assertEqual(id_release.url, "/repos/lazy/repo/releases/tags/v42") + def testGetRelease(self): release_by_id = self.release release_by_tag = self.repo.get_release(tag) diff --git a/tests/GitReleaseAsset.py b/tests/GitReleaseAsset.py index 823cf91f56..021916faa1 100644 --- a/tests/GitReleaseAsset.py +++ b/tests/GitReleaseAsset.py @@ -65,6 +65,12 @@ def testAttributes(self): self.assertEqual(self.asset.uploader.login, "EnricoMi") self.assertEqual(self.asset.url, "https://api.github.com/repos/EnricoMi/PyGithub/releases/assets/224868540") + def testLazyAttributes(self): + asset = self.g.withLazy(True).get_repo("lazy/repo").get_release_asset(42) + self.assertEqual(str(asset), 'GitReleaseAsset(url="/repos/lazy/repo/releases/assets/42")') + self.assertEqual(asset.id, 42) + self.assertEqual(asset.url, "/repos/lazy/repo/releases/assets/42") + @skipIf(os.name == "nt", "not working on Windows") def testDownloadAssetFile(self): with NamedTemporaryFile(mode="rb") as file: diff --git a/tests/GithubIntegration.py b/tests/GithubIntegration.py index c3df20203f..6db9e039a6 100644 --- a/tests/GithubIntegration.py +++ b/tests/GithubIntegration.py @@ -15,6 +15,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2024 Min RK # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -46,29 +47,78 @@ from . import Framework APP_ID = 243473 + +# openssl genrsa -out jwt-key 4096 PRIVATE_KEY = """ ------BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQC+5ePolLv6VcWLp2f17g6r6vHl+eoLuodOOfUl8JK+MVmvXbPa -xDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQp411o+kiOhzLxfakp/kewf4U -HJnu4M/A2nHmxXVe2lzYnZvZHX5BM4SJo5PGdr0Ue2JtSXoAtYr6qE9maQIDAQAB -AoGAFhOJ7sy8jG+837Clcihso+8QuHLVYTPaD+7d7dxLbBlS8NfaQ9Nr3cGUqm/N -xV9NCjiGa7d/y4w/vrPwGh6UUsA+CvndwDgBd0S3WgIdWvAvHM8wKgNh/GBLLzhT -Bg9BouRUzcT1MjAnkGkWqqCAgN7WrCSUMLt57TNleNWfX90CQQDjvVKTT3pOiavD -3YcLxwkyeGd0VMvKiS4nV0XXJ97cGXs2GpOGXldstDTnF5AnB6PbukdFLHpsx4sW -Hft3LRWnAkEA1pY15ke08wX6DZVXy7zuQ2izTrWSGySn7B41pn55dlKpttjHeutA -3BEQKTFvMhBCphr8qST7Wf1SR9FgO0tFbwJAEhHji2yy96hUyKW7IWQZhrem/cP8 -p4Va9CQolnnDZRNgg1p4eiDiLu3dhLiJ547joXuWTBbLX/Y1Qvv+B+a74QJBAMCW -O3WbMZlS6eK6//rIa4ZwN00SxDg8I8FUM45jwBsjgVGrKQz2ilV3sutlhIiH82kk -m1Iq8LMJGYl/LkDJA10CQBV1C+Xu3ukknr7C4A/4lDCa6Xb27cr1HanY7i89A+Ab -eatdM6f/XVqWp8uPT9RggUV9TjppJobYGT2WrWJMkYw= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQDAqFP8rSi4Wszj +5/Z28mNDqRhG4a8Iikn7hdekA9gENRhxztd6opUe1R4s7ji4HXDpgpgfv8i0QN6Y +ZmaDoFQpFSWc8ks8J93YeTW+LN2qCfPqXcpkyBeJ+bsOb0knXFac46fzDzqVS8WZ +JEpjiCLTsH8frskxKWiTsCmmcZPTIh+saeXdJ5THnwD1KssfiCSf8C5PdT7pCCfb +mjNerHKRA+9/dkohjE9DL1W32EnoqIod9RLUJFUq4R5FTRxHWTmdhgn2izjUlbLC +LuzbI4xepxndRj/VzNgICRMtMN98v5oF2caD0nc6f2QWPJEXSItdfXpDnhAuylpe +hyZT0CbbBLATsr9bRpayrZ6W1jHrk/vSJvEBs9nSqi3cAFw6fNZH71zto53/2tGD +Doo8a29WKmttE0dDhk9ZzDsuNLy7jGmyXa+buybDGh0qy34d4mAZjBoybp37uy0W +ALYIslUzynYLEZR2PX412a5UUGTcBTrncUWcah9rXQPKsRoi9MR3bwjlqYKkb2Z3 +CYCvLLGM6XaWKSILN0yQZxCk+Ix7FTiHF3gVnxNV3DBOyO20S+1r6/hCs36ewEYo +eqy1oUrMFxvB/Zzdfnn9Oc/qQNx2mpBKmmoLHAbpQe2vE5lukzSsiF7KOCw4bSwm +TOEmixE9PvX4N4vtXXwSlGjE1T6/iwIDAQABAoICACoTWSxhAPiqU/8eRPSbYVSA +lJ2+YkTCNwAorfzTHhVlJy6L1wGgimLOdqWnbVnAjE1jSSf98a50UGkGTDNJC7hh +NvK88/NyXYAOkM8060Bcphm0XCSAkqt+j/zKDzb6cqwXCDIMTGYYw1H73Ac6zyhe +bpUTzjrfaUh/+8ivG3LMDBDSm/Id1990+XeR3gTH7f/EK8kMuS2Zq2LJnZh6nxbO +vjqfMfd7tj/dEaJyKUoXrPp38KHGQZd4zOyjt55ZfTzK7lga9dFv1DeWmgIOFHUD +l6F82yotb6zplneTKewLyG6orjNR/toWwlwc5C8ql81WPyKPXcdqSCxG5fb+Cc3/ +tzpfsX3i3YnaM3+FJurgh7PX7W6emwOoGFoGvcf50q8XQZgy23SKD3JunS/xwqxR +LFNM+MwJ98y6Vw27jjK8yjUckT3UPrfCTU61DCK6Pw6nWchl4hdTM3LFdOsguu0g +tSA9Ft6bwQJ3Ao8UeWpXv62eAy25wavjKymyJEqGBdXnG0LnQcJqCdEsFKRxk6Ag +E+CM8oGMAVhkj2cXP/27kvftpM4e20jPcrUbgJ6vV98A5wkwwq6mGw7eU/UvlZmC +Dpv7+oFCofqZlgXPixswUBED6P/PtIT28U199uk5+7M8VHY5DyGBy9P5nnk9kPUM +CZLkWV0L0HMf2m7OmcYRAoIBAQD88z5Dq13zixEnaHBPfYm/Mip+Z7hCYJq7xbzv +13TeHUPhM5NF/cLZ+b5QCZ/AH6HXWPAq6R3qKqze/R87R5b7c9NakRepGZZPdIPi +eB9uobjCDDkU6IhwXONEVRmh2zO/6KIT+YZT7gW/AJgT1FgvMXmegpZaDGRkoAOH +hhn6yv0VZYGVZTQMKU7UFph7DbvwL307jjtWOY4CxvY7R+qWq+TOpEFUY3GYkrwa +3Vs0usIG2g3d8TMOBDPBx60ZG7+YK7GqCa8I5ZbCvOd3KakU3tPqabWpcinutCrG +5n4Zvpy8VjGrXaeMX5ibVxdgcN969F/sG36riBuAeFkM0r3zAoIBAQDC+vxD9S4F +ac4QjV3oMUdH1kH75bF3dDSskZ1D7Q0roijGqNpd2MSxpQSBjeQkVXHBk8tHMly4 +bHTxCcJOCnv+EKXji1ytXL+9x6FOPf+gMZ5Kl6C//Tj2F5TAf3jvR4v3+3sEBjjJ +Nu8EbaF/JQY9IWO0l5DXFTvKPk9AFDFtuamfms44xORhhIkiQxH8a1slq5rDtKQ/ +Gh7r3brasEX0NS5a/IGBFqttfrEr6dq1vvQ29n+Hcn7EM88HpixdkM+nhMQRkUNv +2hjiV6ZO15S1lkDek2VoM4syj3NSN+9eD7cMBEH0kv73fXv6gWeuzJrYi8Omvegj +BLUXc+NUzCYJAoIBAAMgVoKrmYurClk8VzcETDGKwy+wxHw9iWwMs5sbRJyCLBaa +dpWE32WmSo3esJTFT1DEDqPZIb+FK4HOCxbGeb093zzdUjeK02rD++VOqsTJRulP +EV2KyjTpUP3FN33ioa8bhvVMPjbHWFbWAQstsrFSoTguUQFn6c28lI6WP7fzzlD3 +YjSgfZYw5IKGjPfoYYxEaf3UcjNMns61+tEcwG+ATGGpcg1C9WJ3Xc/PMJNkQ4Wm +KEm383OW5bTdbOxEhYex8o4xdHJdtBFQGGRGpYpWfrQE/nPLr2z92RGAQ8q5qmJB +hnehvrJjdBVnbCiK/JgecRkP9e7UzdI2qpMX/7UCggEAJjirIOs8FUWTZn0/zldy +oKtojeeN7VuzQ6zbxkf+z/HeymqpO8JVdHljs73L3i99uDOvoopF0MU5+1Ita7z0 +Z25+Bmf4R+epkptCjKLsrEttuzOUCG6sLtmaiE20uDsvPfJnP/e0RAVnv1d6VAE/ +Ata7w9f+RZtc+B1UzbvnoJnHnYjsKga2ukMP2s6JBRFKccz87qZHmDMXoqb5jQsG ++4M9Tgq3nEWEX1d5haE3BW+kUe3qO/P+05lQWTCC++h6PF1zTfpK3O9E94G1ETmD +ZkFJABimxVFtVQD320MpwieUe1+OSlJSdtN7bTTWzVZAeHiVZudNTSgME8fc5W+L +eQKCAQBqhlauG4WJm47nh21ZbErukpNKRR4dwYU3iPM6TMZtc5N1AV4T23uOhjQN +xQSLbpIorRZR33dOOBeroSj2oOFAx/UzgoaYUj5qqqcFfQh8QdIi98lb/25qXL49 +WQlihvh8yDFc+t/HOZPn6orl0p1tcBao+uS9CCWfURv2l0KyS+JeGySQC0amxyEl +ZAQqOpkSzdk6j8MlHnebI3W9AcUkl0LY+OKU3u0iFENmLl/y/SnDWGEfJYAQuR74 +VJxIu9b4GbDLqSIlg2Wk4qgxDwU1GI9Bzk1UPAy0/Qwl495oLpZ5gM71uJXRS4tZ +3i4Fanvj0vm8BvdFVxkxZoSNiMAX +-----END PRIVATE KEY----- """ + +# openssl rsa -in jwt-key -pubout PUBLIC_KEY = """ -----BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+5ePolLv6VcWLp2f17g6r6vHl -+eoLuodOOfUl8JK+MVmvXbPaxDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQ -p411o+kiOhzLxfakp/kewf4UHJnu4M/A2nHmxXVe2lzYnZvZHX5BM4SJo5PGdr0U -e2JtSXoAtYr6qE9maQIDAQAB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwKhT/K0ouFrM4+f2dvJj +Q6kYRuGvCIpJ+4XXpAPYBDUYcc7XeqKVHtUeLO44uB1w6YKYH7/ItEDemGZmg6BU +KRUlnPJLPCfd2Hk1vizdqgnz6l3KZMgXifm7Dm9JJ1xWnOOn8w86lUvFmSRKY4gi +07B/H67JMSlok7AppnGT0yIfrGnl3SeUx58A9SrLH4gkn/AuT3U+6Qgn25ozXqxy +kQPvf3ZKIYxPQy9Vt9hJ6KiKHfUS1CRVKuEeRU0cR1k5nYYJ9os41JWywi7s2yOM +XqcZ3UY/1czYCAkTLTDffL+aBdnGg9J3On9kFjyRF0iLXX16Q54QLspaXocmU9Am +2wSwE7K/W0aWsq2eltYx65P70ibxAbPZ0qot3ABcOnzWR+9c7aOd/9rRgw6KPGtv +ViprbRNHQ4ZPWcw7LjS8u4xpsl2vm7smwxodKst+HeJgGYwaMm6d+7stFgC2CLJV +M8p2CxGUdj1+NdmuVFBk3AU653FFnGofa10DyrEaIvTEd28I5amCpG9mdwmAryyx +jOl2likiCzdMkGcQpPiMexU4hxd4FZ8TVdwwTsjttEvta+v4QrN+nsBGKHqstaFK +zBcbwf2c3X55/TnP6kDcdpqQSppqCxwG6UHtrxOZbpM0rIheyjgsOG0sJkzhJosR +PT71+DeL7V18EpRoxNU+v4sCAwEAAQ== -----END PUBLIC KEY----- """ @@ -162,7 +212,9 @@ def testGetGithubForInstallation(self): def testGetAccessToken(self): auth = github.Auth.AppAuth(APP_ID, PRIVATE_KEY) - github_integration = github.GithubIntegration(auth=auth) + github_integration = github.GithubIntegration( + auth=auth, seconds_between_writes=None, seconds_between_requests=None + ) # Get repo installation access token repo_installation_authorization = github_integration.get_access_token(self.repo_installation_id) diff --git a/tests/GithubObject.py b/tests/GithubObject.py index 68d6d08754..003692626d 100644 --- a/tests/GithubObject.py +++ b/tests/GithubObject.py @@ -5,6 +5,8 @@ # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2023 Nicolas Schweitzer # # Copyright 2024 Enrico Minack # +# Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -24,8 +26,12 @@ # # ################################################################################ +from __future__ import annotations + import unittest from datetime import datetime, timedelta, timezone +from typing import Any +from unittest import mock import github.Repository import github.RepositoryDiscussion @@ -33,6 +39,8 @@ from . import Framework gho = Framework.github.GithubObject +ghusr = Framework.github.NamedUser +ghorg = Framework.github.Organization class GithubObject(unittest.TestCase): @@ -52,6 +60,95 @@ def testApiType(self): self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_rest(), False) self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_graphql(), True) + def testMakeUnionClassAttributeFromTypeName(self): + req = mock.Mock(is_not_lazy=False) + obj = TestingClass(req, {}, {}) + + data = {"login": "login"} + class_and_names = [(ghusr.NamedUser, "User"), (ghorg.Organization, "Organization")] + + def make(type_name: str | None, fallback_type: str | None = "User"): + return obj._makeUnionClassAttributeFromTypeName(type_name, fallback_type, data, *class_and_names) + + none = make(None) + usr = make("User") + org = make("Organization") + unknown = make("Unknown") + bad = make("Unknown", None) + + self.assertIsInstance(none, gho._ValuedAttribute) + self.assertIsInstance(usr, gho._ValuedAttribute) + self.assertIsInstance(org, gho._ValuedAttribute) + self.assertIsInstance(unknown, gho._ValuedAttribute) + self.assertIsInstance(bad, gho._BadAttribute) + + self.assertIsNone(none.value) + self.assertIsInstance(usr.value, ghusr.NamedUser) + self.assertIsInstance(org.value, ghorg.Organization) + self.assertIsInstance(unknown.value, ghusr.NamedUser) + + self.assertEqual(str(usr.value), 'NamedUser(login="login")') + self.assertEqual(str(org.value), 'Organization(login="login")') + self.assertEqual(str(unknown.value), 'NamedUser(login="login")') + + def testMakeUnionClassAttributeFromTypeKey(self): + req = mock.Mock(is_not_lazy=False) + obj = TestingClass(req, {}, {}) + + class_and_names = [(ghusr.NamedUser, "User"), (ghorg.Organization, "Organization")] + + def make(data: dict[str, Any]): + return obj._makeUnionClassAttributeFromTypeKey("type", "User", data, *class_and_names) + + default = make({"login": "login"}) + usr = make({"login": "login", "type": "User"}) + org = make({"login": "login", "type": "Organization"}) + unknown = make({"login": "login", "type": "Unknown"}) + + self.assertIsInstance(default, gho._ValuedAttribute) + self.assertIsInstance(usr, gho._ValuedAttribute) + self.assertIsInstance(org, gho._ValuedAttribute) + self.assertIsInstance(unknown, gho._ValuedAttribute) + + self.assertIsInstance(default.value, ghusr.NamedUser) + self.assertIsInstance(usr.value, ghusr.NamedUser) + self.assertIsInstance(org.value, ghorg.Organization) + self.assertIsInstance(unknown.value, ghusr.NamedUser) + + self.assertEqual(str(default.value), 'NamedUser(login="login")') + self.assertEqual(str(usr.value), 'NamedUser(login="login")') + self.assertEqual(str(org.value), 'Organization(login="login")') + self.assertEqual(str(unknown.value), 'NamedUser(login="login")') + + def testMakeUnionClassAttributeFromTypeKeyAndValueKey(self): + req = mock.Mock(is_not_lazy=False) + obj = TestingClass(req, {}, {}) + + class_and_names = [(ghusr.NamedUser, "User"), (ghorg.Organization, "Organization")] + + def make(data: dict[str, Any]): + return obj._makeUnionClassAttributeFromTypeKeyAndValueKey("type", "data", "User", data, *class_and_names) + + default = make({"data": {"login": "login"}}) + usr = make({"data": {"login": "login"}, "type": "User"}) + org = make({"data": {"login": "login"}, "type": "Organization"}) + unknown = make({"data": {"login": "login"}, "type": "Unknown"}) + + self.assertIsInstance(default, gho._ValuedAttribute) + self.assertIsInstance(usr, gho._ValuedAttribute) + self.assertIsInstance(org, gho._ValuedAttribute) + self.assertIsInstance(unknown, gho._ValuedAttribute) + + self.assertIsInstance(default.value, ghusr.NamedUser) + self.assertIsInstance(usr.value, ghusr.NamedUser) + self.assertIsInstance(org.value, ghorg.Organization) + self.assertIsInstance(unknown.value, ghusr.NamedUser) + + self.assertEqual(str(default.value), 'NamedUser(login="login")') + self.assertEqual(str(usr.value), 'NamedUser(login="login")') + self.assertEqual(str(org.value), 'Organization(login="login")') + self.assertEqual(str(unknown.value), 'NamedUser(login="login")') + def testMakeDatetimeAttribute(self): for value, expected in [ (None, None), @@ -145,3 +242,598 @@ def testMakeTimetsampAttributeBadValues(self): self.assertEqual(value, e.exception.actual_value) self.assertEqual(int, e.exception.expected_type) self.assertIsNone(e.exception.transformation_exception) + + +class CompletableGithubObjectWithPaginatedProperty(Framework.TestCase): + def testRepoCommitFilesDefault(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commit = repo.get_commit("3253acaabd86de12b73d0a24c98eb9c13d1987b5") + files = list(commit.files) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + ["/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1"], + ) + + def testRepoCommitFiles(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commit = repo.get_commit("3253acaabd86de12b73d0a24c98eb9c13d1987b5") + files = list(commit.files) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2", + "/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2", + ], + ) + + def testRepoCommitFilesWithPerPage(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commit = repo.get_commit("3253acaabd86de12b73d0a24c98eb9c13d1987b5", commit_files_per_page=3) + files = list(commit.files) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=3", + "/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=3", + ], + ) + + def testRepoCommitGetFilesDefault(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commit = repo.get_commit("3253acaabd86de12b73d0a24c98eb9c13d1987b5") + files = list(commit.get_files()) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ( + [] + if lazy + else [ + "/repos/PyGithub/PyGithub", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1", + ] + ) + + [ + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1", + ], + ) + + def testRepoCommitGetFiles(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commit = repo.get_commit("3253acaabd86de12b73d0a24c98eb9c13d1987b5") + files = list(commit.get_files()) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ( + [] + if lazy + else [ + "/repos/PyGithub/PyGithub", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2", + ] + ) + + [ + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2", + "/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2", + ], + ) + + def testRepoCommitGetFilesWithPerPage(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commit = repo.get_commit("3253acaabd86de12b73d0a24c98eb9c13d1987b5", commit_files_per_page=1) + files = list(commit.get_files(commit_files_per_page=3)) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ( + [] + if lazy + else [ + "/repos/PyGithub/PyGithub", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=1", + ] + ) + + [ + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=3", + "/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=3", + ], + ) + + def testRepoCommitsFiles(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + commits = repo.get_commits(sha="release-v2-0") + commit = commits[0] + files = list(commit.files) + + self.assertEqual(len(files), 3) + self.assertListKeyEqual( + files, + lambda f: f.filename, + ["github/Auth.py", "github/Requester.py", "tests/Authentication.py"], + ) + + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/commits?per_page=2&sha=release-v2-0", + "/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=1&per_page=2", + "/repositories/3544490/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=2&per_page=2", + ], + ) + + def testRepoComparisonCommitsFilesDefault(self): + # replay data modified after record with + # cat -n tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt | while read -r lineno line; do if [ $(( lineno % 11 )) -eq 10 ]; then jq . | sed -E -e 's/"patch":\s*".*[^\\]"/"patch":"…"/g' -e 's/"([^"]+_url)":\s*".*[^\\]"/"\1":"…"/g' | jq -c; else cat; fi <<< "$line"; done > tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt.bak + # mv tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt.bak tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + # tests paginated property of Comparison.commits and Commit.files + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + comparison = repo.compare( + "6cfe46b712e2bf65560bd8189c4654cd6c56eeca", "cef98416f45a9cdaf84d7f53cea13ac074a2c05d" + ) + # PaginatedList commits should use default per_page + commits = list(comparison.commits) + self.assertEqual(len(commits), 7) + commit = commits[4] + self.assertEqual(commit.sha, "cbfe8d0f623ca29d984ec09d2b566e9ab10ae024") + # PaginatedList files should use default per_page + files = list(commit.files) + + self.assertEqual(len(files), 371) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/compare/6cfe46b712e2bf65560bd8189c4654cd6c56eeca...cef98416f45a9cdaf84d7f53cea13ac074a2c05d?page=1", + "/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024?page=1", + "/repositories/3544490/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024?page=2", + ], + ) + + def testRepoComparisonCommitsFiles(self): + # replay data modified after record with + # cat -n tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt | while read -r lineno line; do if [ $(( lineno % 11 )) -eq 10 ]; then jq . | sed -E -e 's/"patch":\s*".*[^\\]"/"patch":"…"/g' -e 's/"([^"]+_url)":\s*".*[^\\]"/"\1":"…"/g' | jq -c; else cat; fi <<< "$line"; done > tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt.bak + # mv tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt.bak tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + # tests paginated property of Comparison.commits and Commit.files + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + comparison = repo.compare( + "19e1c5032397a95c58fe25760723ffc24cbe0ec8", + "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86", + ) + # PaginatedList commits should respect configured per_page + commits = list(comparison.commits) + self.assertEqual(len(commits), 4) + commit = commits[3] + self.assertEqual(commit.sha, "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86") + # PaginatedList files should respect configured per_page + files = list(commit.files) + + self.assertEqual(len(files), 6) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2", + "/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2", + ], + ) + + def testRepoComparisonCommitsFilesWithPerPage(self): + # replay data modified after record with + # cat -n tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt | while read -r lineno line; do if [ $(( lineno % 11 )) -eq 10 ]; then jq . | sed -E -e 's/"patch":\s*".*[^\\]"/"patch":"…"/g' -e 's/"([^"]+_url)":\s*".*[^\\]"/"\1":"…"/g' | jq -c; else cat; fi <<< "$line"; done > tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt.bak + # mv tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt.bak tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + # tests paginated property of Comparison.commits and Commit.files + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + comparison = repo.compare( + "19e1c5032397a95c58fe25760723ffc24cbe0ec8", + "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86", + comparison_commits_per_page=3, + ) + # PaginatedList commits should use given per_page + commits = list(comparison.commits) + self.assertEqual(len(commits), 4) + commit = commits[3] + self.assertEqual(commit.sha, "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86") + # PaginatedList files should respect configured per_page + files = list(commit.files) + + self.assertEqual(len(files), 6) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3", + "/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=3", + "/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2", + ], + ) + + def testRepoComparisonCommitsFilesReversed(self): + # replay data modified after record with + # cat -n tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt | while read -r lineno line; do if [ $(( lineno % 11 )) -eq 10 ]; then jq . | sed -E -e 's/"patch":\s*".*[^\\]"/"patch":"…"/g' -e 's/"([^"]+_url)":\s*".*[^\\]"/"\1":"…"/g' | jq -c; else cat; fi <<< "$line"; done > tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt.bak + # mv tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt.bak tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + # tests paginated property of Comparison.commits and Commit.files + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + comparison = repo.compare( + "19e1c5032397a95c58fe25760723ffc24cbe0ec8", + "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86", + ) + # PaginatedList commits should respect configured per_page + commits = list(reversed(comparison.commits)) + self.assertEqual(len(commits), 4) + commit = commits[0] + self.assertEqual(commit.sha, "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86") + # PaginatedList files should respect configured per_page + files = list(reversed(commit.files)) + + self.assertEqual(len(files), 6) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2", + "/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + ], + ) + + def testRepoComparisonCommitsFilesReversedWithPerPage(self): + # replay data modified after record with + # cat -n tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt | while read -r lineno line; do if [ $(( lineno % 11 )) -eq 10 ]; then jq . | sed -E -e 's/"patch":\s*".*[^\\]"/"patch":"…"/g' -e 's/"([^"]+_url)":\s*".*[^\\]"/"\1":"…"/g' | jq -c; else cat; fi <<< "$line"; done > tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt.bak + # mv tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt.bak tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + # tests paginated property of Comparison.commits and Commit.files + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + comparison = repo.compare( + "19e1c5032397a95c58fe25760723ffc24cbe0ec8", + "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86", + comparison_commits_per_page=3, + ) + # PaginatedList commits should use given per_page + commits = list(reversed(comparison.commits)) + self.assertEqual(len(commits), 4) + commit = commits[0] + self.assertEqual(commit.sha, "4bf07a2f5123f78fc6759bc2ade0c74154c1ba86") + # PaginatedList files should respect configured per_page + files = list(reversed(commit.files)) + + self.assertEqual(len(files), 6) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub"]) + + [ + "/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3", + "/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=3", + "/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3", + "/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2", + "/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2", + ], + ) + + def testPullCommitsFilesDefault(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + pull = repo.get_pull(3370) + # PaginatedList commits should use default per_page + commits = list(pull.get_commits()) + self.assertEqual(len(commits), 1) + commit = commits[0] + # PaginatedList files should use default per_page + files = list(commit.files) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub", "/repos/PyGithub/PyGithub/pulls/3370"]) + + [ + "/repos/PyGithub/PyGithub/pulls/3370/commits", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1", + ], + ) + + def testPullCommitsFiles(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + pull = repo.get_pull(3370) + # PaginatedList commits should respect configured per_page + commits = list(pull.get_commits()) + self.assertEqual(len(commits), 1) + commit = commits[0] + # PaginatedList files should respect configured per_page + files = list(commit.files) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub", "/repos/PyGithub/PyGithub/pulls/3370"]) + + [ + "/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2", + "/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2", + ], + ) + + def testPullCommitsGetFilesDefault(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + pull = repo.get_pull(3370) + # PaginatedList commits should respect configured per_page + commits = list(pull.get_commits()) + self.assertEqual(len(commits), 1) + commit = commits[0] + # PaginatedList commits should use given per_page + files = list(commit.get_files(commit_files_per_page=100)) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub", "/repos/PyGithub/PyGithub/pulls/3370"]) + + [ + "/repos/PyGithub/PyGithub/pulls/3370/commits", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=100", + ], + ) + + def testPullCommitsGetFiles(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + pull = repo.get_pull(3370) + # PaginatedList commits should respect configured per_page + commits = list(pull.get_commits()) + self.assertEqual(len(commits), 1) + commit = commits[0] + # PaginatedList commits should respect configured per_page + files = list(commit.get_files()) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub", "/repos/PyGithub/PyGithub/pulls/3370"]) + + [ + "/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2", + "/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2", + ], + ) + + def testPullCommitsGetFilesWithPerPage(self): + for lazy in [True, False]: + with self.subTest(lazy=lazy): + with self.captureRequests() as requests: + self.g.per_page = 2 + repo = self.g.get_repo("PyGithub/PyGithub", lazy=lazy) + pull = repo.get_pull(3370) + # PaginatedList commits should respect configured per_page + commits = list(pull.get_commits()) + self.assertEqual(len(commits), 1) + commit = commits[0] + # PaginatedList commits should use given per_page + files = list(commit.get_files(commit_files_per_page=100)) + + self.assertEqual(len(files), 4) + self.assertListKeyEqual( + files, + lambda f: f.filename, + [ + ".github/workflows/_build-pkg.yml", + ".github/workflows/ci.yml", + ".github/workflows/lint.yml", + ".github/workflows/openapi.yml", + ], + ) + + self.assertListKeyEqual( + requests, + lambda r: r.url, + ([] if lazy else ["/repos/PyGithub/PyGithub", "/repos/PyGithub/PyGithub/pulls/3370"]) + + [ + "/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2", + "/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=100", + ], + ) + + +class TestingClass(gho.NonCompletableGithubObject): + def _initAttributes(self) -> None: + pass + + def _useAttributes(self, attributes: Any) -> None: + pass diff --git a/tests/Hook.py b/tests/Hook.py index 0e523268ae..a4fadde9c0 100644 --- a/tests/Hook.py +++ b/tests/Hook.py @@ -83,6 +83,12 @@ def testAttributes(self): ) self.assertEqual(repr(self.hook.last_response), 'HookResponse(status="ok")') + def testLazyAttributes(self): + hook = self.g.withLazy(True).get_repo("lazy/repo").get_hook(42) + self.assertEqual(str(hook), 'Hook(url="/repos/lazy/repo/hooks/42", id=42)') + self.assertEqual(hook.id, 42) + self.assertEqual(hook.url, "/repos/lazy/repo/hooks/42") + def testEditWithMinimalParameters(self): self.hook.edit("web", {"url": "http://foobar.com/hook"}) self.assertEqual(self.hook.config, {"url": "http://foobar.com/hook"}) diff --git a/tests/Installation.py b/tests/Installation.py index f55be87429..28e5013572 100644 --- a/tests/Installation.py +++ b/tests/Installation.py @@ -116,8 +116,8 @@ def testGetGithubForInstallation(self): # assert kwargs consists of ALL requester constructor arguments self.assertEqual(kwargs.keys(), github.Requester.Requester.__init__.__annotations__.keys()) - self.integration = github.GithubIntegration(**kwargs) - installations = list(self.integration.get_installations()) + integration = github.GithubIntegration(**kwargs) + installations = list(integration.get_installations()) installation = installations[0] g = installation.get_github_for_installation() @@ -130,6 +130,7 @@ def testGetGithubForInstallation(self): self.assertDictEqual(kwargs, actual) repo = g.get_repo("PyGithub/PyGithub") + self.assertEqual(repo.id, 3544490) self.assertEqual(repo.full_name, "PyGithub/PyGithub") def testRequester(self): diff --git a/tests/Issue.py b/tests/Issue.py index 49926eb748..1bac344eb8 100644 --- a/tests/Issue.py +++ b/tests/Issue.py @@ -49,6 +49,8 @@ from . import Framework +gho = Framework.github.GithubObject + class Issue(Framework.TestCase): def setUp(self): @@ -85,6 +87,7 @@ def testAttributes(self): self.assertEqual(self.issue.milestone.title, "Version 1.4") self.assertEqual(self.issue.node_id, "MDU6SXNzdWU0NjUzNzU3") self.assertEqual(self.issue.number, 28) + self.assertIsNone(self.issue.parent_issue_url) self.assertIsNone(self.issue.performed_via_github_app) self.assertIsNone(self.issue.pull_request) self.assertEqual( @@ -136,6 +139,13 @@ def testAttributes(self): }, ) + def testLazyAttributes(self): + issue = self.g.withLazy(True).get_repo("lazy/repo").get_issue(42) + self.assertEqual(str(issue), "Issue(title=None, number=42)") + self.assertEqual(issue._identity, 42) + self.assertEqual(issue.number, 42) + self.assertEqual(issue.url, "/repos/lazy/repo/issues/42") + def testEditWithoutParameters(self): self.issue.edit() @@ -145,16 +155,17 @@ def testEditWithAllParameters(self): self.issue.edit( "Title edited by PyGithub", "Body edited by PyGithub", - user, - "open", + gho.NotSet, + "closed", milestone, ["Bug"], - ["jacquev6"], + [user], + "completed", ) - self.assertEqual(self.issue.assignee.login, "jacquev6") self.assertListKeyEqual(self.issue.assignees, lambda a: a.login, ["jacquev6"]) self.assertEqual(self.issue.body, "Body edited by PyGithub") - self.assertEqual(self.issue.state, "open") + self.assertEqual(self.issue.state, "closed") + self.assertEqual(self.issue.state_reason, "completed") self.assertEqual(self.issue.title, "Title edited by PyGithub") self.assertListKeyEqual(self.issue.labels, lambda lb: lb.name, ["Bug"]) @@ -163,10 +174,10 @@ def testEditResetMilestone(self): self.issue.edit(milestone=None) self.assertEqual(self.issue.milestone, None) - def testEditResetAssignee(self): - self.assertEqual(self.issue.assignee.login, "jacquev6") - self.issue.edit(assignee=None) - self.assertEqual(self.issue.assignee, None) + def testEditResetAssignees(self): + self.assertEqual(len(self.issue.assignees), 1) + self.issue.edit(assignees=[]) + self.assertEqual(len(self.issue.assignees), 0) def testEditWithStateReasonNotPlanned(self): self.issue.edit(state="closed", state_reason="not_planned") diff --git a/tests/Issue214.py b/tests/Issue214.py index 13ea959c77..0ea6919222 100644 --- a/tests/Issue214.py +++ b/tests/Issue214.py @@ -12,6 +12,7 @@ # Copyright 2019 Wan Liuyang # # Copyright 2020 Steve Kowalik # # Copyright 2023 Enrico Minack # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -56,20 +57,20 @@ def testCollaborators(self): self.assertFalse(self.repo.has_in_collaborators("marcmenges")) def testEditIssue(self): - self.assertEqual(self.issue.assignee, None) + self.assertEqual(len(self.issue.assignees), 0) - self.issue.edit(assignee="farrd") - self.assertEqual(self.issue.assignee.login, "farrd") + self.issue.edit(assignees=["farrd"]) + self.assertEqual(self.issue.assignees[0].login, "farrd") - self.issue.edit(assignee=None) - self.assertEqual(self.issue.assignee, None) + self.issue.edit(assignees=[]) + self.assertEqual(len(self.issue.assignees), 0) def testCreateIssue(self): issue = self.repo.create_issue("Issue created by PyGithub", assignee="farrd") - self.assertEqual(issue.assignee.login, "farrd") + self.assertEqual(issue.assignees[0].login, "farrd") def testGetIssues(self): issues = self.repo.get_issues(assignee="farrd") for issue in issues: - self.assertEqual(issue.assignee.login, "farrd") + self.assertEqual(issue.assignees[0].login, "farrd") diff --git a/tests/Issue494.py b/tests/Issue494.py index 0511a9a330..80e8d9f804 100644 --- a/tests/Issue494.py +++ b/tests/Issue494.py @@ -14,6 +14,7 @@ # Copyright 2020 Steve Kowalik # # Copyright 2023 Enrico Minack # # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -40,10 +41,10 @@ class Issue494(Framework.TestCase): def setUp(self): super().setUp() self.repo = self.g.get_repo("apache/brooklyn-server", lazy=True) - self.pull = self.repo.get_pull(465) + self.pull = self.repo.get_pull(465).complete() def testRepr(self): expected = ( - 'PullRequest(title="Change SetHostnameCustomizer to check if ' '/etc/sysconfig/network exist…", number=465)' + 'PullRequest(title="Change SetHostnameCustomizer to check if /etc/sysconfig/network exist…", number=465)' ) self.assertEqual(self.pull.__repr__(), expected) diff --git a/tests/IssueComment.py b/tests/IssueComment.py index 5b68b4a000..dad1a440a0 100644 --- a/tests/IssueComment.py +++ b/tests/IssueComment.py @@ -100,6 +100,12 @@ def testAttributes(self): }, ) + def testLazyAttributes(self): + comment = self.g.withLazy(True).get_repo("lazy/repo").get_issue(42).get_comment(24) + self.assertEqual(str(comment), "IssueComment(user=None, id=24)") + self.assertEqual(comment.id, 24) + self.assertEqual(comment.url, "/repos/lazy/repo/issues/comments/24") + def testEdit(self): self.comment.edit("Comment edited by PyGithub") self.assertEqual(self.comment.body, "Comment edited by PyGithub") diff --git a/tests/Label.py b/tests/Label.py index 077686cf37..ccbc9b7555 100644 --- a/tests/Label.py +++ b/tests/Label.py @@ -56,6 +56,13 @@ def testAttributes(self): self.assertEqual(self.label.url, "https://api.github.com/repos/PyGithub/PyGithub/labels/bug") self.assertEqual(repr(self.label), 'Label(name="bug")') + def testLazyAttributes(self): + label = self.g.withLazy(True).get_repo("lazy/repo").get_label("good first issue") + self.assertEqual(str(label), 'Label(name="good first issue")') + self.assertEqual(label._identity, "good%20first%20issue") + self.assertEqual(label.name, "good first issue") + self.assertEqual(label.url, "/repos/lazy/repo/labels/good%20first%20issue") + def testEdit(self): self.label.edit("LabelEditedByPyGithub", "0000ff", "Description of LabelEditedByPyGithub") self.assertEqual(self.label.color, "0000ff") diff --git a/tests/Milestone.py b/tests/Milestone.py index 1a00d876c7..dcf36d27ab 100644 --- a/tests/Milestone.py +++ b/tests/Milestone.py @@ -68,6 +68,13 @@ def testAttributes(self): self.assertEqual(self.milestone.creator.login, "jacquev6") self.assertEqual(repr(self.milestone), 'Milestone(title="Version 0.4", number=1)') + def testLazyAttributes(self): + milestone = self.g.withLazy(True).get_repo("lazy/repo").get_milestone(42) + self.assertEqual(str(milestone), "Milestone(title=None, number=42)") + self.assertEqual(milestone._identity, 42) + self.assertEqual(milestone.number, 42) + self.assertEqual(milestone.url, "/repos/lazy/repo/milestones/42") + def testEditWithMinimalParameters(self): self.milestone.edit("Title edited by PyGithub") self.assertEqual(self.milestone.title, "Title edited by PyGithub") diff --git a/tests/NamedUser.py b/tests/NamedUser.py index 4e0d3f2a63..eca2c6c7c6 100644 --- a/tests/NamedUser.py +++ b/tests/NamedUser.py @@ -42,6 +42,11 @@ from __future__ import annotations from datetime import datetime, timezone +from unittest import mock + +import github.NamedUser +import github.Requester +from github.GithubObject import is_undefined from . import Framework @@ -55,6 +60,7 @@ def testAttributes(self): self.assertEqual(self.user.avatar_url, "https://avatars.githubusercontent.com/u/327146?v=4") self.assertIsNone(self.user.bio) self.assertEqual(self.user.blog, "http://vincent-jacques.net") + self.assertIsNone(self.user.business_plus) self.assertIsNone(self.user.collaborators) self.assertIsNone(self.user.company) self.assertIsNone(self.user.contributions) @@ -72,6 +78,7 @@ def testAttributes(self): self.assertTrue(self.user.hireable) self.assertEqual(self.user.html_url, "https://github.com/jacquev6") self.assertEqual(self.user.id, 327146) + self.assertIsNone(self.user.ldap_dn) self.assertEqual(self.user.location, "France") self.assertEqual(self.user.login, "jacquev6") self.assertEqual(self.user.name, "Vincent Jacques") @@ -98,6 +105,7 @@ def testAttributes(self): self.assertIsNone(self.user.text_matches) self.assertIsNone(self.user.total_private_repos) self.assertIsNone(self.user.twitter_username) + self.assertIsNone(self.user.two_factor_authentication) self.assertEqual(self.user.type, "User") self.assertEqual(self.user.updated_at, datetime(2024, 10, 20, 7, 14, 52, tzinfo=timezone.utc)) self.assertEqual(self.user.url, "https://api.github.com/users/jacquev6") @@ -106,6 +114,45 @@ def testAttributes(self): self.assertEqual(repr(self.user.plan), "None") self.assertEqual(self.user.user_view_type, "public") + def testLazyAttributes(self): + user = self.g.withLazy(True).get_user("lazyUser", lazy=True) + self.assertEqual(str(user), 'NamedUser(login="lazyUser")') + self.assertEqual(user._identity, "lazyUser") + self.assertEqual(user.login, "lazyUser") + self.assertEqual(user.url, "/users/lazyUser") + + def testCreatFromUrl(self): + requester = mock.Mock(github.Requester.Requester, base_url="https://test.ing/api/", is_not_lazy=False) + + for base_url in [requester.base_url[:-1], ""]: + user = github.NamedUser.NamedUser(requester, url=f"{base_url}/user/12345") + self.assertEqual(user.url, f"{base_url}/user/12345", msg=f"base url: '{base_url}'") + self.assertEqual(user.id, 12345) + self.assertTrue(is_undefined(user._login)) + + user = github.NamedUser.NamedUser(requester, url=f"{base_url}/users/login") + self.assertEqual(user.url, f"{base_url}/users/login", msg=f"base url: '{base_url}'") + self.assertTrue(is_undefined(user._id)) + self.assertEqual(user.login, "login") + + user = github.NamedUser.NamedUser(requester, url=f"{base_url}/users/12345") + self.assertEqual(user.url, f"{base_url}/users/12345", msg=f"base url: '{base_url}'") + self.assertTrue(is_undefined(user._id)) + self.assertEqual(user.login, "12345") + + def testCreatFromAttributes(self): + requester = mock.Mock(github.Requester.Requester, base_url="https://test.ing/api/", is_not_lazy=False) + + user = github.NamedUser.NamedUser(requester, attributes={"id": 12345}) + self.assertEqual(user.url, "/user/12345") + self.assertEqual(user.id, 12345) + self.assertTrue(is_undefined(user._name)) + + user = github.NamedUser.NamedUser(requester, attributes={"login": "login"}) + self.assertEqual(user.url, "/users/login") + self.assertTrue(is_undefined(user._id)) + self.assertEqual(user.login, "login") + def testAttributesOfOtherUser(self): self.user = self.g.get_user("nvie") self.assertEqual( diff --git a/tests/Organization.py b/tests/Organization.py index 4c6cf67d53..c46577656b 100644 --- a/tests/Organization.py +++ b/tests/Organization.py @@ -49,6 +49,7 @@ # Copyright 2025 Greg Fogelberg <52933995+gfog-floqast@users.noreply.github.com># # Copyright 2025 Pavel Abramov <31950564+uncleDecart@users.noreply.github.com> # # Copyright 2025 Zachary <6599715+interifter@users.noreply.github.com> # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -172,6 +173,11 @@ def testAttributes(self): self.assertIsNone(self.org.user_view_type) self.assertEqual(self.org.web_commit_signoff_required, False) + def testLazyAttributes(self): + org = self.g.withLazy(True).get_organization("org") + self.assertEqual(org.login, "org") + self.assertEqual(org.url, "/orgs/org") + def testAddMembersDefaultRole(self): lyloa = self.g.get_user("lyloa") self.assertFalse(self.org.has_in_members(lyloa)) @@ -516,6 +522,12 @@ def testGetSecret(self): self.assertEqual(list(secret.selected_repositories), repos) self.assertEqual(secret.url, "https://api.github.com/orgs/BeaverSoftware/actions/secrets/secret-name") + def testLazySecret(self): + secret = self.g.withLazy(True).get_organization("org").get_secret("secret name") + self.assertEqual(str(secret), 'OrganizationSecret(name="secret name")') + self.assertEqual(secret.name, "secret name") + self.assertEqual(secret.url, "/orgs/org/actions/secrets/secret%20name") + def testGetSecrets(self): secrets = self.org.get_secrets() self.assertEqual(len(list(secrets)), 1) @@ -629,6 +641,12 @@ def testGetVariable(self): self.assertEqual(list(variable.selected_repositories), repos) self.assertEqual(variable.url, "https://api.github.com/orgs/BeaverSoftware/actions/variables/variable-name") + def testGetLazyVariable(self): + var = self.g.withLazy(True).get_organization("org").get_variable("var name") + self.assertEqual(str(var), 'OrganizationVariable(name="var name")') + self.assertEqual(var.name, "var name") + self.assertEqual(var.url, "/orgs/org/actions/variables/var%20name") + def testGetVariables(self): variables = self.org.get_variables() self.assertEqual(len(list(variables)), 1) @@ -767,7 +785,7 @@ def testGetCustomProperty(self): self.assertEqual(custom_property.required, True) self.assertEqual(custom_property.default_value, "foo") self.assertEqual(custom_property.description, "description") - self.assertIsNone(custom_property.url) + self.assertEqual(custom_property.url, "https://api.github.com/orgs/BeaverSoftware/properties/schema/property_1") self.assertEqual(custom_property.values_editable_by, "org_actors") def testCreateCustomPropertyValues(self): diff --git a/tests/OrganizationCodeScanAlert.py b/tests/OrganizationCodeScanAlert.py new file mode 100644 index 0000000000..b32cbb17fc --- /dev/null +++ b/tests/OrganizationCodeScanAlert.py @@ -0,0 +1,105 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from datetime import datetime, timezone + +import github.OrganizationCodeScanAlert +import github.PaginatedList +import github.Repository + +from . import Framework + + +class OrganizationCodeScanAlert(Framework.TestCase): + alert: github.OrganizationCodeScanAlert.OrganizationCodeScanAlert + + def setUp(self): + super().setUp() + self.org = self.g.get_organization( + "github" + ) # This is a placeholder organization that should always exist, switch this to your own test organization + + def testMultipleAlerts(self): + multiple_alerts = self.org.get_codescan_alerts() + self.assertIsInstance(multiple_alerts, github.PaginatedList.PaginatedList) + self.assertIsInstance(multiple_alerts[0], github.OrganizationCodeScanAlert.OrganizationCodeScanAlert) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 2) # Update this when more alerts are added + + test_alert = alert_list[0] + self.assertEqual(test_alert.number, 4) + self.assertEqual(test_alert.created_at, datetime(2020, 2, 13, 12, 29, 18, tzinfo=timezone.utc)) + self.assertEqual(test_alert.updated_at, datetime(2025, 8, 25, 16, 3, 10, tzinfo=timezone.utc)) + self.assertEqual(test_alert.url, "https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4") + self.assertEqual(test_alert.html_url, "https://github.com/octocat/hello-world/code-scanning/4") + self.assertEqual(test_alert.state, "open") + self.assertIsNone(test_alert.dismissed_by) + self.assertIsNone(test_alert.dismissed_at) + self.assertIsNone(test_alert.dismissed_reason) + self.assertIsNone(test_alert.dismissed_comment) + self.assertEqual(test_alert.rule.id, "js/zipslip") + self.assertEqual(test_alert.rule.severity, "error") + self.assertEqual(test_alert.rule.description, "Arbitrary file write during zip extraction") + self.assertEqual(test_alert.rule.name, "js/zipslip") + self.assertEqual(test_alert.rule.tags[0], "security") + self.assertEqual(test_alert.rule.tags[1], "external/cwe/cwe-022") + self.assertEqual(test_alert.tool.name, "CodeQL") + self.assertIsNone(test_alert.tool.guid) + self.assertEqual(test_alert.tool.version, "2.4.0") + self.assertEqual(test_alert.most_recent_instance.ref, "refs/heads/main") + self.assertEqual( + test_alert.most_recent_instance.analysis_key, ".github/workflows/codeql-analysis.yml:CodeQL-Build" + ) + self.assertEqual(test_alert.most_recent_instance.environment, "{}") + self.assertEqual(test_alert.most_recent_instance.category, ".github/workflows/codeql-analysis.yml:CodeQL-Build") + self.assertEqual(test_alert.most_recent_instance.state, "open") + self.assertEqual(test_alert.most_recent_instance.commit_sha, "39406e42cb832f683daa691dd652a8dc36ee8930") + self.assertEqual(test_alert.most_recent_instance.message["text"], "This path depends on a user-provided value.") + self.assertEqual(test_alert.most_recent_instance.location.path, "spec-main/api-session-spec.ts") + self.assertEqual(test_alert.most_recent_instance.location.start_line, 917) + self.assertEqual(test_alert.most_recent_instance.location.end_line, 917) + self.assertEqual(test_alert.most_recent_instance.location.start_column, 7) + self.assertEqual(test_alert.most_recent_instance.location.end_column, 18) + self.assertEqual(test_alert.most_recent_instance.classifications[0], "test") + self.assertEqual( + test_alert.instances_url, + "https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4/instances", + ) + self.assertIsNone(test_alert.dismissal_approved_by) + self.assertIsInstance(test_alert.repository, github.Repository.Repository) + self.assertEqual(test_alert.repository.name, "Hello-World") + self.assertEqual(test_alert.repository.full_name, "octocat/Hello-World") + + def testRepr(self): + multiple_alerts = self.org.get_codescan_alerts() + alert_list = [alert for alert in multiple_alerts] + test_alert = alert_list[0] + self.assertEqual(repr(test_alert), 'OrganizationCodeScanAlert(number=4, id="js/zipslip")') + + def testGetAlertsWithArguments(self): + alerts = self.org.get_codescan_alerts( + tool_name="CodeQL", ref="refs/heads/main", sort="created", direction="asc", state="open", severity="error" + ) + # Note, this doesn't test "tool_guid" or "pr" arguments as they are not found in the test data + self.assertEqual(len(list(alerts)), 2) # Update this when more alerts are added diff --git a/tests/OrganizationDependabotAlert.py b/tests/OrganizationDependabotAlert.py new file mode 100644 index 0000000000..c4561b951b --- /dev/null +++ b/tests/OrganizationDependabotAlert.py @@ -0,0 +1,110 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from datetime import datetime, timezone + +import github.OrganizationDependabotAlert +import github.PaginatedList +import github.Repository + +from . import Framework + + +class OrganizationDependabotAlert(Framework.TestCase): + alert: github.OrganizationDependabotAlert.OrganizationDependabotAlert + + def setUp(self): + super().setUp() + self.org = self.g.get_organization( + "github" + ) # This is a placeholder organization that should always exist, switch this to your own test organization + + def testMultipleAlerts(self): + multiple_alerts = self.org.get_dependabot_alerts() + self.assertIsInstance(multiple_alerts, github.PaginatedList.PaginatedList) + self.assertIsInstance(multiple_alerts[0], github.OrganizationDependabotAlert.OrganizationDependabotAlert) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 2) # Update this when more alerts are added + + test_alert = alert_list[-1] + self.assertEqual(test_alert.number, 1) + self.assertEqual(test_alert.state, "open") + self.assertEqual(test_alert.dependency.package.ecosystem, "pip") + self.assertEqual(test_alert.dependency.package.name, "ansible") + self.assertEqual(test_alert.dependency.manifest_path, "path/to/requirements.txt") + self.assertEqual(test_alert.dependency.scope, "runtime") + self.assertEqual(test_alert.security_advisory.ghsa_id, "GHSA-8f4m-hccc-8qph") + self.assertEqual(test_alert.security_advisory.cve_id, "CVE-2021-20191") + self.assertEqual( + test_alert.security_advisory.summary, + "Insertion of Sensitive Information into Log File in ansible", + ) + self.assertEqual( + test_alert.security_advisory.description, + "A flaw was found in ansible. Credentials, such as secrets, are being disclosed in console log by default and not protected by no_log feature when using those modules. An attacker can take advantage of this information to steal those credentials. The highest threat from this vulnerability is to data confidentiality.", + ) + self.assertEqual(test_alert.security_advisory.severity, "medium") + self.assertEqual(test_alert.security_advisory.identifiers[0]["value"], "GHSA-8f4m-hccc-8qph") + self.assertEqual(test_alert.security_advisory.identifiers[0]["type"], "GHSA") + self.assertEqual(test_alert.security_advisory.identifiers[1]["value"], "CVE-2021-20191") + self.assertEqual(test_alert.security_advisory.identifiers[1]["type"], "CVE") + self.assertEqual( + test_alert.security_advisory.published_at, datetime(2021, 6, 1, 17, 38, 0, tzinfo=timezone.utc) + ) + self.assertEqual(test_alert.security_advisory.updated_at, datetime(2021, 8, 12, 23, 6, 0, tzinfo=timezone.utc)) + self.assertIsNone(test_alert.security_advisory.withdrawn_at) + self.assertEqual(test_alert.security_advisory.vulnerabilities[0].package.ecosystem, "pip") + self.assertEqual(test_alert.security_advisory.vulnerabilities[0].package.name, "ansible") + self.assertEqual(test_alert.security_advisory.vulnerabilities[0].vulnerable_version_range, ">= 2.9.0, < 2.9.18") + self.assertEqual(test_alert.security_advisory.vulnerabilities[0].severity, "medium") + self.assertEqual(test_alert.security_advisory.vulnerabilities[0].first_patched_version["identifier"], "2.9.18") + self.assertEqual(test_alert.security_vulnerability.package.ecosystem, "pip") + self.assertEqual(test_alert.security_vulnerability.package.name, "ansible") + self.assertEqual(test_alert.security_vulnerability.vulnerable_version_range, "< 2.8.19") + self.assertEqual(test_alert.security_vulnerability.severity, "medium") + self.assertEqual(test_alert.security_vulnerability.first_patched_version["identifier"], "2.8.19") + + self.assertEqual(test_alert.url, "https://api.github.com/repos/octo-org/hello-world/dependabot/alerts/1") + self.assertEqual(test_alert.html_url, "https://github.com/octo-org/hello-world/security/dependabot/1") + self.assertEqual(test_alert.created_at, datetime(2022, 6, 14, 15, 21, 52, tzinfo=timezone.utc)) + self.assertEqual(test_alert.updated_at, datetime(2022, 6, 14, 15, 21, 52, tzinfo=timezone.utc)) + self.assertIsNone(test_alert.dismissed_at) + self.assertIsNone(test_alert.dismissed_by) + self.assertIsNone(test_alert.dismissed_reason) + self.assertIsNone(test_alert.dismissed_comment) + self.assertIsNone(test_alert.fixed_at) + + self.assertIsInstance(test_alert.repository, github.Repository.Repository) + self.assertEqual(test_alert.repository.name, "hello-world") + self.assertEqual(test_alert.repository.full_name, "octo-org/hello-world") + + def testRepr(self): + multiple_alerts = self.org.get_dependabot_alerts() + alert_list = [alert for alert in multiple_alerts] + test_alert = alert_list[-1] + self.assertEqual(repr(test_alert), 'OrganizationDependabotAlert(number=1, ghsa_id="GHSA-8f4m-hccc-8qph")') + + def testGetAlertsWithAllArguments(self): + alerts = self.org.get_dependabot_alerts("open", "medium", "pip", "ansible", "runtime", "created", "asc") + self.assertEqual(len(list(alerts)), 1) # Update this when more alerts are added diff --git a/tests/OrganizationSecretScanAlert.py b/tests/OrganizationSecretScanAlert.py new file mode 100644 index 0000000000..9f61a36825 --- /dev/null +++ b/tests/OrganizationSecretScanAlert.py @@ -0,0 +1,119 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from datetime import datetime, timezone + +import github.OrganizationSecretScanAlert +import github.PaginatedList +import github.Repository + +from . import Framework + + +class OrganizationSecretScanAlert(Framework.TestCase): + alert: github.OrganizationSecretScanAlert.OrganizationSecretScanAlert + + def setUp(self): + super().setUp() + self.org = self.g.get_organization( + "github" + ) # This is a placeholder organization that should always exist, switch this to your own test organization + + def testMultipleAlerts(self): + multiple_alerts = self.org.get_secret_scanning_alerts() + self.assertIsInstance(multiple_alerts, github.PaginatedList.PaginatedList) + self.assertIsInstance(multiple_alerts[0], github.OrganizationSecretScanAlert.OrganizationSecretScanAlert) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 2) # Update this when more alerts are added + + test_alert = alert_list[-1] + self.assertEqual(test_alert.number, 1) + self.assertEqual(test_alert.created_at, datetime(2020, 11, 6, 18, 18, 30, tzinfo=timezone.utc)) + self.assertEqual(test_alert.url, "https://api.github.com/repos/owner/repo/secret-scanning/alerts/1") + self.assertEqual(test_alert.html_url, "https://github.com/owner/repo/security/secret-scanning/1") + self.assertEqual( + test_alert.locations_url, + "https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/1/locations", + ) + self.assertEqual(test_alert.state, "open") + self.assertIsNone(test_alert.resolution) + self.assertIsNone(test_alert.resolved_at) + self.assertIsNone(test_alert.resolved_by) + self.assertEqual(test_alert.secret_type, "mailchimp_api_key") + self.assertEqual(test_alert.secret, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2") + self.assertIsNone(test_alert.push_protection_bypassed_by) + self.assertFalse(test_alert.push_protection_bypassed) + self.assertIsNone(test_alert.push_protection_bypassed_at) + self.assertIsNone(test_alert.push_protection_bypass_request_reviewer) + self.assertIsNone(test_alert.push_protection_bypass_request_reviewer_comment) + self.assertIsNone(test_alert.push_protection_bypass_request_comment) + self.assertIsNone(test_alert.push_protection_bypass_request_html_url) + self.assertIsNone(test_alert.resolution_comment) + self.assertEqual(test_alert.validity, "unknown") + self.assertFalse(test_alert.publicly_leaked) + self.assertFalse(test_alert.multi_repo) + self.assertFalse(test_alert.is_base64_encoded) + self.assertEqual(test_alert.first_location_detected.path, "/example/secrets.txt") + self.assertEqual(test_alert.first_location_detected.start_line, 1) + self.assertEqual(test_alert.first_location_detected.end_line, 1) + self.assertEqual(test_alert.first_location_detected.start_column, 1) + self.assertEqual(test_alert.first_location_detected.end_column, 64) + self.assertEqual(test_alert.first_location_detected.blob_sha, "af5626b4a114abcb82d63db7c8082c3c4756e51b") + self.assertEqual( + test_alert.first_location_detected.blob_url, + "https://api.github.com/repos/octocat/hello-world/git/blobs/af5626b4a114abcb82d63db7c8082c3c4756e51b", + ) + self.assertEqual(test_alert.first_location_detected.commit_sha, "f14d7debf9775f957cf4f1e8176da0786431f72b") + self.assertEqual( + test_alert.first_location_detected.commit_url, + "https://api.github.com/repos/octocat/hello-world/git/commits/f14d7debf9775f957cf4f1e8176da0786431f72b", + ) + self.assertFalse(test_alert.has_more_locations) + self.assertIsInstance(test_alert.repository, github.Repository.Repository) + self.assertEqual(test_alert.repository.name, "Hello-World") + self.assertEqual(test_alert.repository.full_name, "octocat/Hello-World") + + def testRepr(self): + multiple_alerts = self.org.get_secret_scanning_alerts() + alert_list = [alert for alert in multiple_alerts] + test_alert = alert_list[-1] + self.assertEqual(repr(test_alert), "OrganizationSecretScanAlert(number=1)") + + def testGetAlertsWithAllArguments(self): + multiple_alerts = self.org.get_secret_scanning_alerts( + state="resolved", + secret_type="adafruit_io_key", + resolution="false_positive", + sort="created", + direction="asc", + validity="inactive", + is_publicly_leaked=False, + is_multi_repo=False, + hide_secret=True, + ) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 1) + + test_alert = alert_list[-1] + self.assertIsNone(test_alert.secret) # Because hide_secret is True diff --git a/tests/PaginatedList.py b/tests/PaginatedList.py index b34f84d07a..79296612b9 100644 --- a/tests/PaginatedList.py +++ b/tests/PaginatedList.py @@ -22,6 +22,8 @@ # Copyright 2024 Kian-Meng Ang # # Copyright 2025 Enrico Minack # # Copyright 2025 Matej Focko # +# Copyright 2025 odedperezcodes # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -64,7 +66,7 @@ def testIteration(self): def testIterationWithPrefetchedFirstPage(self): # test data taken from EnterpriseAdmin.testGetEnterpriseUsers - users = self.licenses.get_users() + users = self.licenses.users self.assertEqual(len(list(users)), 102) self.assertEqual(len({user.github_com_login for user in users}), 102) @@ -323,6 +325,12 @@ def testTotalCountWithDictionary(self): self.assertEqual(review_requests[0].totalCount, 0) self.assertEqual(review_requests[1].totalCount, 0) + def testTotalCountWithDeprecationLink(self): + # Test the original reported scenario: search_issues with commit SHA + issues = self.g.search_issues("commit:example_sha") + # Should return the actual count from JSON, not 0 + self.assertEqual(issues.totalCount, 1) + def testCustomPerPage(self): self.assertEqual(self.g.per_page, 30) self.g.per_page = 100 @@ -371,6 +379,179 @@ def testCustomPerPageReversedIteration(self): [comment.created_at for comment in comments], ) + def testCustomPerPageReversedIterationSinglePage(self): + self.g.per_page = 4 + repo = self.g.get_repo("PyGithub/PyGithub") + comments = repo.get_issue(3372).get_comments().reversed + self.assertEqual( + [ + datetime(2025, 9, 17, 19, 49, 40, tzinfo=timezone.utc), + datetime(2025, 9, 17, 8, 44, 18, tzinfo=timezone.utc), + datetime(2025, 9, 16, 19, 22, 2, tzinfo=timezone.utc), + datetime(2025, 9, 15, 12, 15, 13, tzinfo=timezone.utc), + ], + [comment.created_at for comment in comments], + ) + + # more custom per page tests in CompletableGithubObjectWithPaginatedProperty + + def testWithFirstPage(self): + # fetching the commit also fetches the fist page of files + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=True) + commit = repo.get_commit("e359b83a04e8f34bedab0f2180169012d238a135", commit_files_per_page=3) + # repo is lazy, so this commit is also lazy, here we test with an eager (fetched) commit + commit.complete() + files = commit.files + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=1&per_page=3"], + ) + + # consuming the first page of files should not fire a request + with self.captureRequests() as requests: + self.assertEqual(files[0].filename, "github/GeneratedReleaseNotes.py") + self.assertEqual(files[1].filename, "github/Repository.py") + self.assertEqual(files[2].filename, "pyproject.toml") + self.assertEqual(len(requests), 0) + + # consuming items of the second page fetches the second page + with self.captureRequests() as requests: + self.assertEqual(files[3].filename, "tests/ReplayData/Repository.testGenerateReleaseNotes.txt") + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=2&per_page=3"], + ) + + # consuming further items of the second page does not fire a request + with self.captureRequests() as requests: + self.assertEqual( + files[4].filename, "tests/ReplayData/Repository.testGenerateReleaseNotesWithAllArguments.txt" + ) + self.assertEqual(files[5].filename, "tests/Repository.py") + self.assertEqual(len(requests), 0) + + # consuming items of the last page fetches the that page + with self.captureRequests() as requests: + self.assertEqual(files[6].filename, "tests/test_release_notes.yml") + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=3&per_page=3"], + ) + + def testWithFirstSinglePage(self): + # fetching the commit also fetches the fist page of files + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=True) + commit = repo.get_commit("f5f9756a1dd52a53820cc54927abb34725377987", commit_files_per_page=3) + # repo is lazy, so this commit is also lazy, here we test with an eager (fetched) commit + commit.complete() + files = commit.files + # with a single page we by now know the total count without firing a request + self.assertEqual(files.totalCount, 3) + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987?page=1&per_page=3"], + ) + + # consuming the first page of files should not fire a request + with self.captureRequests() as requests: + self.assertEqual(files[0].filename, "github/GithubApp.py") + self.assertEqual(files[1].filename, "github/GithubObject.py") + self.assertEqual(files[2].filename, "tests/GithubObject.py") + self.assertEqual(len(requests), 0) + + def testReversedWithFirstPage(self): + # this is all lazy, no requests fired + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=True) + commit = repo.get_commit("e359b83a04e8f34bedab0f2180169012d238a135", commit_files_per_page=3) + # repo is lazy, so this commit is also lazy, here we test with an eager (fetched) commit + commit.complete() + files = commit.files + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=1&per_page=3"], + ) + + # reversing files does not fire a request because there is a last Link header in the first response + with self.captureRequests() as requests: + files = files.reversed + self.assertEqual(len(requests), 0) + + # consuming the first page of the reversed files fetches the "last" URL + with self.captureRequests() as requests: + self.assertEqual(files[0].filename, "tests/test_release_notes.yml") + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=3&per_page=3"], + ) + + # consuming items of the second page fetches the second page + with self.captureRequests() as requests: + self.assertEqual(files[1].filename, "tests/Repository.py") + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=2&per_page=3"], + ) + # consuming further items of the second page does not fire a request + with self.captureRequests() as requests: + self.assertEqual( + files[2].filename, "tests/ReplayData/Repository.testGenerateReleaseNotesWithAllArguments.txt" + ) + self.assertEqual(files[3].filename, "tests/ReplayData/Repository.testGenerateReleaseNotes.txt") + self.assertEqual(len(requests), 0) + + # consuming items of the last page fetches the that page + with self.captureRequests() as requests: + self.assertEqual(files[4].filename, "pyproject.toml") + self.assertEqual(files[5].filename, "github/Repository.py") + self.assertEqual(files[6].filename, "github/GeneratedReleaseNotes.py") + self.assertListKeyEqual( + requests, + lambda r: r.url, + ["/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?page=1&per_page=3"], + ) + + def testReversedWithFirstSinglePage(self): + # fetching the commit also fetches the fist page of files + with self.captureRequests() as requests: + repo = self.g.get_repo("PyGithub/PyGithub", lazy=True) + commit = repo.get_commit("f5f9756a1dd52a53820cc54927abb34725377987", commit_files_per_page=3) + # repo is lazy, so this commit is also lazy, here we test with an eager (fetched) commit + commit.complete() + files = commit.files + # with a single page we by now know the total count without firing a request + self.assertEqual(files.totalCount, 3) + self.assertListKeyEqual( + requests, + lambda r: r.url, + [ + "/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987?page=1&per_page=3", + ], + ) + + # reversing files fires another request because there were no Link headers in the first response + with self.captureRequests() as requests: + files = files.reversed + self.assertListKeyEqual( + requests, lambda r: r.url, ["/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987"] + ) + + # consuming the first page of files should not fire a request + with self.captureRequests() as requests: + self.assertEqual(files[0].filename, "tests/GithubObject.py") + self.assertEqual(files[1].filename, "github/GithubObject.py") + self.assertEqual(files[2].filename, "github/GithubApp.py") + self.assertEqual(len(requests), 0) + def testNoFirstPage(self): self.assertFalse(next(iter(self.list), None)) diff --git a/tests/Project.py b/tests/Project.py index 181cb84327..3d96099f16 100644 --- a/tests/Project.py +++ b/tests/Project.py @@ -62,6 +62,12 @@ def testAttributes(self): self.assertEqual(self.proj.updated_at, datetime(2018, 8, 3, 0, 31, 17, tzinfo=timezone.utc)) self.assertEqual(self.proj.url, "https://api.github.com/projects/1682941") + def testLazyAttributes(self): + project = self.g.withLazy(True).get_project(42) + self.assertEqual(str(project), "Project(name=None)") + self.assertEqual(project.id, 42) + self.assertEqual(project.url, "/projects/42") + def testGetOrganizationProjects(self): expectedProjects = ["Project1", "Project2", "Project3"] org = self.g.get_organization("PyGithubTestOrg") diff --git a/tests/PublicKey.py b/tests/PublicKey.py index 95fc613abc..2ea149fece 100644 --- a/tests/PublicKey.py +++ b/tests/PublicKey.py @@ -17,6 +17,7 @@ # Copyright 2023 Enrico Minack # # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2025 Enrico Minack # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -53,7 +54,9 @@ def testAttributes(self): 'PublicKey(key_id="568250167242549743", key="u5e1Z25+z8pmgVVt5Pd8k0z/sKpVL1MXYtRAecE4vm8=")', ) self.assertIsNone(self.public_key.title) - self.assertIsNone(self.public_key.url) + self.assertEqual( + self.public_key.url, "https://api.github.com/repos/jacquev6/PyGithub/actions/secrets/public-key" + ) def testAttributes_with_int_key_id(self): self.public_key = self.g.get_user().get_repo("PyGithub").get_public_key() diff --git a/tests/PullRequest.py b/tests/PullRequest.py index 7455831351..b80016fb6e 100644 --- a/tests/PullRequest.py +++ b/tests/PullRequest.py @@ -69,10 +69,10 @@ def setUp(self): self.pull = self.repo.get_pull(31) marco_repo = self.g.get_repo("MarcoFalke/PyGithub", lazy=True) - self.pullIssue256Closed = marco_repo.get_pull(1) - self.pullIssue256Merged = marco_repo.get_pull(2) - self.pullIssue256Conflict = marco_repo.get_pull(3) - self.pullIssue256Uncached = marco_repo.get_pull(4) + self.pullIssue256Closed = marco_repo.get_pull(1).complete() + self.pullIssue256Merged = marco_repo.get_pull(2).complete() + self.pullIssue256Conflict = marco_repo.get_pull(3).complete() + self.pullIssue256Uncached = marco_repo.get_pull(4).complete() flo_repo = self.g.get_repo("FlorentClarret/PyGithub") self.pullMaintainerCanModify = flo_repo.get_pull(2) @@ -218,6 +218,12 @@ def testAttributes(self): ) self.assertTrue(self.pullIssue256Conflict.rebaseable) + def testLazyAttributes(self): + pull = self.g.withLazy(True).get_repo("lazy/repo").get_pull(42) + self.assertEqual(str(pull), "PullRequest(title=None, number=42)") + self.assertEqual(pull.number, 42) + self.assertEqual(pull.url, "/repos/lazy/repo/pulls/42") + def testCreateComment(self): commit = self.repo.get_commit("8a4f306d4b223682dd19410d4a9150636ebe4206") comment = self.pull.create_comment("Comment created by PyGithub", commit, "src/github/Issue.py", 5) diff --git a/tests/PullRequestComment.py b/tests/PullRequestComment.py index e5af80cc42..e606ac2b45 100644 --- a/tests/PullRequestComment.py +++ b/tests/PullRequestComment.py @@ -101,6 +101,12 @@ def testAttributes(self): self.assertEqual(self.comment.html_url, "https://github.com/PyGithub/PyGithub/pull/31#discussion_r1580134") self.assertEqual(repr(self.comment), 'PullRequestComment(user=NamedUser(login="jacquev6"), id=1580134)') + def testLazyAttributes(self): + issue = self.g.withLazy(True).get_repo("lazy/repo").get_pull(42).get_comment(24) + self.assertEqual(str(issue), "PullRequestComment(user=None, id=24)") + self.assertEqual(issue.id, 24) + self.assertEqual(issue.url, "/repos/lazy/repo/pulls/comments/24") + def testEdit(self): self.comment.edit("Comment edited by PyGithub") self.assertEqual(self.comment.body, "Comment edited by PyGithub") diff --git a/tests/PullRequestReview.py b/tests/PullRequestReview.py index ea793619d3..8052eaaa6c 100644 --- a/tests/PullRequestReview.py +++ b/tests/PullRequestReview.py @@ -23,6 +23,7 @@ # Copyright 2023 Gael Colas # # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # # Copyright 2024 Enrico Minack # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -42,6 +43,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from . import Framework @@ -78,7 +81,11 @@ def testDismiss(self): self.assertEqual(self.pullreview.state, "DISMISSED") def testAttributes(self): + self.assertEqual(self.pullreview.author_association, "OWNER") + self.assertIsNone(self.pullreview.body_html) + self.assertIsNone(self.pullreview.body_text) self.assertEqual(self.pullreview.id, 28482091) + self.assertIsNone(self.pullreview.node_id) self.assertEqual(self.pullreview.user.login, "jzelinskie") self.assertEqual(self.pullreview.body, "") self.assertEqual(self.pullreview.commit_id, "7a0fcb27b7cd6c346fc3f76216ccb6e0f4ca3bcc") diff --git a/tests/PullRequestReview1856.py b/tests/PullRequestReview1856.py index 3c39558c53..0bd1698393 100644 --- a/tests/PullRequestReview1856.py +++ b/tests/PullRequestReview1856.py @@ -2,6 +2,7 @@ # # # Copyright 2021 Claire Johns <42869556+johnsc1@users.noreply.github.com> # # Copyright 2023 Enrico Minack # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -25,13 +26,11 @@ class PullRequestReview1856(Framework.TestCase): - def setUp(self): - super().setUp() + def testDelete(self): pumpkin_repo = self.g.get_repo("CS481-Team-Pumpkin/PyGithub", lazy=True) - self.pumpkin_pull = pumpkin_repo.get_pull(4) - self.pullreview = self.pumpkin_pull.get_review(631460061) + pumpkin_pull = pumpkin_repo.get_pull(4) + pullreview = pumpkin_pull.get_review(631460061) - def testDelete(self): - self.pullreview.delete() - reviews = self.pumpkin_pull.get_reviews() + pullreview.delete() + reviews = pumpkin_pull.get_reviews() self.assertEqual(list(reviews), []) diff --git a/tests/Reaction.py b/tests/Reaction.py index cdfd79acca..031fb4dc26 100644 --- a/tests/Reaction.py +++ b/tests/Reaction.py @@ -14,6 +14,7 @@ # Copyright 2020 Steve Kowalik # # Copyright 2023 Enrico Minack # # Copyright 2023 Jirka Borovec <6035284+Borda@users.noreply.github.com> # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -33,6 +34,8 @@ # # ################################################################################ +from __future__ import annotations + from datetime import datetime, timezone from . import Framework @@ -44,16 +47,18 @@ def setUp(self): self.reactions = self.g.get_user("PyGithub").get_repo("PyGithub").get_issue(28).get_reactions() def testAttributes(self): - self.assertEqual(self.reactions[0].content, "+1") + reaction = self.reactions[0] + self.assertEqual(reaction.content, "+1") self.assertEqual( - self.reactions[0].created_at, + reaction.created_at, datetime(2017, 12, 5, 1, 59, 33, tzinfo=timezone.utc), ) - self.assertEqual(self.reactions[0].id, 16916340) - self.assertEqual(self.reactions[0].user.login, "nicolastrres") + self.assertEqual(reaction.id, 16916340) + self.assertIsNone(reaction.node_id) + self.assertEqual(reaction.user.login, "nicolastrres") self.assertEqual( - self.reactions[0].__repr__(), + reaction.__repr__(), 'Reaction(user=NamedUser(login="nicolastrres"), id=16916340)', ) diff --git a/tests/ReleaseAsset.py b/tests/ReleaseAsset.py index 38d0b16720..e102ade1a2 100644 --- a/tests/ReleaseAsset.py +++ b/tests/ReleaseAsset.py @@ -9,6 +9,7 @@ # Copyright 2020 Steve Kowalik # # Copyright 2023 Enrico Minack # # Copyright 2025 Alex Olieman # +# Copyright 2025 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # diff --git a/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt b/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt index 43ffbff2c4..0d0cd38266 100644 --- a/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt +++ b/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/klmitch/turnstile/commits/38d9082a898d0822b5ccdfd78f3a536e2efa6c26 +/repos/klmitch/turnstile/commits/38d9082a898d0822b5ccdfd78f3a536e2efa6c26?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/Branch.testCommitCommentsOnLine.txt b/tests/ReplayData/Branch.testCommitCommentsOnLine.txt index 6fa1406988..0029be4678 100644 --- a/tests/ReplayData/Branch.testCommitCommentsOnLine.txt +++ b/tests/ReplayData/Branch.testCommitCommentsOnLine.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/commits/6945921c529be14c3a8f566dd1e483674516d46d +/repos/jacquev6/PyGithub/commits/6945921c529be14c3a8f566dd1e483674516d46d?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/CheckRun.setUp.txt b/tests/ReplayData/CheckRun.setUp.txt index 5de57f19e9..19d7e34436 100644 --- a/tests/ReplayData/CheckRun.setUp.txt +++ b/tests/ReplayData/CheckRun.setUp.txt @@ -35,7 +35,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/10a7135a04f71e6101f8b013aded8a662d08fd1f +/repos/PyGithub/PyGithub/commits/10a7135a04f71e6101f8b013aded8a662d08fd1f?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/CheckSuite.setUp.txt b/tests/ReplayData/CheckSuite.setUp.txt index 1d970c271f..88babe1c73 100644 --- a/tests/ReplayData/CheckSuite.setUp.txt +++ b/tests/ReplayData/CheckSuite.setUp.txt @@ -46,7 +46,7 @@ https GET api.github.com None -/repos/wrecker/PySample/commits/fd09d934bcce792176d6b79d6d0387e938b62b7a +/repos/wrecker/PySample/commits/fd09d934bcce792176d6b79d6d0387e938b62b7a?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/CodeScanAlert.setUp.txt b/tests/ReplayData/CodeScanAlert.setUp.txt new file mode 100644 index 0000000000..7276ccf0ed --- /dev/null +++ b/tests/ReplayData/CodeScanAlert.setUp.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 23:05:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"9267fb16aef510a76e800d81acfe4c7ccb581d5c6ba15b42bff5f90684799c8e"'), ('Last-Modified', 'Mon, 25 Aug 2025 16:02:23 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1756165394'), ('X-RateLimit-Used', '7'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '7BBF:162923:9B73B54:A21710F:68ACEC44')] +{"id":1007386278,"node_id":"R_kgDOPAt-pg","name":"PyGithub","full_name":"matt-davis27/PyGithub","private":false,"owner":{"login":"matt-davis27","id":35502728,"node_id":"MDQ6VXNlcjM1NTAyNzI4","avatar_url":"https://avatars.githubusercontent.com/u/35502728?v=4","gravatar_id":"","url":"https://api.github.com/users/matt-davis27","html_url":"https://github.com/matt-davis27","followers_url":"https://api.github.com/users/matt-davis27/followers","following_url":"https://api.github.com/users/matt-davis27/following{/other_user}","gists_url":"https://api.github.com/users/matt-davis27/gists{/gist_id}","starred_url":"https://api.github.com/users/matt-davis27/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matt-davis27/subscriptions","organizations_url":"https://api.github.com/users/matt-davis27/orgs","repos_url":"https://api.github.com/users/matt-davis27/repos","events_url":"https://api.github.com/users/matt-davis27/events{/privacy}","received_events_url":"https://api.github.com/users/matt-davis27/received_events","type":"User","user_view_type":"public","site_admin":false},"html_url":"https://github.com/matt-davis27/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/matt-davis27/PyGithub","forks_url":"https://api.github.com/repos/matt-davis27/PyGithub/forks","keys_url":"https://api.github.com/repos/matt-davis27/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matt-davis27/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matt-davis27/PyGithub/teams","hooks_url":"https://api.github.com/repos/matt-davis27/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/matt-davis27/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/matt-davis27/PyGithub/events","assignees_url":"https://api.github.com/repos/matt-davis27/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/matt-davis27/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/matt-davis27/PyGithub/tags","blobs_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matt-davis27/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/matt-davis27/PyGithub/languages","stargazers_url":"https://api.github.com/repos/matt-davis27/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/matt-davis27/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/matt-davis27/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/matt-davis27/PyGithub/subscription","commits_url":"https://api.github.com/repos/matt-davis27/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/matt-davis27/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/matt-davis27/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/matt-davis27/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/matt-davis27/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matt-davis27/PyGithub/merges","archive_url":"https://api.github.com/repos/matt-davis27/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matt-davis27/PyGithub/downloads","issues_url":"https://api.github.com/repos/matt-davis27/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/matt-davis27/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/matt-davis27/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/matt-davis27/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matt-davis27/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/matt-davis27/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/matt-davis27/PyGithub/deployments","created_at":"2025-06-23T23:14:58Z","updated_at":"2025-08-25T16:02:23Z","pushed_at":"2025-08-25T16:02:19Z","git_url":"git://github.com/matt-davis27/PyGithub.git","ssh_url":"git@github.com:matt-davis27/PyGithub.git","clone_url":"https://github.com/matt-davis27/PyGithub.git","svn_url":"https://github.com/matt-davis27/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":18014,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2025-08-25T18:26:34Z","pushed_at":"2025-08-25T19:55:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":20046,"stargazers_count":7490,"watchers_count":7490,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1854,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":357,"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":1854,"open_issues":357,"watchers":7490,"default_branch":"main"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2025-08-25T18:26:34Z","pushed_at":"2025-08-25T19:55:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":20046,"stargazers_count":7490,"watchers_count":7490,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1854,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":357,"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":1854,"open_issues":357,"watchers":7490,"default_branch":"main"},"security_and_analysis":{"secret_scanning":{"status":"enabled"},"secret_scanning_push_protection":{"status":"enabled"},"dependabot_security_updates":{"status":"disabled"},"secret_scanning_non_provider_patterns":{"status":"disabled"},"secret_scanning_validity_checks":{"status":"disabled"}},"network_count":1854,"subscribers_count":0} diff --git a/tests/ReplayData/CodeScanAlert.testAttributes.txt b/tests/ReplayData/CodeScanAlert.testAttributes.txt new file mode 100644 index 0000000000..ed882ae7ff --- /dev/null +++ b/tests/ReplayData/CodeScanAlert.testAttributes.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/code-scanning/alerts/1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 20:30:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"63dd9374b8f550fa017a2cbe746d5c8ba70ee62a55f06d6ea667d685f9a45763"'), ('Last-Modified', 'Mon, 25 Aug 2025 16:03:10 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:repo_hook, delete_repo, read:repo_hook, repo, repo:invite, repo:status, repo_deployment, security_events, write:repo_hook'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1756157441'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'C871:9566D:40632F:41D263:68ACC7F1')] +{"number":1,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/1","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":12,"end_line":29,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1/instances","dismissal_approved_by":null} diff --git a/tests/ReplayData/CodeScanAlert.testGetAlertsWithArguments.txt b/tests/ReplayData/CodeScanAlert.testGetAlertsWithArguments.txt new file mode 100644 index 0000000000..68a2220386 --- /dev/null +++ b/tests/ReplayData/CodeScanAlert.testGetAlertsWithArguments.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/code-scanning/alerts?tool_name=CodeQL&ref=refs%2Fheads%2Fmain&sort=created&direction=asc&state=fixed&severity=medium +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 23:04:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"4fb9cbc8ed6e3baea85765513780da0228875dd91b67db5b4db15f07bb1b7814"'), ('Last-Modified', 'Mon, 25 Aug 2025 16:03:10 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:repo_hook, delete_repo, read:repo_hook, repo, repo:invite, repo:status, repo_deployment, security_events, write:repo_hook'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 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', '1756165394'), ('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', '12FB:8E8AE:1198453:12E71C7:68ACEBEE')] +[{"number":1,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/1","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":12,"end_line":29,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1/instances","dismissal_approved_by":null},{"number":2,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/2","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/2","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/ci.yml","start_line":15,"end_line":19,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/2/instances","dismissal_approved_by":null},{"number":3,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/3","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/3","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":20,"end_line":53,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/3/instances","dismissal_approved_by":null},{"number":5,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/5","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/5","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":30,"end_line":48,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/5/instances","dismissal_approved_by":null},{"number":6,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/6","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/6","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/ci.yml","start_line":56,"end_line":70,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/6/instances","dismissal_approved_by":null},{"number":7,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/7","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/7","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":49,"end_line":58,"start_column":5,"end_column":37},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/7/instances","dismissal_approved_by":null},{"number":8,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/8","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/8","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":71,"end_line":107,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/8/instances","dismissal_approved_by":null},{"number":11,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/11","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/11","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":108,"end_line":144,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/11/instances","dismissal_approved_by":null},{"number":12,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/12","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/12","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":145,"end_line":168,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/12/instances","dismissal_approved_by":null},{"number":14,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/14","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/14","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/ci.yml","start_line":169,"end_line":176,"start_column":5,"end_column":42},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/14/instances","dismissal_approved_by":null}] diff --git a/tests/ReplayData/CodeScanAlert.testMultipleAlerts.txt b/tests/ReplayData/CodeScanAlert.testMultipleAlerts.txt new file mode 100644 index 0000000000..b249d9e29a --- /dev/null +++ b/tests/ReplayData/CodeScanAlert.testMultipleAlerts.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/code-scanning/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 22:43:15 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/"d53ff5dd904343ffe2da8e911bc3acf5bdba689cfd92aeb7f001fa80c5c9cee5"'), ('Last-Modified', 'Mon, 25 Aug 2025 16:03:10 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:repo_hook, delete_repo, read:repo_hook, repo, repo:invite, repo:status, repo_deployment, security_events, write:repo_hook'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1756165394'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '57B9:2EA5A7:BFFB5C:C472C1:68ACE702')] +[{"number":14,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/14","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/14","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/ci.yml","start_line":169,"end_line":176,"start_column":5,"end_column":42},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/14/instances","dismissal_approved_by":null},{"number":13,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-22T23:38:23Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/13","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/13","state":"open","fixed_at":null,"dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"open","commit_sha":"20a0e348143cc9f47432d087a62ad5c2a4040fe2","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/top-issues.yaml","start_line":9,"end_line":23,"start_column":5,"end_column":29},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/13/instances","dismissal_approved_by":null},{"number":12,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/12","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/12","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":145,"end_line":168,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/12/instances","dismissal_approved_by":null},{"number":11,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/11","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/11","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":108,"end_line":144,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/11/instances","dismissal_approved_by":null},{"number":10,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-22T23:38:23Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/10","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/10","state":"open","fixed_at":null,"dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"open","commit_sha":"20a0e348143cc9f47432d087a62ad5c2a4040fe2","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/pypi-release.yml","start_line":14,"end_line":29,"start_column":5,"end_column":34},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/10/instances","dismissal_approved_by":null},{"number":9,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-22T23:38:23Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/9","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/9","state":"open","fixed_at":null,"dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"open","commit_sha":"20a0e348143cc9f47432d087a62ad5c2a4040fe2","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/pypi-release.yml","start_line":9,"end_line":13,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/9/instances","dismissal_approved_by":null},{"number":8,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/8","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/8","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":71,"end_line":107,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/8/instances","dismissal_approved_by":null},{"number":7,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/7","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/7","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":49,"end_line":58,"start_column":5,"end_column":37},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/7/instances","dismissal_approved_by":null},{"number":6,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/6","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/6","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/ci.yml","start_line":56,"end_line":70,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/6/instances","dismissal_approved_by":null},{"number":5,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/5","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/5","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":30,"end_line":48,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/5/instances","dismissal_approved_by":null},{"number":4,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-22T23:38:23Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/4","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/4","state":"open","fixed_at":null,"dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"open","commit_sha":"20a0e348143cc9f47432d087a62ad5c2a4040fe2","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/_build-pkg.yml","start_line":14,"end_line":32,"start_column":5,"end_column":22},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/4/instances","dismissal_approved_by":null},{"number":3,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/3","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/3","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/ci.yml","start_line":20,"end_line":53,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/3/instances","dismissal_approved_by":null},{"number":2,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/2","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/2","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{}}"},"location":{"path":".github/workflows/ci.yml","start_line":15,"end_line":19,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/2/instances","dismissal_approved_by":null},{"number":1,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/1","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":12,"end_line":29,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1/instances","dismissal_approved_by":null}] diff --git a/tests/ReplayData/CodeScanAlert.testRepr.txt b/tests/ReplayData/CodeScanAlert.testRepr.txt new file mode 100644 index 0000000000..ad2594ea9f --- /dev/null +++ b/tests/ReplayData/CodeScanAlert.testRepr.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/code-scanning/alerts/1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 22:52:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"63dd9374b8f550fa017a2cbe746d5c8ba70ee62a55f06d6ea667d685f9a45763"'), ('Last-Modified', 'Mon, 25 Aug 2025 16:03:10 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:repo_hook, delete_repo, read:repo_hook, repo, repo:invite, repo:status, repo_deployment, security_events, write:repo_hook'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 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', '1756165394'), ('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', 'A3B8:9566D:CEB68D:D365E8:68ACE942')] +{"number":1,"created_at":"2025-08-22T23:38:23Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1","html_url":"https://github.com/matt-davis27/PyGithub/security/code-scanning/1","state":"fixed","fixed_at":"2025-08-25T16:03:09Z","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"actions/missing-workflow-permissions","severity":"warning","description":"Workflow does not contain permissions","name":"actions/missing-workflow-permissions","tags":["actions","external/cwe/cwe-275","maintainability","security"],"full_description":"Workflows should contain explicit permissions to restrict the scope of the default GITHUB_TOKEN.","help":"## Overview\n\nIf a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`.\n\n## Recommendation\n\nAdd the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task.\n\n## Example\n\n### Incorrect Usage\n\n```yaml\nname: \"My workflow\"\n# No permissions block\n```\n\n### Correct Usage\n\n```yaml\nname: \"My workflow\"\npermissions:\n contents: read\n pull-requests: write\n```\n\nor\n\n```yaml\njobs:\n my-job:\n permissions:\n contents: read\n pull-requests: write\n```\n\n## References\n\n- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs).\n","security_severity_level":"medium"},"tool":{"name":"CodeQL","guid":null,"version":"2.22.4"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql.yml:analyze","environment":"{\"build-mode\":\"none\",\"language\":\"actions\"}","category":"/language:actions","state":"fixed","commit_sha":"908396804d41cdb1d0c0538b97f25a81383ee61b","message":{"text":"Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}"},"location":{"path":".github/workflows/lint.yml","start_line":12,"end_line":29,"start_column":5,"end_column":3},"classifications":[]},"instances_url":"https://api.github.com/repos/matt-davis27/PyGithub/code-scanning/alerts/1/instances","dismissal_approved_by":null} diff --git a/tests/ReplayData/Commit.setUp.txt b/tests/ReplayData/Commit.setUp.txt index c9b9cae049..bc5a0f3777 100644 --- a/tests/ReplayData/Commit.setUp.txt +++ b/tests/ReplayData/Commit.setUp.txt @@ -24,7 +24,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a +/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/Commit.testGetBranchesWhereHead.txt b/tests/ReplayData/Commit.testGetBranchesWhereHead.txt index 45e829d213..2ed0b19579 100644 --- a/tests/ReplayData/Commit.testGetBranchesWhereHead.txt +++ b/tests/ReplayData/Commit.testGetBranchesWhereHead.txt @@ -13,7 +13,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9 +/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/Commit.testGetPulls.txt b/tests/ReplayData/Commit.testGetPulls.txt index c30c5f2ef9..6f10020b72 100644 --- a/tests/ReplayData/Commit.testGetPulls.txt +++ b/tests/ReplayData/Commit.testGetPulls.txt @@ -24,7 +24,7 @@ https GET api.github.com None -/repos/mawkee/PyGithub/commits/e44d11d565c022496544dd6ed1f19a8d718c2b0c +/repos/mawkee/PyGithub/commits/e44d11d565c022496544dd6ed1f19a8d718c2b0c?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/CommitCombinedStatus.setUp.txt b/tests/ReplayData/CommitCombinedStatus.setUp.txt index ee6cf6898f..d7c7c2a9e8 100644 --- a/tests/ReplayData/CommitCombinedStatus.setUp.txt +++ b/tests/ReplayData/CommitCombinedStatus.setUp.txt @@ -1,14 +1,3 @@ -https -GET -api.github.com -None -/repos/edx/edx-platform/commits/74e70119a23fa3ffb3db19d4590eccfebd72b659 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('content-length', '18854'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-served-by', '593010132f82159af0ded24b4932e109'), ('x-oauth-scopes', 'notifications, public_repo, read:org, read:public_key, read:repo_hook, repo:status, repo_deployment'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"8e937a4cbcbaef182ddf483ee99a599f"'), ('access-control-allow-credentials', 'true'), ('status', '200 OK'), ('x-ratelimit-remaining', '4993'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', '12B0076B:2073:5CF629E:56A6A81E'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('last-modified', 'Mon, 14 Dec 2015 12:42:38 GMT'), ('date', 'Mon, 25 Jan 2016 22:56:31 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1453765330')] -{"sha":"74e70119a23fa3ffb3db19d4590eccfebd72b659","commit":{"author":{"name":"John Eskew","email":"jeskew@edx.org","date":"2015-12-04T22:39:27Z"},"committer":{"name":"John Eskew","email":"jeskew@edx.org","date":"2015-12-14T12:42:38Z"},"message":"Use a common MongoDB connection function.\nAdd some missing @autoretry_read() decorators.\nChange to PyMongo 3.x-compatible syntax.","tree":{"sha":"7712c0f7c0c21f706bcbed393f3de71d854d59df","url":"https://api.github.com/repos/edx/edx-platform/git/trees/7712c0f7c0c21f706bcbed393f3de71d854d59df"},"url":"https://api.github.com/repos/edx/edx-platform/git/commits/74e70119a23fa3ffb3db19d4590eccfebd72b659","comment_count":0},"url":"https://api.github.com/repos/edx/edx-platform/commits/74e70119a23fa3ffb3db19d4590eccfebd72b659","html_url":"https://github.com/edx/edx-platform/commit/74e70119a23fa3ffb3db19d4590eccfebd72b659","comments_url":"https://api.github.com/repos/edx/edx-platform/commits/74e70119a23fa3ffb3db19d4590eccfebd72b659/comments","author":{"login":"doctoryes","id":7285237,"avatar_url":"https://avatars.githubusercontent.com/u/7285237?v=3","gravatar_id":"","url":"https://api.github.com/users/doctoryes","html_url":"https://github.com/doctoryes","followers_url":"https://api.github.com/users/doctoryes/followers","following_url":"https://api.github.com/users/doctoryes/following{/other_user}","gists_url":"https://api.github.com/users/doctoryes/gists{/gist_id}","starred_url":"https://api.github.com/users/doctoryes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/doctoryes/subscriptions","organizations_url":"https://api.github.com/users/doctoryes/orgs","repos_url":"https://api.github.com/users/doctoryes/repos","events_url":"https://api.github.com/users/doctoryes/events{/privacy}","received_events_url":"https://api.github.com/users/doctoryes/received_events","type":"User","site_admin":false},"committer":{"login":"doctoryes","id":7285237,"avatar_url":"https://avatars.githubusercontent.com/u/7285237?v=3","gravatar_id":"","url":"https://api.github.com/users/doctoryes","html_url":"https://github.com/doctoryes","followers_url":"https://api.github.com/users/doctoryes/followers","following_url":"https://api.github.com/users/doctoryes/following{/other_user}","gists_url":"https://api.github.com/users/doctoryes/gists{/gist_id}","starred_url":"https://api.github.com/users/doctoryes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/doctoryes/subscriptions","organizations_url":"https://api.github.com/users/doctoryes/orgs","repos_url":"https://api.github.com/users/doctoryes/repos","events_url":"https://api.github.com/users/doctoryes/events{/privacy}","received_events_url":"https://api.github.com/users/doctoryes/received_events","type":"User","site_admin":false},"parents":[{"sha":"86227e7711c011490f1db6fdfcc17401511e5ee5","url":"https://api.github.com/repos/edx/edx-platform/commits/86227e7711c011490f1db6fdfcc17401511e5ee5","html_url":"https://github.com/edx/edx-platform/commit/86227e7711c011490f1db6fdfcc17401511e5ee5"}],"stats":{"total":192,"additions":112,"deletions":80},"files":[{"sha":"56ccd039ccff39e297523966c340f1be74876af8","filename":"common/lib/xmodule/xmodule/contentstore/mongo.py","status":"modified","additions":34,"deletions":30,"changes":64,"blob_url":"https://github.com/edx/edx-platform/blob/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/contentstore/mongo.py","raw_url":"https://github.com/edx/edx-platform/raw/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/contentstore/mongo.py","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/common/lib/xmodule/xmodule/contentstore/mongo.py?ref=74e70119a23fa3ffb3db19d4590eccfebd72b659","patch":"@@ -1,52 +1,50 @@\n+\"\"\"\n+MongoDB/GridFS-level code for the contentstore.\n+\"\"\"\n+import os\n+import json\n import pymongo\n import gridfs\n from gridfs.errors import NoFile\n-\n-from xmodule.contentstore.content import XASSET_LOCATION_TAG\n-\n-import logging\n-\n-from .content import StaticContent, ContentStore, StaticContentStream\n-from xmodule.exceptions import NotFoundError\n from fs.osfs import OSFS\n-import os\n-import json\n from bson.son import SON\n+\n+from mongodb_proxy import autoretry_read\n from opaque_keys.edx.keys import AssetKey\n+from xmodule.contentstore.content import XASSET_LOCATION_TAG\n+from xmodule.exceptions import NotFoundError\n from xmodule.modulestore.django import ASSET_IGNORE_REGEX\n from xmodule.util.misc import escape_invalid_characters\n+from xmodule.mongo_connection import connect_to_mongodb\n+from .content import StaticContent, ContentStore, StaticContentStream\n \n \n class MongoContentStore(ContentStore):\n-\n- # pylint: disable=unused-argument\n- def __init__(self, host, db, port=27017, user=None, password=None, bucket='fs', collection=None, **kwargs):\n+ \"\"\"\n+ MongoDB-backed ContentStore.\n+ \"\"\"\n+ # pylint: disable=unused-argument, bad-continuation\n+ def __init__(\n+ self, host, db,\n+ port=27017, tz_aware=True, user=None, password=None, bucket='fs', collection=None, **kwargs\n+ ):\n \"\"\"\n Establish the connection with the mongo backend and connect to the collections\n \n :param collection: ignores but provided for consistency w/ other doc_store_config patterns\n \"\"\"\n- logging.debug('Using MongoDB for static content serving at host={0} port={1} db={2}'.format(host, port, db))\n-\n- # Remove the replicaSet parameter.\n- kwargs.pop('replicaSet', None)\n-\n- _db = pymongo.database.Database(\n- pymongo.MongoClient(\n- host=host,\n- port=port,\n- document_class=dict,\n- **kwargs\n- ),\n- db\n+ # GridFS will throw an exception if the Database is wrapped in a MongoProxy. So don't wrap it.\n+ # The appropriate methods below are marked as autoretry_read - those methods will handle\n+ # the AutoReconnect errors.\n+ proxy = False\n+ mongo_db = connect_to_mongodb(\n+ db, host,\n+ port=port, tz_aware=tz_aware, user=user, password=password, proxy=proxy, **kwargs\n )\n \n- if user is not None and password is not None:\n- _db.authenticate(user, password)\n-\n- self.fs = gridfs.GridFS(_db, bucket)\n+ self.fs = gridfs.GridFS(mongo_db, bucket) # pylint: disable=invalid-name\n \n- self.fs_files = _db[bucket + \".files\"] # the underlying collection GridFS uses\n+ self.fs_files = mongo_db[bucket + \".files\"] # the underlying collection GridFS uses\n \n def close_connections(self):\n \"\"\"\n@@ -86,11 +84,15 @@ def save(self, content):\n return content\n \n def delete(self, location_or_id):\n+ \"\"\"\n+ Delete an asset.\n+ \"\"\"\n if isinstance(location_or_id, AssetKey):\n location_or_id, _ = self.asset_db_key(location_or_id)\n # Deletes of non-existent files are considered successful\n self.fs.delete(location_or_id)\n \n+ @autoretry_read()\n def find(self, location, throw_on_not_found=True, as_stream=False):\n content_id, __ = self.asset_db_key(location)\n \n@@ -206,6 +208,7 @@ def remove_redundant_content_for_courses(self):\n self.fs_files.remove(query)\n return assets_to_delete\n \n+ @autoretry_read()\n def _get_all_content_for_course(self,\n course_key,\n get_thumbnails=False,\n@@ -288,6 +291,7 @@ def set_attrs(self, location, attr_dict):\n if not result.get('updatedExisting', True):\n raise NotFoundError(asset_db_key)\n \n+ @autoretry_read()\n def get_attrs(self, location):\n \"\"\"\n Gets all of the attributes associated with the given asset. Note, returns even built in attrs"},{"sha":"4bcdfa15a878dc6b413ab093f5edc685096c1dfa","filename":"common/lib/xmodule/xmodule/modulestore/mongo/base.py","status":"modified","additions":15,"deletions":24,"changes":39,"blob_url":"https://github.com/edx/edx-platform/blob/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/modulestore/mongo/base.py","raw_url":"https://github.com/edx/edx-platform/raw/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/modulestore/mongo/base.py","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/common/lib/xmodule/xmodule/modulestore/mongo/base.py?ref=74e70119a23fa3ffb3db19d4590eccfebd72b659","patch":"@@ -22,7 +22,7 @@\n from bson.son import SON\n from datetime import datetime\n from fs.osfs import OSFS\n-from mongodb_proxy import MongoProxy, autoretry_read\n+from mongodb_proxy import autoretry_read\n from path import Path as path\n from pytz import UTC\n from contracts import contract, new_contract\n@@ -43,6 +43,7 @@\n from xmodule.errortracker import null_error_tracker, exc_info_to_str\n from xmodule.exceptions import HeartbeatFailure\n from xmodule.mako_module import MakoDescriptorSystem\n+from xmodule.mongo_connection import connect_to_mongodb\n from xmodule.modulestore import ModuleStoreWriteBase, ModuleStoreEnum, BulkOperationsMixin, BulkOpsRecord\n from xmodule.modulestore.draft_and_published import ModuleStoreDraftAndPublished, DIRECT_ONLY_CATEGORIES\n from xmodule.modulestore.edit_info import EditInfoRuntimeMixin\n@@ -558,22 +559,16 @@ def do_connection(\n \"\"\"\n Create & open the connection, authenticate, and provide pointers to the collection\n \"\"\"\n- # Remove the replicaSet parameter.\n- kwargs.pop('replicaSet', None)\n-\n- self.database = MongoProxy(\n- pymongo.database.Database(\n- pymongo.MongoClient(\n- host=host,\n- port=port,\n- tz_aware=tz_aware,\n- document_class=dict,\n- **kwargs\n- ),\n- db\n- ),\n- wait_time=retry_wait_time\n+ # Set a write concern of 1, which makes writes complete successfully to the primary\n+ # only before returning. Also makes pymongo report write errors.\n+ kwargs['w'] = 1\n+\n+ self.database = connect_to_mongodb(\n+ db, host,\n+ port=port, tz_aware=tz_aware, user=user, password=password,\n+ retry_wait_time=retry_wait_time, **kwargs\n )\n+\n self.collection = self.database[collection]\n \n # Collection which stores asset metadata.\n@@ -581,14 +576,8 @@ def do_connection(\n asset_collection = self.DEFAULT_ASSET_COLLECTION_NAME\n self.asset_collection = self.database[asset_collection]\n \n- if user is not None and password is not None:\n- self.database.authenticate(user, password)\n-\n do_connection(**doc_store_config)\n \n- # Force mongo to report errors, at the expense of performance\n- self.collection.write_concern = {'w': 1}\n-\n if default_class is not None:\n module_path, _, class_name = default_class.rpartition('.')\n class_ = getattr(import_module(module_path), class_name)\n@@ -1012,6 +1001,7 @@ def get_courses(self, **kwargs):\n )\n return [course for course in base_list if not isinstance(course, ErrorDescriptor)]\n \n+ @autoretry_read()\n def _find_one(self, location):\n '''Look for a given location in the collection. If the item is not present, raise\n ItemNotFoundError.\n@@ -1052,6 +1042,7 @@ def get_course(self, course_key, depth=0, **kwargs):\n except ItemNotFoundError:\n return None\n \n+ @autoretry_read()\n def has_course(self, course_key, ignore_case=False, **kwargs):\n \"\"\"\n Returns the course_id of the course if it was found, else None\n@@ -1073,7 +1064,7 @@ def has_course(self, course_key, ignore_case=False, **kwargs):\n course_query[key] = re.compile(r\"(?i)^{}$\".format(course_query[key]))\n else:\n course_query = {'_id': location.to_deprecated_son()}\n- course = self.collection.find_one(course_query, fields={'_id': True})\n+ course = self.collection.find_one(course_query, projection={'_id': True})\n if course:\n return SlashSeparatedCourseKey(course['_id']['org'], course['_id']['course'], course['_id']['name'])\n else:\n@@ -1234,7 +1225,7 @@ def create_course(self, org, course, run, user_id, fields=None, **kwargs):\n ('_id.course', re.compile(u'^{}$'.format(course_id.course), re.IGNORECASE)),\n ('_id.category', 'course'),\n ])\n- courses = self.collection.find(course_search_location, fields=('_id'))\n+ courses = self.collection.find(course_search_location, projection={'_id': True})\n if courses.count() > 0:\n raise DuplicateCourseError(course_id, courses[0]['_id'])\n "},{"sha":"1352ee95cd39a611a21a2e17dbc70da9b31af433","filename":"common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py","status":"modified","additions":10,"deletions":26,"changes":36,"blob_url":"https://github.com/edx/edx-platform/blob/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py","raw_url":"https://github.com/edx/edx-platform/raw/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py?ref=74e70119a23fa3ffb3db19d4590eccfebd72b659","patch":"@@ -23,10 +23,11 @@\n import dogstats_wrapper as dog_stats_api\n \n from contracts import check, new_contract\n-from mongodb_proxy import autoretry_read, MongoProxy\n+from mongodb_proxy import autoretry_read\n from xmodule.exceptions import HeartbeatFailure\n from xmodule.modulestore import BlockData\n from xmodule.modulestore.split_mongo import BlockKey\n+from xmodule.mongo_connection import connect_to_mongodb\n \n \n new_contract('BlockData', BlockData)\n@@ -287,37 +288,20 @@ def __init__(\n \"\"\"\n Create & open the connection, authenticate, and provide pointers to the collections\n \"\"\"\n- if kwargs.get('replicaSet') is None:\n- kwargs.pop('replicaSet', None)\n- mongo_class = pymongo.MongoClient\n- else:\n- mongo_class = pymongo.MongoReplicaSetClient\n- _client = mongo_class(\n- host=host,\n- port=port,\n- tz_aware=tz_aware,\n- **kwargs\n- )\n- self.database = MongoProxy(\n- pymongo.database.Database(_client, db),\n- wait_time=retry_wait_time\n- )\n+ # Set a write concern of 1, which makes writes complete successfully to the primary\n+ # only before returning. Also makes pymongo report write errors.\n+ kwargs['w'] = 1\n \n- if user is not None and password is not None:\n- self.database.authenticate(user, password)\n+ self.database = connect_to_mongodb(\n+ db, host,\n+ port=port, tz_aware=tz_aware, user=user, password=password,\n+ retry_wait_time=retry_wait_time, **kwargs\n+ )\n \n self.course_index = self.database[collection + '.active_versions']\n self.structures = self.database[collection + '.structures']\n self.definitions = self.database[collection + '.definitions']\n \n- # every app has write access to the db (v having a flag to indicate r/o v write)\n- # Force mongo to report errors, at the expense of performance\n- # pymongo docs suck but explanation:\n- # http://api.mongodb.org/java/2.10.1/com/mongodb/WriteConcern.html\n- self.course_index.write_concern = {'w': 1}\n- self.structures.write_concern = {'w': 1}\n- self.definitions.write_concern = {'w': 1}\n-\n def heartbeat(self):\n \"\"\"\n Check that the db is reachable."},{"sha":"ea353a60b6af9226ce7676495d9572831d99fbd9","filename":"common/lib/xmodule/xmodule/mongo_connection.py","status":"added","additions":53,"deletions":0,"changes":53,"blob_url":"https://github.com/edx/edx-platform/blob/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/mongo_connection.py","raw_url":"https://github.com/edx/edx-platform/raw/74e70119a23fa3ffb3db19d4590eccfebd72b659/common/lib/xmodule/xmodule/mongo_connection.py","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/common/lib/xmodule/xmodule/mongo_connection.py?ref=74e70119a23fa3ffb3db19d4590eccfebd72b659","patch":"@@ -0,0 +1,53 @@\n+\"\"\"\n+Common MongoDB connection functions.\n+\"\"\"\n+import pymongo\n+from mongodb_proxy import MongoProxy\n+\n+\n+# pylint: disable=bad-continuation\n+def connect_to_mongodb(\n+ db, host,\n+ port=27017, tz_aware=True, user=None, password=None,\n+ retry_wait_time=0.1, proxy=True, **kwargs\n+):\n+ \"\"\"\n+ Returns a MongoDB Database connection, optionally wrapped in a proxy. The proxy\n+ handles AutoReconnect errors by retrying read operations, since these exceptions\n+ typically indicate a temporary step-down condition for MongoDB.\n+ \"\"\"\n+ # The MongoReplicaSetClient class is deprecated in Mongo 3.x, in favor of using\n+ # the MongoClient class for all connections. Update/simplify this code when using\n+ # PyMongo 3.x.\n+ if kwargs.get('replicaSet'):\n+ # Enable reading from secondary nodes in the MongoDB replicaset by using the\n+ # MongoReplicaSetClient class.\n+ # The 'replicaSet' parameter in kwargs is required for secondary reads.\n+ # The read_preference should be set to a proper value, like SECONDARY_PREFERRED.\n+ mongo_client_class = pymongo.MongoReplicaSetClient\n+ else:\n+ # No 'replicaSet' in kwargs - so no secondary reads.\n+ mongo_client_class = pymongo.MongoClient\n+\n+ mongo_conn = pymongo.database.Database(\n+ mongo_client_class(\n+ host=host,\n+ port=port,\n+ tz_aware=tz_aware,\n+ document_class=dict,\n+ **kwargs\n+ ),\n+ db\n+ )\n+\n+ if proxy:\n+ mongo_conn = MongoProxy(\n+ mongo_conn,\n+ wait_time=retry_wait_time\n+ )\n+\n+ # If credentials were provided, authenticate the user.\n+ if user is not None and password is not None:\n+ mongo_conn.authenticate(user, password)\n+\n+ return mongo_conn"}]} - https GET api.github.com diff --git a/tests/ReplayData/CommitStatus.setUp.txt b/tests/ReplayData/CommitStatus.setUp.txt index ba24e063ac..1337875c9e 100644 --- a/tests/ReplayData/CommitStatus.setUp.txt +++ b/tests/ReplayData/CommitStatus.setUp.txt @@ -24,7 +24,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a +/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsFiles.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsFiles.txt new file mode 100644 index 0000000000..a342df2651 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsFiles.txt @@ -0,0 +1,87 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E6F2:175278:1570AEF:136C7FD:695FAC26')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4994'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '6'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F958:32C410:155258D:134FA60:695FAC27')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '7'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FDE0:1F1B3F:1470F28:1271C2D:695FAC27')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:52 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/"60b4a587fa622fe254e0f944cd94e5a0e04f8632c24ee41a07ef62f8653003d9"'), ('Last-Modified', 'Thu, 08 Jan 2026 11:05:32 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '8'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F3CF:171972:159DCA6:1399E82:695FAC28')] +{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"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","user_view_type":"public","site_admin":false},"network_count":1872,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:52 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/"ba0dcfc4d5bf4480dca3c388f8d4e7e3bf5c25133d1bbaf719551b436d85d764"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '9'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E902:227F48:14FD9DD:13005F4:695FAC28')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370","id":2806945628,"node_id":"PR_kwDOADYVqs6nTpdc","html_url":"https://github.com/PyGithub/PyGithub/pull/3370","diff_url":"https://github.com/PyGithub/PyGithub/pull/3370.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/3370.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370","number":3370,"state":"closed","locked":false,"title":"Bump actions/setup-python from 5 to 6","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"body":"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n
\nRelease notes\n

Sourced from actions/setup-python's releases.

\n
\n

v6.0.0

\n

What's Changed

\n

Breaking Changes

\n\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\n

Enhancements:

\n\n

Bug fixes:

\n\n

Dependency updates:

\n\n

New Contributors

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\n

v5.6.0

\n

What's Changed

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\n

v5.5.0

\n

What's Changed

\n

Enhancements:

\n\n

Bug fixes:

\n\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • e797f83 Upgrade to node 24 (#1164)
  • \n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \n
  • 3c6f142 update documentation (#1156)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","created_at":"2025-09-08T06:01:05Z","updated_at":"2025-11-19T17:43:19Z","closed_at":"2025-11-19T17:43:18Z","merged_at":"2025-11-19T17:43:18Z","merge_commit_sha":"1f5f434b321e963171a27c13c1137cedb54cc4d0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":2144903025,"node_id":"MDU6TGFiZWwyMTQ0OTAzMDI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":2208559625,"node_id":"MDU6TGFiZWwyMjA4NTU5NjI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions","name":"github_actions","color":"000000","default":false,"description":"Pull requests that update Github_actions code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5","head":{"label":"PyGithub:dependabot/github_actions/actions/setup-python-6","ref":"dependabot/github_actions/actions/setup-python-6","sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","user":{"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},"repo":{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"default_branch":"main"}},"base":{"label":"PyGithub:main","ref":"main","sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","user":{"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},"repo":{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/3370"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"JLLeitschuh","id":1323708,"node_id":"MDQ6VXNlcjEzMjM3MDg=","avatar_url":"https://avatars.githubusercontent.com/u/1323708?v=4","gravatar_id":"","url":"https://api.github.com/users/JLLeitschuh","html_url":"https://github.com/JLLeitschuh","followers_url":"https://api.github.com/users/JLLeitschuh/followers","following_url":"https://api.github.com/users/JLLeitschuh/following{/other_user}","gists_url":"https://api.github.com/users/JLLeitschuh/gists{/gist_id}","starred_url":"https://api.github.com/users/JLLeitschuh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JLLeitschuh/subscriptions","organizations_url":"https://api.github.com/users/JLLeitschuh/orgs","repos_url":"https://api.github.com/users/JLLeitschuh/repos","events_url":"https://api.github.com/users/JLLeitschuh/events{/privacy}","received_events_url":"https://api.github.com/users/JLLeitschuh/received_events","type":"User","user_view_type":"public","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":7,"deletions":7,"changed_files":4} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:53 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/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '10'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F486:3866FC:148F90B:1299315:695FAC29')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:53 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4989'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '11'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EFB8:139E44:190AEEA:16A6A64:695FAC29')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:54 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '12'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F174:39729E:14EC642:12F4768:695FAC29')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsFilesDefault.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsFilesDefault.txt new file mode 100644 index 0000000000..156dc748ce --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsFilesDefault.txt @@ -0,0 +1,65 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:19:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F219:2CAD27:3497066:2F0EFFE:69625FFE')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:19:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '3'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EBA4:224637:3327A5B:2D9E6DA:69625FFE')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:19:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '4'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F804:2D20B4:3257AD3:2CA43A7:69625FFF')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Access-Control-Allow-Origin', '*'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Type', 'application/json; charset=utf-8'), ('Date', 'Sat, 10 Jan 2026 14:19:43 GMT'), ('ETag', 'W/"03ab304a7383b3ab29693397b3fde06783b89732715702830f70d81d8c66df68"'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('X-Content-Type-Options', 'nosniff'), ('X-Frame-Options', 'deny'), ('x-github-api-version-selected', '2022-11-28'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-XSS-Protection', '0'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FCAD:2C869E:3148D55:2BC37EF:69625FFF')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370","id":2806945628,"node_id":"PR_kwDOADYVqs6nTpdc","html_url":"https://github.com/PyGithub/PyGithub/pull/3370","diff_url":"https://github.com/PyGithub/PyGithub/pull/3370.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/3370.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370","number":3370,"state":"closed","locked":false,"title":"Bump actions/setup-python from 5 to 6","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"body":"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n
\nRelease notes\n

Sourced from actions/setup-python's releases.

\n
\n

v6.0.0

\n

What's Changed

\n

Breaking Changes

\n\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\n

Enhancements:

\n\n

Bug fixes:

\n\n

Dependency updates:

\n\n

New Contributors

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\n

v5.6.0

\n

What's Changed

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\n

v5.5.0

\n

What's Changed

\n

Enhancements:

\n\n

Bug fixes:

\n\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • e797f83 Upgrade to node 24 (#1164)
  • \n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \n
  • 3c6f142 update documentation (#1156)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","created_at":"2025-09-08T06:01:05Z","updated_at":"2025-11-19T17:43:19Z","closed_at":"2025-11-19T17:43:18Z","merged_at":"2025-11-19T17:43:18Z","merge_commit_sha":"1f5f434b321e963171a27c13c1137cedb54cc4d0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":2144903025,"node_id":"MDU6TGFiZWwyMTQ0OTAzMDI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":2208559625,"node_id":"MDU6TGFiZWwyMjA4NTU5NjI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions","name":"github_actions","color":"000000","default":false,"description":"Pull requests that update Github_actions code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5","head":{"label":"PyGithub:dependabot/github_actions/actions/setup-python-6","ref":"dependabot/github_actions/actions/setup-python-6","sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","user":{"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},"repo":{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"default_branch":"main"}},"base":{"label":"PyGithub:main","ref":"main","sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","user":{"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},"repo":{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/3370"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"JLLeitschuh","id":1323708,"node_id":"MDQ6VXNlcjEzMjM3MDg=","avatar_url":"https://avatars.githubusercontent.com/u/1323708?v=4","gravatar_id":"","url":"https://api.github.com/users/JLLeitschuh","html_url":"https://github.com/JLLeitschuh","followers_url":"https://api.github.com/users/JLLeitschuh/followers","following_url":"https://api.github.com/users/JLLeitschuh/following{/other_user}","gists_url":"https://api.github.com/users/JLLeitschuh/gists{/gist_id}","starred_url":"https://api.github.com/users/JLLeitschuh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JLLeitschuh/subscriptions","organizations_url":"https://api.github.com/users/JLLeitschuh/orgs","repos_url":"https://api.github.com/users/JLLeitschuh/repos","events_url":"https://api.github.com/users/JLLeitschuh/events{/privacy}","received_events_url":"https://api.github.com/users/JLLeitschuh/received_events","type":"User","user_view_type":"public","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":7,"deletions":7,"changed_files":4} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:19:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4994'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '6'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF10:3CA6C7:33B8E94:2E49A8E:69625FFF')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:19:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '7'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FC68:3CA6C7:33B9090:2E49C5E:69626000')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFiles.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFiles.txt new file mode 100644 index 0000000000..5767ed5793 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFiles.txt @@ -0,0 +1,87 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:57 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/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '19'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F97E:24CAFF:14CD6F2:12E2D19:695FAC2C')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:57 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF99:214438:14D4C14:12DC9F0:695FAC2D')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:57 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '21'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F7D2:32C410:1555366:135239F:695FAC2D')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:58 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/"60b4a587fa622fe254e0f944cd94e5a0e04f8632c24ee41a07ef62f8653003d9"'), ('Last-Modified', 'Thu, 08 Jan 2026 11:05:32 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '22'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F968:227F48:15000FE:1302955:695FAC2E')] +{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"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","user_view_type":"public","site_admin":false},"network_count":1872,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:58 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/"ba0dcfc4d5bf4480dca3c388f8d4e7e3bf5c25133d1bbaf719551b436d85d764"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '23'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F3D8:259EA9:15B40FD:13B53E5:695FAC2E')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370","id":2806945628,"node_id":"PR_kwDOADYVqs6nTpdc","html_url":"https://github.com/PyGithub/PyGithub/pull/3370","diff_url":"https://github.com/PyGithub/PyGithub/pull/3370.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/3370.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370","number":3370,"state":"closed","locked":false,"title":"Bump actions/setup-python from 5 to 6","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"body":"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n
\nRelease notes\n

Sourced from actions/setup-python's releases.

\n
\n

v6.0.0

\n

What's Changed

\n

Breaking Changes

\n\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\n

Enhancements:

\n\n

Bug fixes:

\n\n

Dependency updates:

\n\n

New Contributors

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\n

v5.6.0

\n

What's Changed

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\n

v5.5.0

\n

What's Changed

\n

Enhancements:

\n\n

Bug fixes:

\n\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • e797f83 Upgrade to node 24 (#1164)
  • \n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \n
  • 3c6f142 update documentation (#1156)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","created_at":"2025-09-08T06:01:05Z","updated_at":"2025-11-19T17:43:19Z","closed_at":"2025-11-19T17:43:18Z","merged_at":"2025-11-19T17:43:18Z","merge_commit_sha":"1f5f434b321e963171a27c13c1137cedb54cc4d0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":2144903025,"node_id":"MDU6TGFiZWwyMTQ0OTAzMDI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":2208559625,"node_id":"MDU6TGFiZWwyMjA4NTU5NjI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions","name":"github_actions","color":"000000","default":false,"description":"Pull requests that update Github_actions code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5","head":{"label":"PyGithub:dependabot/github_actions/actions/setup-python-6","ref":"dependabot/github_actions/actions/setup-python-6","sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","user":{"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},"repo":{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"default_branch":"main"}},"base":{"label":"PyGithub:main","ref":"main","sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","user":{"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},"repo":{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/3370"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"JLLeitschuh","id":1323708,"node_id":"MDQ6VXNlcjEzMjM3MDg=","avatar_url":"https://avatars.githubusercontent.com/u/1323708?v=4","gravatar_id":"","url":"https://api.github.com/users/JLLeitschuh","html_url":"https://github.com/JLLeitschuh","followers_url":"https://api.github.com/users/JLLeitschuh/followers","following_url":"https://api.github.com/users/JLLeitschuh/following{/other_user}","gists_url":"https://api.github.com/users/JLLeitschuh/gists{/gist_id}","starred_url":"https://api.github.com/users/JLLeitschuh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JLLeitschuh/subscriptions","organizations_url":"https://api.github.com/users/JLLeitschuh/orgs","repos_url":"https://api.github.com/users/JLLeitschuh/repos","events_url":"https://api.github.com/users/JLLeitschuh/events{/privacy}","received_events_url":"https://api.github.com/users/JLLeitschuh/received_events","type":"User","user_view_type":"public","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":7,"deletions":7,"changed_files":4} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:59 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/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EA8B:2C798C:14A7557:12AFAD8:695FAC2E')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:59 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '25'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F26D:22ED76:15944B1:1386126:695FAC2F')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:07:59 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4974'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '26'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'ED0F:383C17:1503FC8:130E5DB:695FAC2F')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFilesDefault.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFilesDefault.txt new file mode 100644 index 0000000000..4eee632510 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFilesDefault.txt @@ -0,0 +1,65 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:20:04 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/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '8'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F94D:3B9D0A:326A280:2CD7EAB:69626013')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=100 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:20:04 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/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '9'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E862:3CF7C1:312F3E0:2B9E610:69626014')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:20:04 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '10'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF9E:2C869E:314FA2F:2BC9602:69626014')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Access-Control-Allow-Origin', '*'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Type', 'application/json; charset=utf-8'), ('Date', 'Sat, 10 Jan 2026 14:20:05 GMT'), ('ETag', 'W/"03ab304a7383b3ab29693397b3fde06783b89732715702830f70d81d8c66df68"'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('X-Content-Type-Options', 'nosniff'), ('X-Frame-Options', 'deny'), ('x-github-api-version-selected', '2022-11-28'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-XSS-Protection', '0'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4989'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '11'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F174:3A95B:36AD317:31372E1:69626015')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370","id":2806945628,"node_id":"PR_kwDOADYVqs6nTpdc","html_url":"https://github.com/PyGithub/PyGithub/pull/3370","diff_url":"https://github.com/PyGithub/PyGithub/pull/3370.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/3370.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370","number":3370,"state":"closed","locked":false,"title":"Bump actions/setup-python from 5 to 6","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"body":"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n
\nRelease notes\n

Sourced from actions/setup-python's releases.

\n
\n

v6.0.0

\n

What's Changed

\n

Breaking Changes

\n\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\n

Enhancements:

\n\n

Bug fixes:

\n\n

Dependency updates:

\n\n

New Contributors

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\n

v5.6.0

\n

What's Changed

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\n

v5.5.0

\n

What's Changed

\n

Enhancements:

\n\n

Bug fixes:

\n\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • e797f83 Upgrade to node 24 (#1164)
  • \n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \n
  • 3c6f142 update documentation (#1156)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","created_at":"2025-09-08T06:01:05Z","updated_at":"2025-11-19T17:43:19Z","closed_at":"2025-11-19T17:43:18Z","merged_at":"2025-11-19T17:43:18Z","merge_commit_sha":"1f5f434b321e963171a27c13c1137cedb54cc4d0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":2144903025,"node_id":"MDU6TGFiZWwyMTQ0OTAzMDI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":2208559625,"node_id":"MDU6TGFiZWwyMjA4NTU5NjI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions","name":"github_actions","color":"000000","default":false,"description":"Pull requests that update Github_actions code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5","head":{"label":"PyGithub:dependabot/github_actions/actions/setup-python-6","ref":"dependabot/github_actions/actions/setup-python-6","sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","user":{"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},"repo":{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"default_branch":"main"}},"base":{"label":"PyGithub:main","ref":"main","sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","user":{"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},"repo":{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/3370"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"JLLeitschuh","id":1323708,"node_id":"MDQ6VXNlcjEzMjM3MDg=","avatar_url":"https://avatars.githubusercontent.com/u/1323708?v=4","gravatar_id":"","url":"https://api.github.com/users/JLLeitschuh","html_url":"https://github.com/JLLeitschuh","followers_url":"https://api.github.com/users/JLLeitschuh/followers","following_url":"https://api.github.com/users/JLLeitschuh/following{/other_user}","gists_url":"https://api.github.com/users/JLLeitschuh/gists{/gist_id}","starred_url":"https://api.github.com/users/JLLeitschuh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JLLeitschuh/subscriptions","organizations_url":"https://api.github.com/users/JLLeitschuh/orgs","repos_url":"https://api.github.com/users/JLLeitschuh/repos","events_url":"https://api.github.com/users/JLLeitschuh/events{/privacy}","received_events_url":"https://api.github.com/users/JLLeitschuh/received_events","type":"User","user_view_type":"public","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":7,"deletions":7,"changed_files":4} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:20:05 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/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '12'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F891:2EFDAC:2F1D6C1:29D5571:69626015')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=100 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:20:06 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/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4987'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '13'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EB8D:2EFDAC:2F1D87E:29D56F1:69626016')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFilesWithPerPage.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFilesWithPerPage.txt new file mode 100644 index 0000000000..c9d7cdd5b4 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testPullCommitsGetFilesWithPerPage.txt @@ -0,0 +1,65 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:25:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4945'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '55'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FD52:3A95B:3720BA3:319BA73:6962616D')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=100 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:25:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4944'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '56'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F8E9:224637:339A139:2E005EF:6962616E')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:25:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4943'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '57'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FA0D:3A95B:3720F14:319BD7D:6962616E')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Access-Control-Allow-Origin', '*'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Type', 'application/json; charset=utf-8'), ('Date', 'Sat, 10 Jan 2026 14:25:51 GMT'), ('ETag', 'W/"03ab304a7383b3ab29693397b3fde06783b89732715702830f70d81d8c66df68"'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('X-Content-Type-Options', 'nosniff'), ('X-Frame-Options', 'deny'), ('x-github-api-version-selected', '2022-11-28'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-XSS-Protection', '0'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4942'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '58'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE26:224637:339A523:2E00928:6962616F')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370","id":2806945628,"node_id":"PR_kwDOADYVqs6nTpdc","html_url":"https://github.com/PyGithub/PyGithub/pull/3370","diff_url":"https://github.com/PyGithub/PyGithub/pull/3370.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/3370.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370","number":3370,"state":"closed","locked":false,"title":"Bump actions/setup-python from 5 to 6","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"body":"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n
\nRelease notes\n

Sourced from actions/setup-python's releases.

\n
\n

v6.0.0

\n

What's Changed

\n

Breaking Changes

\n\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\n

Enhancements:

\n\n

Bug fixes:

\n\n

Dependency updates:

\n\n

New Contributors

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\n

v5.6.0

\n

What's Changed

\n\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\n

v5.5.0

\n

What's Changed

\n

Enhancements:

\n\n

Bug fixes:

\n\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • e797f83 Upgrade to node 24 (#1164)
  • \n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \n
  • 3c6f142 update documentation (#1156)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\n\n> **Note**\n> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","created_at":"2025-09-08T06:01:05Z","updated_at":"2025-11-19T17:43:19Z","closed_at":"2025-11-19T17:43:18Z","merged_at":"2025-11-19T17:43:18Z","merge_commit_sha":"1f5f434b321e963171a27c13c1137cedb54cc4d0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":2144903025,"node_id":"MDU6TGFiZWwyMTQ0OTAzMDI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":2208559625,"node_id":"MDU6TGFiZWwyMjA4NTU5NjI1","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions","name":"github_actions","color":"000000","default":false,"description":"Pull requests that update Github_actions code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5","head":{"label":"PyGithub:dependabot/github_actions/actions/setup-python-6","ref":"dependabot/github_actions/actions/setup-python-6","sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","user":{"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},"repo":{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"default_branch":"main"}},"base":{"label":"PyGithub:main","ref":"main","sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","user":{"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},"repo":{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/3370"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"JLLeitschuh","id":1323708,"node_id":"MDQ6VXNlcjEzMjM3MDg=","avatar_url":"https://avatars.githubusercontent.com/u/1323708?v=4","gravatar_id":"","url":"https://api.github.com/users/JLLeitschuh","html_url":"https://github.com/JLLeitschuh","followers_url":"https://api.github.com/users/JLLeitschuh/followers","following_url":"https://api.github.com/users/JLLeitschuh/following{/other_user}","gists_url":"https://api.github.com/users/JLLeitschuh/gists{/gist_id}","starred_url":"https://api.github.com/users/JLLeitschuh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JLLeitschuh/subscriptions","organizations_url":"https://api.github.com/users/JLLeitschuh/orgs","repos_url":"https://api.github.com/users/JLLeitschuh/repos","events_url":"https://api.github.com/users/JLLeitschuh/events{/privacy}","received_events_url":"https://api.github.com/users/JLLeitschuh/received_events","type":"User","user_view_type":"public","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":7,"deletions":7,"changed_files":4} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:25:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"b8c99c4253829e5fecd7d2e29956f9c24f83fd97ea803126e05ccf3f810b7c57"'), ('Last-Modified', 'Wed, 19 Nov 2025 17:43:19 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4941'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '59'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FAD6:2FD1B8:3272FAD:2CDB193:6962616F')] +[{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=100 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:25:52 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/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4940'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '60'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FC20:2C869E:31B9F71:2C24433:69626170')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFiles.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFiles.txt new file mode 100644 index 0000000000..353e7c98b2 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFiles.txt @@ -0,0 +1,54 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:48 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4926'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '74'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E6B4:2CAD27:35C4316:3013B30:69626388')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:48 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4925'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '75'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F458:224637:3442175:2E8FF6A:69626388')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:49 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4924'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '76'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF4B:2A8FF:33562F1:2DC1D00:69626388')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:49 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4923'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '77'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF1D:2FD1B8:33248B2:2D7483A:69626389')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:49 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4922'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '78'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F9AA:456F1:34C5EE7:2F0ACE6:69626389')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFilesDefault.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFilesDefault.txt new file mode 100644 index 0000000000..84d4e76fb8 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFilesDefault.txt @@ -0,0 +1,32 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4921'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '79'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E6CA:27813:32EF5AA:2D5E5F2:6962638A')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4920'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '80'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F20C:27813:32EF8B4:2D5E878:6962638A')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4919'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '81'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F1B1:2188F0:3347D9D:2D86D76:6962638B')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFilesWithPerPage.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFilesWithPerPage.txt new file mode 100644 index 0000000000..bbd18dbb4f --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitFilesWithPerPage.txt @@ -0,0 +1,54 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"454ec9ab5f2eadd737c5f7a55b666449fc8e6331bc1cadd54b0b3699e9c4a3c3"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4918'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '82'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FCC3:2F3E6F:33BFBA9:2E0287F:6962638B')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:52 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/"3028264aa517dcef6f89f411c216eba89d54218abca11c49355a8abced0e112a"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4917'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '83'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F30D:2F3E6F:33BFD9B:2E02A1D:6962638B')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:52 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4916'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '84'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE30:36C14D:3322D23:2D8E3F0:6962638C')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:52 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/"454ec9ab5f2eadd737c5f7a55b666449fc8e6331bc1cadd54b0b3699e9c4a3c3"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4915'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '85'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FAC1:296877:3224A31:2C73B66:6962638C')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:34:53 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/"3028264aa517dcef6f89f411c216eba89d54218abca11c49355a8abced0e112a"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4914'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '86'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F53A:2EFDAC:302995E:2ABB4CB:6962638D')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFiles.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFiles.txt new file mode 100644 index 0000000000..25956a1a67 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFiles.txt @@ -0,0 +1,65 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:33 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4913'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '87'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F14C:2CAD27:360F06C:305451F:69626469')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:33 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4912'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '88'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF45:2FD1B8:336F4AE:2DB503C:69626469')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:34 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4911'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '89'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F851:2D20B4:33C0BFA:2DD8EFC:6962646A')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:34 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4910'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '90'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F01F:2F3E6F:340423E:2E3CC27:6962646A')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:35 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/"b66ce170bde3c1b926e79dc999c0e2861c014460efe34d3e200b93a9b4e091d2"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4909'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '91'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'ED39:1E66CC:343D287:2E53B44:6962646A')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:35 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/"5e03812946fef123fa0d1f05ed2e3b7439ff0c562111231d305284da0404ec3e"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4908'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '92'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F8BD:2A8FF:339E640:2DFFC07:6962646B')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFilesDefault.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFilesDefault.txt new file mode 100644 index 0000000000..e36ccf2677 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFilesDefault.txt @@ -0,0 +1,43 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:35 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/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4907'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '93'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F41B:3CA6C7:351E3F8:2F7CDAA:6962646B')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:36 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4906'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '94'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F3BF:456F1:350ED24:2F49506:6962646B')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:36 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/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4905'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '95'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FC2E:2CAD27:36100AF:30552EA:6962646C')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:36 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/"e9eed743d8f2bdb1cea12222fd136f942b6fdaa3b4ae349692b44cd03e100605"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4904'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '96'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE89:2150B7:31D091B:2C0ACAA:6962646C')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "},{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFilesWithPerPage.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFilesWithPerPage.txt new file mode 100644 index 0000000000..b23a45684c --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitGetFilesWithPerPage.txt @@ -0,0 +1,65 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:37 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/"454ec9ab5f2eadd737c5f7a55b666449fc8e6331bc1cadd54b0b3699e9c4a3c3"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4903'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '97'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EEE6:1E66CC:343DD7F:2E5447D:6962646D')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:37 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/"3028264aa517dcef6f89f411c216eba89d54218abca11c49355a8abced0e112a"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4902'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '98'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FBC9:2150B7:31D0D8D:2C0B09C:6962646D')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38: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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4901'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '99'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FD40:2188F0:338F98E:2DC4202:6962646D')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38: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/"64f2b95fca28317aff724e0c8f009e6e83f465854a3517f10578c82553875ad8"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4900'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '100'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F285:3B9D0A:33CB116:2E0673A:6962646E')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"454ec9ab5f2eadd737c5f7a55b666449fc8e6331bc1cadd54b0b3699e9c4a3c3"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4899'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '101'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E747:1E66CC:343E645:2E54C09:6962646E')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"25eb73a226fe2e06b214ed971c5468780866f667","filename":".github/workflows/_build-pkg.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -15,7 +15,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: '3.x'\n "},{"sha":"6a78e47ca957558dfb14e7bc2109498e1404db68","filename":".github/workflows/ci.yml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -33,7 +33,7 @@ jobs:\n steps:\n - uses: actions/checkout@v5\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"${{ matrix.python-version }}\"\n - name: Install tox\n@@ -82,7 +82,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -132,7 +132,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies\n@@ -194,7 +194,7 @@ jobs:\n ref: ${{ github.event.pull_request.base.sha }}\n path: base\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"},{"sha":"4e7df934422c0c3b03b9c1c661df997709e465f3","filename":".github/workflows/lint.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -25,7 +25,7 @@ jobs:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n- - uses: actions/setup-python@v5\n+ - uses: actions/setup-python@v6\n with:\n python-version: \"3.x\"\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?page=2&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:38:39 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"3028264aa517dcef6f89f411c216eba89d54218abca11c49355a8abced0e112a"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4898'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '102'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EB5B:456F1:350FD98:2F4A354:6962646F')] +{"sha":"3253acaabd86de12b73d0a24c98eb9c13d1987b5","node_id":"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU","commit":{"author":{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","date":"2025-09-08T06:01:04Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-08T06:01:04Z"},"message":"Bump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","tree":{"sha":"aba22fc2dfab898cd919434b22781a68854388a8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\nssWlqiNPECaJ+RQUhLDP\n=S9eo\n-----END PGP SIGNATURE-----\n","payload":"tree aba22fc2dfab898cd919434b22781a68854388a8\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\ncommitter GitHub 1757311264 +0000\n\nBump actions/setup-python from 5 to 6\n\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n dependency-version: '6'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","verified_at":"2025-09-08T06:01:05Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5","html_url":"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments","author":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a353f7300fe5fea0cce2a50190249c3f332e53d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d","html_url":"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d"}],"stats":{"total":14,"additions":7,"deletions":7},"files":[{"sha":"d5d87ec917087ca92ef1da6ef547cb2464eb9492","filename":".github/workflows/openapi.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5","patch":"@@ -39,7 +39,7 @@ jobs:\n git config --local user.name \"${{ github.actor }}\"\n git config --local user.email \"github-action-${{ github.actor }}@users.noreply.github.com\"\n - name: Set up Python\n- uses: actions/setup-python@v5\n+ uses: actions/setup-python@v6\n with:\n python-version: \"3.12\"\n - name: Set up dependencies"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitsFiles.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitsFiles.txt new file mode 100644 index 0000000000..bd264c7f58 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoCommitsFiles.txt @@ -0,0 +1,76 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits?sha=release-v2-0&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"7a958b94c8365977d70d5a4e62a2c2e9a8a8d2a97fc1b814b4857080d2ce67c5"'), ('Last-Modified', 'Mon, 28 Aug 2023 18:27:45 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4870'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '130'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EB9F:3A1BC1:18461A2:15E90DD:695FB450')] +[{"sha":"0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","node_id":"C_kwDOADYVqtoAKDA3OTFjYzdiMWE3MDZhYjVkN2M2MDdkZGZmMzVkZTRkNDg2YmEzZTk","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"message":"Fixing lint errors in release branch","tree":{"sha":"29bb34c69f42d69d0e13d5951a47b32ac4bea130","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/29bb34c69f42d69d0e13d5951a47b32ac4bea130"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","html_url":"https://github.com/PyGithub/PyGithub/commit/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403"}]},{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","node_id":"C_kwDOADYVqtoAKDlmNzg1MGJmNjU3MmVhODU3MmI4YjEzNmI4YjNkM2UwOWNiMzg0MDM","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T17:27:32Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T17:30:06Z"},"message":"Suppress `requests` fallback to netrc, provide `github.Auth.Netrc` (#2739)","tree":{"sha":"c6dcb05abb8b98c6d4f13177381d26a239cf9b10","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/c6dcb05abb8b98c6d4f13177381d26a239cf9b10"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"50299c92f4a0fdde3e66900e9fbdb75cb3c4d559","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/50299c92f4a0fdde3e66900e9fbdb75cb3c4d559","html_url":"https://github.com/PyGithub/PyGithub/commit/50299c92f4a0fdde3e66900e9fbdb75cb3c4d559"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:40 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"a1d8d7a9276b6ab4fc230ed8c128c5ad35bfb505106dc2e370abcb090559875b"'), ('Last-Modified', 'Mon, 28 Aug 2023 18:27:45 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4869'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '131'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F2B4:2503F5:18CCF88:166DAD9:695FB450')] +{"sha":"0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","node_id":"C_kwDOADYVqtoAKDA3OTFjYzdiMWE3MDZhYjVkN2M2MDdkZGZmMzVkZTRkNDg2YmEzZTk","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"message":"Fixing lint errors in release branch","tree":{"sha":"29bb34c69f42d69d0e13d5951a47b32ac4bea130","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/29bb34c69f42d69d0e13d5951a47b32ac4bea130"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","html_url":"https://github.com/PyGithub/PyGithub/commit/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403"}],"stats":{"total":23,"additions":17,"deletions":6},"files":[{"sha":"85536829e55af14399a2341f3dc4dc23b44ea5cf","filename":"github/Auth.py","status":"modified","additions":10,"deletions":4,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FAuth.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FAuth.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuth.py?ref=0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","patch":"@@ -83,7 +83,7 @@ def token_type(self) -> str:\n @property\n def token(self) -> str:\n return (\n- base64.b64encode(f\"{self.login}:{self.password}\".encode())\n+ base64.b64encode(f\"{self.username}:{self.password}\".encode())\n .decode(\"utf-8\")\n .replace(\"\\n\", \"\")\n )\n@@ -491,20 +491,26 @@ def username(self) -> str:\n \n @property\n def login(self) -> str:\n- assert self._login is not None, \"Method withRequester(Requester) must be called first\"\n+ assert (\n+ self._login is not None\n+ ), \"Method withRequester(Requester) must be called first\"\n return self._login\n \n @property\n def password(self) -> str:\n- assert self._password is not None, \"Method withRequester(Requester) must be called first\"\n+ assert (\n+ self._password is not None\n+ ), \"Method withRequester(Requester) must be called first\"\n return self._password\n \n def withRequester(self, requester: Requester) -> \"NetrcAuth\":\n super().withRequester(requester)\n \n auth = utils.get_netrc_auth(requester.base_url, raise_errors=True)\n if auth is None:\n- raise RuntimeError(f\"Could not get credentials from netrc for host {requester.hostname}\")\n+ raise RuntimeError(\n+ f\"Could not get credentials from netrc for host {requester.hostname}\"\n+ )\n \n self._login, self._password = auth\n "},{"sha":"37f76d9e16a3cf9556b5995aff1ff0a73f79696d","filename":"github/Requester.py","status":"modified","additions":3,"deletions":1,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","patch":"@@ -258,7 +258,9 @@ class Requester:\n _frameBuffer: List[Any]\n \n @staticmethod\n- def noopAuth(request: requests.models.PreparedRequest) -> requests.models.PreparedRequest:\n+ def noopAuth(\n+ request: requests.models.PreparedRequest,\n+ ) -> requests.models.PreparedRequest:\n return request\n \n @classmethod"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"198e37d108f69a11166d07b21d3daeb7c666d7d3c698baf2a486d24f941e5c6a"'), ('Last-Modified', 'Mon, 28 Aug 2023 18:27:45 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4868'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '132'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F734:316099:189600F:1638D25:695FB451')] +{"sha":"0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","node_id":"C_kwDOADYVqtoAKDA3OTFjYzdiMWE3MDZhYjVkN2M2MDdkZGZmMzVkZTRkNDg2YmEzZTk","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"message":"Fixing lint errors in release branch","tree":{"sha":"29bb34c69f42d69d0e13d5951a47b32ac4bea130","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/29bb34c69f42d69d0e13d5951a47b32ac4bea130"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","html_url":"https://github.com/PyGithub/PyGithub/commit/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403"}],"stats":{"total":23,"additions":17,"deletions":6},"files":[{"sha":"d895066ee05a1f1fdddf20960d41af82b5807497","filename":"tests/Authentication.py","status":"modified","additions":4,"deletions":1,"changes":5,"blob_url":"https://github.com/PyGithub/PyGithub/blob/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/tests%2FAuthentication.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/tests%2FAuthentication.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthentication.py?ref=0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","patch":"@@ -220,7 +220,10 @@ def testNetrcAuthFails(self):\n with mock.patch.dict(os.environ, {\"NETRC\": tmp.name}):\n with self.assertRaises(RuntimeError) as exc:\n github.Github(auth=auth)\n- self.assertEqual(exc.exception.args, (\"Could not get credentials from netrc for host api.github.com\",))\n+ self.assertEqual(\n+ exc.exception.args,\n+ (\"Could not get credentials from netrc for host api.github.com\",),\n+ )\n \n def testCreateJWT(self):\n auth = github.Auth.AppAuth(APP_ID, PRIVATE_KEY)"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"60b4a587fa622fe254e0f944cd94e5a0e04f8632c24ee41a07ef62f8653003d9"'), ('Last-Modified', 'Thu, 08 Jan 2026 11:05:32 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4867'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '133'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F3DF:139E44:1CD712A:1A14C06:695FB451')] +{"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":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"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","user_view_type":"public","site_admin":false},"network_count":1872,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits?sha=release-v2-0&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"7a958b94c8365977d70d5a4e62a2c2e9a8a8d2a97fc1b814b4857080d2ce67c5"'), ('Last-Modified', 'Mon, 28 Aug 2023 18:27:45 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4866'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '134'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FC0B:3A1BC1:1846D8C:15E9B8C:695FB451')] +[{"sha":"0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","node_id":"C_kwDOADYVqtoAKDA3OTFjYzdiMWE3MDZhYjVkN2M2MDdkZGZmMzVkZTRkNDg2YmEzZTk","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"message":"Fixing lint errors in release branch","tree":{"sha":"29bb34c69f42d69d0e13d5951a47b32ac4bea130","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/29bb34c69f42d69d0e13d5951a47b32ac4bea130"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","html_url":"https://github.com/PyGithub/PyGithub/commit/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403"}]},{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","node_id":"C_kwDOADYVqtoAKDlmNzg1MGJmNjU3MmVhODU3MmI4YjEzNmI4YjNkM2UwOWNiMzg0MDM","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T17:27:32Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T17:30:06Z"},"message":"Suppress `requests` fallback to netrc, provide `github.Auth.Netrc` (#2739)","tree":{"sha":"c6dcb05abb8b98c6d4f13177381d26a239cf9b10","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/c6dcb05abb8b98c6d4f13177381d26a239cf9b10"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"50299c92f4a0fdde3e66900e9fbdb75cb3c4d559","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/50299c92f4a0fdde3e66900e9fbdb75cb3c4d559","html_url":"https://github.com/PyGithub/PyGithub/commit/50299c92f4a0fdde3e66900e9fbdb75cb3c4d559"}]}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"a1d8d7a9276b6ab4fc230ed8c128c5ad35bfb505106dc2e370abcb090559875b"'), ('Last-Modified', 'Mon, 28 Aug 2023 18:27:45 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4865'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '135'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'ECC1:227F48:18B2E6D:165ABB5:695FB452')] +{"sha":"0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","node_id":"C_kwDOADYVqtoAKDA3OTFjYzdiMWE3MDZhYjVkN2M2MDdkZGZmMzVkZTRkNDg2YmEzZTk","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"message":"Fixing lint errors in release branch","tree":{"sha":"29bb34c69f42d69d0e13d5951a47b32ac4bea130","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/29bb34c69f42d69d0e13d5951a47b32ac4bea130"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","html_url":"https://github.com/PyGithub/PyGithub/commit/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403"}],"stats":{"total":23,"additions":17,"deletions":6},"files":[{"sha":"85536829e55af14399a2341f3dc4dc23b44ea5cf","filename":"github/Auth.py","status":"modified","additions":10,"deletions":4,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FAuth.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FAuth.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuth.py?ref=0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","patch":"@@ -83,7 +83,7 @@ def token_type(self) -> str:\n @property\n def token(self) -> str:\n return (\n- base64.b64encode(f\"{self.login}:{self.password}\".encode())\n+ base64.b64encode(f\"{self.username}:{self.password}\".encode())\n .decode(\"utf-8\")\n .replace(\"\\n\", \"\")\n )\n@@ -491,20 +491,26 @@ def username(self) -> str:\n \n @property\n def login(self) -> str:\n- assert self._login is not None, \"Method withRequester(Requester) must be called first\"\n+ assert (\n+ self._login is not None\n+ ), \"Method withRequester(Requester) must be called first\"\n return self._login\n \n @property\n def password(self) -> str:\n- assert self._password is not None, \"Method withRequester(Requester) must be called first\"\n+ assert (\n+ self._password is not None\n+ ), \"Method withRequester(Requester) must be called first\"\n return self._password\n \n def withRequester(self, requester: Requester) -> \"NetrcAuth\":\n super().withRequester(requester)\n \n auth = utils.get_netrc_auth(requester.base_url, raise_errors=True)\n if auth is None:\n- raise RuntimeError(f\"Could not get credentials from netrc for host {requester.hostname}\")\n+ raise RuntimeError(\n+ f\"Could not get credentials from netrc for host {requester.hostname}\"\n+ )\n \n self._login, self._password = auth\n "},{"sha":"37f76d9e16a3cf9556b5995aff1ff0a73f79696d","filename":"github/Requester.py","status":"modified","additions":3,"deletions":1,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","patch":"@@ -258,7 +258,9 @@ class Requester:\n _frameBuffer: List[Any]\n \n @staticmethod\n- def noopAuth(request: requests.models.PreparedRequest) -> requests.models.PreparedRequest:\n+ def noopAuth(\n+ request: requests.models.PreparedRequest,\n+ ) -> requests.models.PreparedRequest:\n return request\n \n @classmethod"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:42:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"198e37d108f69a11166d07b21d3daeb7c666d7d3c698baf2a486d24f941e5c6a"'), ('Last-Modified', 'Mon, 28 Aug 2023 18:27:45 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4864'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '136'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E7D5:139E44:1CD79FF:1A15409:695FB452')] +{"sha":"0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","node_id":"C_kwDOADYVqtoAKDA3OTFjYzdiMWE3MDZhYjVkN2M2MDdkZGZmMzVkZTRkNDg2YmEzZTk","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2023-08-28T18:27:45Z"},"message":"Fixing lint errors in release branch","tree":{"sha":"29bb34c69f42d69d0e13d5951a47b32ac4bea130","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/29bb34c69f42d69d0e13d5951a47b32ac4bea130"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","html_url":"https://github.com/PyGithub/PyGithub/commit/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"9f7850bf6572ea8572b8b136b8b3d3e09cb38403","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9f7850bf6572ea8572b8b136b8b3d3e09cb38403","html_url":"https://github.com/PyGithub/PyGithub/commit/9f7850bf6572ea8572b8b136b8b3d3e09cb38403"}],"stats":{"total":23,"additions":17,"deletions":6},"files":[{"sha":"d895066ee05a1f1fdddf20960d41af82b5807497","filename":"tests/Authentication.py","status":"modified","additions":4,"deletions":1,"changes":5,"blob_url":"https://github.com/PyGithub/PyGithub/blob/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/tests%2FAuthentication.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/0791cc7b1a706ab5d7c607ddff35de4d486ba3e9/tests%2FAuthentication.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthentication.py?ref=0791cc7b1a706ab5d7c607ddff35de4d486ba3e9","patch":"@@ -220,7 +220,10 @@ def testNetrcAuthFails(self):\n with mock.patch.dict(os.environ, {\"NETRC\": tmp.name}):\n with self.assertRaises(RuntimeError) as exc:\n github.Github(auth=auth)\n- self.assertEqual(exc.exception.args, (\"Could not get credentials from netrc for host api.github.com\",))\n+ self.assertEqual(\n+ exc.exception.args,\n+ (\"Could not get credentials from netrc for host api.github.com\",),\n+ )\n \n def testCreateJWT(self):\n auth = github.Auth.AppAuth(APP_ID, PRIVATE_KEY)"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt new file mode 100644 index 0000000000..fb1cb19b27 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFiles.txt @@ -0,0 +1,120 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"1220f807b4367b68e4a5fb01373834797a3df4f2c2bc194662db4ab54cb6bc87"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4940'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '60'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F92C:2C869E:E173EF2:C693502:6964CFB3')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:52 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/"bc4c4214971689cf198e10356181fb4815304f55cd9ad1eebcb405885fc56986"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4939'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '61'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FDF0:2A8FF:E480B50:CA122AD:6964CFB4')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…"}]},{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}]}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:52 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4938'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '62'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F49E:2B714A:E7FA2F4:CD5DB29:6964CFB4')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:53 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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4937'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '63'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F8C8:456F1:E836CFD:CD1CCE1:6964CFB4')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:53 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/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4936'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '64'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F5D6:2FD1B8:E755CAD:CC5E03A:6964CFB5')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:53 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/"fc990028ca3e9d35bb138ee9ed191da6b8150913d6f1c4cc35d0ea1652bbef32"'), ('Last-Modified', 'Sun, 11 Jan 2026 23:31:57 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4935'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '65'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F051:36C14D:E3AC355:C937395:6964CFB5')] +{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"…","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"…","keys_url":"…","collaborators_url":"…","teams_url":"…","hooks_url":"…","issue_events_url":"…","events_url":"…","assignees_url":"…","branches_url":"…","tags_url":"…","blobs_url":"…","git_tags_url":"…","git_refs_url":"…","trees_url":"…","statuses_url":"…","languages_url":"…","stargazers_url":"…","contributors_url":"…","subscribers_url":"…","subscription_url":"…","commits_url":"…","git_commits_url":"…","comments_url":"…","issue_comment_url":"…","contents_url":"…","compare_url":"…","merges_url":"…","archive_url":"…","downloads_url":"…","issues_url":"…","pulls_url":"…","milestones_url":"…","notifications_url":"…","labels_url":"…","releases_url":"…","deployments_url":"…","created_at":"2012-02-25T12:53:47Z","updated_at":"2026-01-11T23:31:57Z","pushed_at":"2026-01-12T09:21:19Z","git_url":"…","ssh_url":"…","clone_url":"…","svn_url":"…","homepage":"https://pygithub.readthedocs.io/","size":20662,"stargazers_count":7640,"watchers_count":7640,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7640,"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":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:54 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/"1220f807b4367b68e4a5fb01373834797a3df4f2c2bc194662db4ab54cb6bc87"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4934'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '66'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F79A:2B714A:E7FAD6E:CD5E4F1:6964CFB6')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:54 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/"bc4c4214971689cf198e10356181fb4815304f55cd9ad1eebcb405885fc56986"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4933'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '67'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F6B4:3A95B:ED37C64:D2A2DA7:6964CFB6')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…"}]},{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}]}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:55 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4932'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '68'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F866:2C869E:E1757CB:C694B9A:6964CFB7')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:55 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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4931'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '69'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FD5E:456F1:E837E67:CD1DC99:6964CFB7')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 12 Jan 2026 10:40:56 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/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4930'), ('X-RateLimit-Reset', '1768217833'), ('X-RateLimit-Used', '70'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FBCC:2CAD27:F16C0F2:D67E79B:6964CFB7')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt new file mode 100644 index 0000000000..b235a4ad59 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesDefault.txt @@ -0,0 +1,76 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/6cfe46b712e2bf65560bd8189c4654cd6c56eeca...cef98416f45a9cdaf84d7f53cea13ac074a2c05d?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21:09 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/"f36066e7a06aada3d2ff90d1b6ba467b2c5b3ce39bebced0bd50e16e2e3a31bc"'), ('Last-Modified', 'Wed, 07 Feb 2018 06:44:57 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FC01:3CA6C7:33D419D:2E612C1:69626055')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/6cfe46b712e2bf65560bd8189c4654cd6c56eeca...cef98416f45a9cdaf84d7f53cea13ac074a2c05d","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"6cfe46b712e2bf65560bd8189c4654cd6c56eeca","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo2Y2ZlNDZiNzEyZTJiZjY1NTYwYmQ4MTg5YzQ2NTRjZDZjNTZlZWNh","commit":{"author":{"name":"Iraquitan Cordeiro Filho","email":"iraquitanfilho@gmail.com","date":"2018-01-16T21:52:52Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T21:52:52Z"},"message":"Add permissions field to NamedUser (#676)","tree":{"sha":"fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","html_url":"…","comments_url":"…","author":{"login":"iraquitan","id":3467229,"node_id":"MDQ6VXNlcjM0NjcyMjk=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/iraquitan","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6bc804dc15789a63e01f19b6f18386a03132b651","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6bc804dc15789a63e01f19b6f18386a03132b651","html_url":"…"}]},"merge_base_commit":{"sha":"6cfe46b712e2bf65560bd8189c4654cd6c56eeca","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo2Y2ZlNDZiNzEyZTJiZjY1NTYwYmQ4MTg5YzQ2NTRjZDZjNTZlZWNh","commit":{"author":{"name":"Iraquitan Cordeiro Filho","email":"iraquitanfilho@gmail.com","date":"2018-01-16T21:52:52Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T21:52:52Z"},"message":"Add permissions field to NamedUser (#676)","tree":{"sha":"fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","html_url":"…","comments_url":"…","author":{"login":"iraquitan","id":3467229,"node_id":"MDQ6VXNlcjM0NjcyMjk=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/iraquitan","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6bc804dc15789a63e01f19b6f18386a03132b651","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6bc804dc15789a63e01f19b6f18386a03132b651","html_url":"…"}]},"status":"ahead","ahead_by":7,"behind_by":0,"total_commits":7,"commits":[{"sha":"45d18436fd29924ba89d803a982ca2f0ff8231e8","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0NWQxODQzNmZkMjk5MjRiYTg5ZDgwM2E5ODJjYTJmMGZmODIzMWU4","commit":{"author":{"name":"Andrew Smith","email":"espadav8@gmail.com","date":"2018-01-16T21:57:24Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T21:57:24Z"},"message":"Add method to get latest release of a repository (#609)","tree":{"sha":"3a90d8d494c2e508f741468494cec79c43983cbb","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3a90d8d494c2e508f741468494cec79c43983cbb"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/45d18436fd29924ba89d803a982ca2f0ff8231e8","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/45d18436fd29924ba89d803a982ca2f0ff8231e8","html_url":"…","comments_url":"…","author":{"login":"EspadaV8","id":115825,"node_id":"MDQ6VXNlcjExNTgyNQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EspadaV8","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6cfe46b712e2bf65560bd8189c4654cd6c56eeca","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","html_url":"…"}]},{"sha":"3baa682cf83121d026514947200720186b288035","node_id":"MDY6Q29tbWl0MzU0NDQ5MDozYmFhNjgyY2Y4MzEyMWQwMjY1MTQ5NDcyMDA3MjAxODZiMjg4MDM1","commit":{"author":{"name":"Ilya Konstantinov","email":"ilya.konstantinov@gmail.com","date":"2018-01-16T22:17:47Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T22:17:47Z"},"message":"Add committer/author to Repository.delete_file (#678)","tree":{"sha":"c56629d19bbdb917833dd593bea7f7d564e2ce27","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/c56629d19bbdb917833dd593bea7f7d564e2ce27"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3baa682cf83121d026514947200720186b288035","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3baa682cf83121d026514947200720186b288035","html_url":"…","comments_url":"…","author":{"login":"ikonst","id":1186084,"node_id":"MDQ6VXNlcjExODYwODQ=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/ikonst","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"45d18436fd29924ba89d803a982ca2f0ff8231e8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/45d18436fd29924ba89d803a982ca2f0ff8231e8","html_url":"…"}]},{"sha":"2f9b1e018a6ab27e5df6373ebab0d01e147291a7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDoyZjliMWUwMThhNmFiMjdlNWRmNjM3M2ViYWIwZDAxZTE0NzI5MWE3","commit":{"author":{"name":"edquist","email":"edquist@users.noreply.github.com","date":"2018-01-26T19:59:30Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-26T19:59:30Z"},"message":"make created_at/published_at attrs available for Release objects (#689)","tree":{"sha":"89cd5c3864b60d7b8ddf2c747e65b32dd6dca4c9","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/89cd5c3864b60d7b8ddf2c747e65b32dd6dca4c9"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/2f9b1e018a6ab27e5df6373ebab0d01e147291a7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2f9b1e018a6ab27e5df6373ebab0d01e147291a7","html_url":"…","comments_url":"…","author":{"login":"edquist","id":5522437,"node_id":"MDQ6VXNlcjU1MjI0Mzc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/edquist","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3baa682cf83121d026514947200720186b288035","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3baa682cf83121d026514947200720186b288035","html_url":"…"}]},{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo1YzljMmY3NTIzOWFlMDdlZjU5MGJhYTJjMmVhMjgwNDZiOGM5YWNj","commit":{"author":{"name":"Gilad Shefer","email":"gshefer@redhat.com","date":"2018-01-27T03:06:09Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-27T03:06:09Z"},"message":"Updated PullRequest reviewer request according to API changes (#690)\n\nhttps://developer.github.com/changes/2018-01-24-end-thor-preview/","tree":{"sha":"77fd159691755370fed9ab056ee070f70b75b241","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/77fd159691755370fed9ab056ee070f70b75b241"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…","comments_url":"…","author":{"login":"gshefer","id":21076742,"node_id":"MDQ6VXNlcjIxMDc2NzQy","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/gshefer","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"2f9b1e018a6ab27e5df6373ebab0d01e147291a7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2f9b1e018a6ab27e5df6373ebab0d01e147291a7","html_url":"…"}]},{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYmZlOGQwZjYyM2NhMjlkOTg0ZWMwOWQyYjU2NmU5YWIxMGFlMDI0","commit":{"author":{"name":"R1kk3r","email":"R1kk3r@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"message":"Remove the default \"null\" input send during GET request (#691)\n\n* Remove the default \"null\" input send during GET request\r\n\r\n* Remove the 'null' value from all tests","tree":{"sha":"3be58227503a8829339306ffa910c5c45e3f4676","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3be58227503a8829339306ffa910c5c45e3f4676"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…","comments_url":"…","author":{"login":"R1kk3r","id":8941245,"node_id":"MDQ6VXNlcjg5NDEyNDU=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/R1kk3r","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…"}]},{"sha":"e671fdd0356b9580870082ffca112e2236f396f1","node_id":"MDY6Q29tbWl0MzU0NDQ5MDplNjcxZmRkMDM1NmI5NTgwODcwMDgyZmZjYTExMmUyMjM2ZjM5NmYx","commit":{"author":{"name":"Michael Behrisch","email":"oss@behrisch.de","date":"2018-02-06T22:21:51Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-06T22:21:51Z"},"message":"Fix date format for milestone creation (#593)","tree":{"sha":"24f3271df47a466a10644af443a36016faef87d8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/24f3271df47a466a10644af443a36016faef87d8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e671fdd0356b9580870082ffca112e2236f396f1","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e671fdd0356b9580870082ffca112e2236f396f1","html_url":"…","comments_url":"…","author":{"login":"behrisch","id":454288,"node_id":"MDQ6VXNlcjQ1NDI4OA==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/behrisch","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…"}]},{"sha":"cef98416f45a9cdaf84d7f53cea13ac074a2c05d","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjZWY5ODQxNmY0NWE5Y2RhZjg0ZDdmNTNjZWExM2FjMDc0YTJjMDVk","commit":{"author":{"name":"Brian Torres-Gil","email":"btorres-gil@paloaltonetworks.com","date":"2018-02-07T06:44:57Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-07T06:44:57Z"},"message":"Use datetime object in create_milestone (#698)\n\nMethod create_milestone now uses datetime object to fit better with v3 API using ISO8601.\r\n\r\nDate object still allowed for backward compatibility.","tree":{"sha":"47f87c87b5b549c21cd55d7a59deed01ee0b8b8e","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/47f87c87b5b549c21cd55d7a59deed01ee0b8b8e"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cef98416f45a9cdaf84d7f53cea13ac074a2c05d","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cef98416f45a9cdaf84d7f53cea13ac074a2c05d","html_url":"…","comments_url":"…","author":{"login":"btorresgil","id":4164289,"node_id":"MDQ6VXNlcjQxNjQyODk=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/btorresgil","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"e671fdd0356b9580870082ffca112e2236f396f1","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e671fdd0356b9580870082ffca112e2236f396f1","html_url":"…"}]}],"files":[{"sha":"8af90a85abe045410f36466d386eb39aaa6e31c8","filename":"github/GitRelease.py","status":"modified","additions":22,"deletions":0,"changes":22,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"04d5712cc080ad7d77b989f2f7b29142ad219ddf","filename":"github/PaginatedList.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3a63d660d8436ab87245e487bfcfc65fc06f0225","filename":"github/PullRequest.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"36f50e5858c18bc699a26879dcd16b39f1b333d9","filename":"github/Repository.py","status":"modified","additions":36,"deletions":6,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae512681fb2a9a4beb02936d63f74f2de7c71cac","filename":"github/Requester.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"100eab70bfc6a3f61216d4ca1941af3e1b5824b8","filename":"github/tests/GitRelease.py","status":"modified","additions":8,"deletions":0,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e8e838a31ecebf58cb13f3907473e22253816bb","filename":"github/tests/Logging_.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fa9b95b08adc77b7d176d58b194fb4980c4f7553","filename":"github/tests/ReplayData/AuthenticatedUser.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fd2474416b0d7301a3f80734ce4fb0c8aef4c976","filename":"github/tests/ReplayData/AuthenticatedUser.testCreateFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6b3a9cb3ff333fad031a1a969565010e9e08f052","filename":"github/tests/ReplayData/AuthenticatedUser.testEmails.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"2c13f315f366c935bd4457c58fe936b83935f542","filename":"github/tests/ReplayData/AuthenticatedUser.testFollowing.txt","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e4a315bddeb9451cc41fff3df7885a3d499a8fdf","filename":"github/tests/ReplayData/AuthenticatedUser.testGetAuthorizations.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d6d547c87cc5a7a830609582f2d017299855181","filename":"github/tests/ReplayData/AuthenticatedUser.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee4acbe742f39b0ee7db9de1a5c87e7a8a5dcfe6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fc243ab943bc7c934a1c14d8173be2a0b8fbee62","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a99983599fed3989a2fff567210279ade49d0bba","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16cf1d959a76d759ba92cb46633093fc41279cf7","filename":"github/tests/ReplayData/AuthenticatedUser.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"86d87360fd9c1191891c01282013922fda30e217","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotification.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1a70b15c5729b9d51ba2c81d2c17d5380636d014","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotifications.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b5a32e8e5dc243fbfab923a9cfcacc2fa95cef3","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotificationsWithOtherArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13ffcbb0250c576a7093938be7dc34adaa1f7739","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrganizationEvents.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13cb72bb1596a394d397faa9c56c1f15c95433dc","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrgs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ad8d42fab5c11e03ce3a81bd35c1161af8ee738b","filename":"github/tests/ReplayData/AuthenticatedUser.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3e6afea17e85cf239cf53bda145accc70ab5697","filename":"github/tests/ReplayData/AuthenticatedUser.testGetReposWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d0d887e56cc88241f73bc255a679953665cc6ba6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetStarredGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"92785959fd58cfab7e727204be5780bd071d7c32","filename":"github/tests/ReplayData/AuthenticatedUser.testGetTeams.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f13fa35577b87cee1c425e534d975c43de820c57","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"63e871c0020e4f9f4e67db3a687b165de7479021","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b10e61d4d53e03081f9f0575e21e566dff84e4fd","filename":"github/tests/ReplayData/AuthenticatedUser.testStarring.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1256b91f1361e066bb4acd855f5358d75787fcf6","filename":"github/tests/ReplayData/AuthenticatedUser.testSubscriptions.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0fee5b52c97c5d5a5c06c4a98b141fa94fc8474b","filename":"github/tests/ReplayData/AuthenticatedUser.testWatching.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d5e56c14052d1de71ad2d5ae810235ebb17c95a8","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithLogin.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"425bcd1f6c84a04cb55be0b55707ee9d3822ec12","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithToken.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4357e4453f4b18d15df489402c3e70add0118f92","filename":"github/tests/ReplayData/Authentication.testBasicAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"efcf3628a18438e4c535267933897019d06cf1ba","filename":"github/tests/ReplayData/Authentication.testNoAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f6a50faf696352ae2bb6fd18cdf36b92f51a2c88","filename":"github/tests/ReplayData/Authentication.testOAuthAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"666056f4e79baf48cc4b7988d6201d71eb05cf37","filename":"github/tests/ReplayData/Authentication.testSecretKeyAuthentication.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6d0f9f01af5acb4691d8e94a8acaab1991563af2","filename":"github/tests/ReplayData/Authentication.testUserAgent.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c225d7a56691b7695591bce48a1ebcfee873d44b","filename":"github/tests/ReplayData/Authorization.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ed8b51778789c5a682807596f6cfb5033d555873","filename":"github/tests/ReplayData/Authorization.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a249e52f2db24f87ea99205998a0bc8b9593ac36","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeInClassAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeTransformation.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1191038c709ba815d2e8976cccebc7c2c2011963","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d62b76ff4af8b051d9d3df0beb8141c6c8552e91","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8542c2261908e8c2c0767920e720889399cba058","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInDict.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a3e26db30db2660f789ca24c94d8ca8a820de73f","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d0ae92940279199cbc3b609581eb938a8e1df72","filename":"github/tests/ReplayData/BadAttributes.testIssue195.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"42a4fbca1a248c6ade2597f1c8d073f7c45cd627","filename":"github/tests/ReplayData/Branch.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"62bfa681493885eb631b96071b8d35d18d277505","filename":"github/tests/ReplayData/Branch.testCommitCommentsOnLine.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"68a5e361c9b0cc4034205994061cc2396807ac53","filename":"github/tests/ReplayData/Branch.testProtectedAttributes.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae41cf9930a54f844def85b87471c17d7a3d43bc","filename":"github/tests/ReplayData/Commit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3d79b663004bda0b8052a5027bcf5c28efbbc4ae","filename":"github/tests/ReplayData/Commit.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c584befdaa345bc8233ed9c25bba44c27cbd8b7c","filename":"github/tests/ReplayData/CommitCombinedStatus.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"024f236d53337d76ca3742759ba2429e8bbe4b30","filename":"github/tests/ReplayData/CommitComment.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1430b71497af7f4786dd3b4bd8001106ec5a05cd","filename":"github/tests/ReplayData/CommitComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6dec5a3f4aec14b24f0769004cb4c504ba1e7a1e","filename":"github/tests/ReplayData/CommitComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7eb92c6fd038dd7c516325c77013879b1644f312","filename":"github/tests/ReplayData/CommitStatus.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d4beca4c2188ac1ac7554f22c85b83f0c063e3e0","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1238d33da59a2cc67577bfe6e6f54c3aa9fed775","filename":"github/tests/ReplayData/ContentFile.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bbc4408719fcd76936c1b8255547b8fb6d278f15","filename":"github/tests/ReplayData/Download.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"85afa3aadd5fcf86cbbcc2f8936124cf2fcf223a","filename":"github/tests/ReplayData/Download.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a1657a95314f2b200e76c5c9c353c8be62c47601","filename":"github/tests/ReplayData/Enterprise.testHttp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f69e5f4aced99c4627fcc974ab9499067c5a7c13","filename":"github/tests/ReplayData/Enterprise.testHttps.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a1d3f565a77117c3a0cd7b24f2759f3f3d496fe","filename":"github/tests/ReplayData/Enterprise.testLongUrl.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0a7f4ff7a8847f6e0f4dded421c8d27c46591944","filename":"github/tests/ReplayData/Enterprise.testSpecificPort.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"96d2b87605ee696367134155739abd51f5623bc3","filename":"github/tests/ReplayData/Equality.testBranchEquality.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3ea41a026a658d7de31219660406e01f8bc79b8","filename":"github/tests/ReplayData/Equality.testUserDifference.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c061908b2b2fad79dce7b485ec88fe19a46026e2","filename":"github/tests/ReplayData/Equality.testUserEquality.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1ea7b2b6594276be9d6164a75d76832157f7ff63","filename":"github/tests/ReplayData/Event.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4028ca293790edfb8813936cf6b380dae48cff49","filename":"github/tests/ReplayData/Exceptions.testBadAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"34340f8419f5a97c5655ac2fa195dcacf883cd63","filename":"github/tests/ReplayData/Exceptions.testNonJsonDataReturnedByGithub.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fbb8a31e31501b14d2d34b0313faa1e5db5e8501","filename":"github/tests/ReplayData/Exceptions.testUnknownObject.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"98935a9eaef0b2c3a78d831924721d4d4d379845","filename":"github/tests/ReplayData/Exceptions.testUnknownUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4c4752c5b504fcad94d22a5f025e8eddfbf077a3","filename":"github/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt","status":"modified","additions":60,"deletions":60,"changes":120,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"27eb6a8220d5dadaa0aaf4d7b54cb62ebd6f9ccc","filename":"github/tests/ReplayData/Gist.testAttributes.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e5a449ae4c12998fc58c84d3424f5b5dcf8ad1c6","filename":"github/tests/ReplayData/Gist.testCreateComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b22500c1065445e717a3f6d3282439c66368fcc7","filename":"github/tests/ReplayData/Gist.testDelete.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7a6d84eb6c4701a51c026c8b8a90ecddd5893387","filename":"github/tests/ReplayData/Gist.testDeleteFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"869c07e936b7bd21ce10b14d4be8e1c31c09e738","filename":"github/tests/ReplayData/Gist.testEditWithAllParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9690563ae43062788c234c0adf0db3bb7a083c4a","filename":"github/tests/ReplayData/Gist.testEditWithoutParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a324d9138adcdaeecef2fe3324e95f095d44841","filename":"github/tests/ReplayData/Gist.testFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9fc68bd047481bbcc5c0907d6526a568455113b5","filename":"github/tests/ReplayData/Gist.testGetComments.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"834877a2b45f15de5ec7bbb98c9c623892ab4688","filename":"github/tests/ReplayData/Gist.testRenameFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5fe65eb4fc93d71d45a6b970b8e41d36777a900e","filename":"github/tests/ReplayData/Gist.testStarring.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fb7ff856f1a0fd1511b0255aca190dc669b5f9ce","filename":"github/tests/ReplayData/GistComment.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a68067b6f9fe4392f69decf950a76838a3b428ef","filename":"github/tests/ReplayData/GistComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b775ed5c0d19bba779eee97c8d82c53076c01562","filename":"github/tests/ReplayData/GitBlob.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"16b4d77f2c46bc1728a7b52369fd4a401b191c57","filename":"github/tests/ReplayData/GitCommit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd2136e6e69460b038f21f60704a2afc17b30977","filename":"github/tests/ReplayData/GitRef.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ead5b2c4a86741c74c638295cad1c31d01001b3e","filename":"github/tests/ReplayData/GitRef.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"add7f585747d7a8907d9bc5ed16db43698857315","filename":"github/tests/ReplayData/GitTag.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"429055c9e57244df8536e2eef5d80b14a7cdd4a9","filename":"github/tests/ReplayData/GitTree.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b5363131e82b84dbdbb016b0c177a034bdef8bad","filename":"github/tests/ReplayData/Github.testGetEmojis.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"df020c4c3a7d8b316782cbd950aa3cd89ffd3297","filename":"github/tests/ReplayData/Github.testGetGists.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d643f1e766ad0c0388835b231d73bad1dd797c4e","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8eee46f50acd0a36c576097283aa0c6bb9b5985","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplates.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"78b92a1fc5d37b06d7791c9b0e474ec86c59d3be","filename":"github/tests/ReplayData/Github.testGetHook.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8e1ab91c92b47b1e9c4e82d949580cb14f9c7c08","filename":"github/tests/ReplayData/Github.testGetHooks.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/Github.testGetRepoFromFullName.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c3407e6dbef8628074b18d33812c2ba465baf008","filename":"github/tests/ReplayData/Github.testGetRepoFromId.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14910c7de15dafbd1b70a60ca9c4683319d384ae","filename":"github/tests/ReplayData/Github.testGetRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0564e373fbf7d66e9a34004a4e9613c774d37051","filename":"github/tests/ReplayData/Github.testGetReposSince.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c655af2d39334f7bf893665039ffd50050e73cd6","filename":"github/tests/ReplayData/Github.testGetUsers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"255eb5c1750dfd45e01a6610d4d032135f7987ae","filename":"github/tests/ReplayData/Github.testGetUsersSince.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21b10ea4d3611c638ed96ee53f41de0a6f213c93","filename":"github/tests/ReplayData/Github.testLegacySearchRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"59482af7a3645041d66abc42a17b5dd3799c059a","filename":"github/tests/ReplayData/Github.testLegacySearchReposExplicitPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a4c713c1c8e4bda07d201842aa12b055a58a5908","filename":"github/tests/ReplayData/Github.testLegacySearchReposPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ca04b62f7e62a3069e3e5a0d3d26592417488bd0","filename":"github/tests/ReplayData/Github.testLegacySearchReposWithLanguage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf8ed68cb0934c52324d3e15750f0063c272832f","filename":"github/tests/ReplayData/Github.testLegacySearchUserByEmail.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testLegacySearchUsers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d52e4eca22c5920cec28c6ecb15dbe63acd0756b","filename":"github/tests/ReplayData/Github.testLegacySearchUsersExplicitPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c0768215e75ca8c639c73c3d49cd25d50d5b2856","filename":"github/tests/ReplayData/Github.testLegacySearchUsersPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c052fc6947dd0fb51cf81fc3708ddd5003795544","filename":"github/tests/ReplayData/Github.testSearchRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"61e97e984153fb0a576fcad4cf2472049729fc5d","filename":"github/tests/ReplayData/Github.testSearchUserByEmail.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testSearchUsers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8238293a3c7739e9f055920717b199def8394e24","filename":"github/tests/ReplayData/Hook.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35d5b4ebccb1e3ebc2b164613b79a98a71fd6020","filename":"github/tests/ReplayData/Hook.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7dcca212ad1033fc54d6e34a74755a8212c4f20e","filename":"github/tests/ReplayData/Hook.testPing.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b77d2fc33c0bc0ad2a9dccdbe003a537919b3c4d","filename":"github/tests/ReplayData/Hook.testTest.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0098cce6d3d1dff648b5bdffee2ff4ce7ff5dc25","filename":"github/tests/ReplayData/Issue.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"754e1c1fe322e27d1fa0b2ade9fc929b568c59a5","filename":"github/tests/ReplayData/Issue.testAddAndRemoveAssignees.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf5c11f89bf0a1b068ac1cf7e848f2c449707beb","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"836084944d1287e3d85009fea65560f525a89755","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabelsWithStringArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b5c449743e450bd2104ad0e275e647a43e43d432","filename":"github/tests/ReplayData/Issue.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4954645e321ae426d866f5c614f260be58f9acb4","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8eacccf4819d8822fb52208dcee888a09509861a","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabelsWithStringArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e1bcb4f8e3d865e78abec0ac0dd3be1ce41c4227","filename":"github/tests/ReplayData/Issue.testEditWithAllParameters.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"38a17838415137beefbfcf87288763361bc07c2c","filename":"github/tests/ReplayData/Issue.testGetComments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9dd15f2852a90179a67af7c9c7d4d3d02e0da386","filename":"github/tests/ReplayData/Issue.testGetCommentsSince.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5391293d77a937e0ec9a56c1a7bb9c9ccd9e6725","filename":"github/tests/ReplayData/Issue.testGetEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"53874dbaea7c028a9102dff2b06a632113dc148f","filename":"github/tests/ReplayData/Issue.testGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5e27e933bf19ca470dd88c9b3faad017df9f82e1","filename":"github/tests/ReplayData/Issue.testGetReactions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf4003f79f571dd8084bafe48d7c88a57ad8bfb1","filename":"github/tests/ReplayData/Issue131.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01f5744b5abc831d2fda65b8ac08fa45d694d1dd","filename":"github/tests/ReplayData/Issue131.testGetPullWithOrgHeadUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8f656a1fedc33063adada6b6aa75641281102e32","filename":"github/tests/ReplayData/Issue131.testGetPullsWithOrgHeadUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"497d81512841a06376f5c8a0673e32fc42ffbc8b","filename":"github/tests/ReplayData/Issue133.testGetPageWithoutInitialArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ae3414605995f5d9d65e46723daf65f98f5a0dbb","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsFailsWhenAutenticatedThroughOAuth.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bbda83c7e6c47b233a2feb1f27d8e42f09b33604","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsSucceedsWhenAutenticatedThroughLoginPassword.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5a14176434a7a32fca896324f668bf59e15ded83","filename":"github/tests/ReplayData/Issue134.testGetOAuthScopesFromHeader.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"10a97fef33ca80e6214eb59ce52e0a5eab802005","filename":"github/tests/ReplayData/Issue139.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"76c7550db49c70f345c2fa3798aa06f812d3c13e","filename":"github/tests/ReplayData/Issue139.testCompletion.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"6114fef60f8699bfa5a9da8626ed84eb552f7718","filename":"github/tests/ReplayData/Issue140.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0999c57f9596b209bc541a6ae78992140fe94825","filename":"github/tests/ReplayData/Issue140.testGetDirContents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b0add897beba366c24513d26fb16b36d723f3199","filename":"github/tests/ReplayData/Issue140.testGetDirContentsThenLazyCompletionOfFile.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01cab386c0d913caef0bef5c71c34a498aacf95e","filename":"github/tests/ReplayData/Issue140.testGetDirContentsWithRef.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ec701bafbc9fa23fd9bf4dffdf2c1f2879c2c880","filename":"github/tests/ReplayData/Issue140.testGetFileContents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ddbfb9c7449da41916ce43a8dd462efccbc8526a","filename":"github/tests/ReplayData/Issue158.testPaginationWithSecretKeyAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5444722cd83b58cb4e57c0bdb218298e8e39a808","filename":"github/tests/ReplayData/Issue174.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0e3be28273d8f39eae0fbb756fa535e697fee1b4","filename":"github/tests/ReplayData/Issue174.testGetDirContentsWhithHttpRedirect.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14f1cee3cccedc026fdeaec02c9c64e86e5c9405","filename":"github/tests/ReplayData/Issue214.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"187fa73a0c1cf266b20e86bf93bc7aa9aeebb444","filename":"github/tests/ReplayData/Issue214.testAssignees.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"26776936bff15d073dd66c307724ae45a549e3b4","filename":"github/tests/ReplayData/Issue214.testCollaborators.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3821a7c6cbe790128813eaee55dad0ebfc9ecf76","filename":"github/tests/ReplayData/Issue214.testGetIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue216.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a6eca3755c3737f450c7acc6aa7cfcda82eb8e3f","filename":"github/tests/ReplayData/Issue216.testIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue278.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"330e60a7c2125c71e286b105a71c0cb4e949fa06","filename":"github/tests/ReplayData/Issue278.testIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f7dd20d38095b145df37be674632287a52f4427","filename":"github/tests/ReplayData/Issue33.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dcde122984a1cb07bf92825dbfda94df6a68af32","filename":"github/tests/ReplayData/Issue33.testClosedIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b31ba310d16b55f4451b27b603c85b96b99ae399","filename":"github/tests/ReplayData/Issue33.testOpenIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eefc7e94209ba85d1019a4abf556fd489609a31e","filename":"github/tests/ReplayData/Issue494.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d2eaa5268603989fed79a192c1125ef42b164e42","filename":"github/tests/ReplayData/Issue50.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4fc4e4073af1576b80c96c7e2475a0d7063684ab","filename":"github/tests/ReplayData/Issue50.testAddLabelToIssue.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2884f165d475892d328e8ff70a1f445bf84a0cbc","filename":"github/tests/ReplayData/Issue50.testCreateIssueWithLabel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8868c42714a24702b08690587c5d0211fe31f02d","filename":"github/tests/ReplayData/Issue50.testGetIssuesWithLabel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f7a5849221702f4e0dc68c0534edfade1e1be531","filename":"github/tests/ReplayData/Issue50.testGetLabel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d5fa1ddf25a2dee415c9f378287a8d6be1ce2192","filename":"github/tests/ReplayData/Issue50.testGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee8d60b1b25e4beb8940e33d2a7c350d468c42a0","filename":"github/tests/ReplayData/Issue50.testIssueGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01a833337636675e26a5cf9ea8405723351681b9","filename":"github/tests/ReplayData/Issue50.testRemoveLabelFromIssue.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3f4a4173324684a0bcce3ce3dc1d45221d6cebcf","filename":"github/tests/ReplayData/Issue50.testSetIssueLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dab58fe0ae2601fa39d394b0dc5674c3c2b25ac2","filename":"github/tests/ReplayData/Issue54.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9c1cdf47b5c066675831db4d7e6d48598ddb6409","filename":"github/tests/ReplayData/Issue54.testConversion.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ffbace5b712787022cd874f20a7692e59012a462","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterprise.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bd5b1e596d51f86415608aa6ffd646324061f6c9","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterpriseWithPort.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ad967f64de33a4edb657f9596ce191c1d8589ebe","filename":"github/tests/ReplayData/Issue87.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"39a7f5034c73701754b18cba69abaf03ef1c48a3","filename":"github/tests/ReplayData/IssueComment.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0f0457abe7d1fb855264b258e721db2e2c6e061f","filename":"github/tests/ReplayData/IssueComment.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8551d7d4b57f69e21d656c1c01584ee5bde55eb","filename":"github/tests/ReplayData/IssueComment.testGetReactions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dea7355c5bea8dce58eb5991bbeb46c8a6b5f5e5","filename":"github/tests/ReplayData/IssueEvent.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a93448223a43fa61b5f4ac246b317bfb7f234abb","filename":"github/tests/ReplayData/IssueEvent.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"72918401316da1b51c97aa034878f549b07833fb","filename":"github/tests/ReplayData/Label.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9f1f1d8ad666f9dc214774406d7c3c618e05ca8f","filename":"github/tests/ReplayData/Label.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ecf3ee8172f2d6063369cecc495e826a56c230f2","filename":"github/tests/ReplayData/LazyRepository.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d73fa84d313e0c5330ca2e388124f4f83324fcd2","filename":"github/tests/ReplayData/LazyRepository.testGetIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f567fa8271f790cad148301ffbb0488702601fcb","filename":"github/tests/ReplayData/LazyRepository.testGetUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"96d38f2a62ebe509877901c51385a5aa833f5109","filename":"github/tests/ReplayData/LazyRepository.testOwner.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c42a9ae0b6fc63227c73c42fd53e81769a25ec27","filename":"github/tests/ReplayData/Logging.testLoggingWithBaseUrl.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3957553d2ac1381441c949028f83b0c8f252518f","filename":"github/tests/ReplayData/Logging.testLoggingWithBasicAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35e2bca3e6b1460be145fc49f16a0ee05eab5879","filename":"github/tests/ReplayData/Logging.testLoggingWithOAuthAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14b309a8c22e64349df1fbd286a4c18c7146c900","filename":"github/tests/ReplayData/Logging.testLoggingWithoutAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"20dc2580756725ffbbfb697b8d120f4798f99c9c","filename":"github/tests/ReplayData/Markdown.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f13ebe417a0ed3031383e173893883054951af05","filename":"github/tests/ReplayData/Milestone.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a9c841d5032ee424be7c6ba53ef8248fd917606d","filename":"github/tests/ReplayData/Milestone.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"397e007dc115b0e5d8916b00d84498d0f5bfdebd","filename":"github/tests/ReplayData/Milestone.testGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c584a88217478d92a9968a167a72ee3b4f033083","filename":"github/tests/ReplayData/NamedUser.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14e16ebcef877070b5031800ad6e4fb292616ae7","filename":"github/tests/ReplayData/NamedUser.testAttributesOfOtherUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ff78a099dd579a54abb4143dfab9edb823814100","filename":"github/tests/ReplayData/NamedUser.testGetEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"98744d958ad103aac6b87b7917df73ca09559b4d","filename":"github/tests/ReplayData/NamedUser.testGetFollowers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c5664be7ebd249c6a46c27135aaeed66c8e8fee0","filename":"github/tests/ReplayData/NamedUser.testGetFollowing.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a252e0280d443e08e557b5109870ac43da964fa5","filename":"github/tests/ReplayData/NamedUser.testGetGists.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"846233458f9a6ef5c1618aae78bc45ab35ab3ef5","filename":"github/tests/ReplayData/NamedUser.testGetKeys.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"93d9b7685512fc17986e599cf0b439306203f951","filename":"github/tests/ReplayData/NamedUser.testGetOrgs.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2507e4ca2fcc642d161add858d57c9e84696daa8","filename":"github/tests/ReplayData/NamedUser.testGetPublicEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0a17525c621b819f28e649b082bc8619a6cafa2e","filename":"github/tests/ReplayData/NamedUser.testGetPublicReceivedEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e548c61c5cd57e7ceae784aed918636d38f0a609","filename":"github/tests/ReplayData/NamedUser.testGetReceivedEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/NamedUser.testGetRepo.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f5927c5eac564de12f300700d9de5e457615089b","filename":"github/tests/ReplayData/NamedUser.testGetRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d9dc67a3b3ddfbeb12766d4d8744c12d42fb978","filename":"github/tests/ReplayData/NamedUser.testGetReposWithType.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fdc793bed4bdd137c6f593738e724267b7ce56c4","filename":"github/tests/ReplayData/NamedUser.testGetStarred.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"82ee98e6583088149046a9035c140e3f60398634","filename":"github/tests/ReplayData/NamedUser.testGetSubscriptions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89d2c521142d2b6bb8bfd925011ea0e5e8f245e2","filename":"github/tests/ReplayData/NamedUser.testGetWatched.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8686861f3d99e507c284f1e894d290079e252f7","filename":"github/tests/ReplayData/NamedUser.testHasInFollowing.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"301591609c426e37386cd6b73b73a8bda11f83f2","filename":"github/tests/ReplayData/Organization.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f362310f262352a6e06ea9ae5ac3813fbaf2a09","filename":"github/tests/ReplayData/Organization.testCreateFork.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f86012dd7a6393f2abe01f27558cf99dc12d7f70","filename":"github/tests/ReplayData/Organization.testCreateRepoWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b44d8b90222471fbf38063a9a6e19a13ba86abdb","filename":"github/tests/ReplayData/Organization.testCreateTeamWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7cb41076ee3319d8ad82adf9f759e25636766c11","filename":"github/tests/ReplayData/Organization.testGetEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"db70ce23dc93573451cea7edfe0fd628951d9507","filename":"github/tests/ReplayData/Organization.testGetIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b80482a2c916de3390184c143729dc7b3dc0aed9","filename":"github/tests/ReplayData/Organization.testGetIssuesWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"03f1f429008f878be91eadf7908d1ed45095eceb","filename":"github/tests/ReplayData/Organization.testGetMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"70e8e97a4d9822e15c5a07641afb4ddada21a92d","filename":"github/tests/ReplayData/Organization.testGetPublicMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fb8353cc3186115b7a8a79b5575f2106d51c1270","filename":"github/tests/ReplayData/Organization.testGetRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"779284c062bcc12fa5929801febd1a74c015dc01","filename":"github/tests/ReplayData/Organization.testGetReposWithType.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"46c4acba3de6fc6009ff8146c2aac42e0e133ce3","filename":"github/tests/ReplayData/Organization.testGetTeams.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"875ff9e70a281559e89ec235fe616fed2d1d15f4","filename":"github/tests/ReplayData/Organization.testMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b67ef7c085bd28b49fae8e88b319b24b9ea30758","filename":"github/tests/ReplayData/Organization.testPublicMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"57b6e1a23796374cab458e262e1b7f0c901687e2","filename":"github/tests/ReplayData/OrganizationHasInMembers.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/PaginatedList.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"05a96f8907cb08062475eb6e0eebab39623595ee","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7b88f2b69601b9c6030fbab659fd0f4401b4e6ac","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithGetPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2d7bb6dfa9d5d1270a66409ea2f64b3b2708862f","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithNoUrlParams2.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testGetFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"693cabd5de565c3ce87856edd0421a76e4856d75","filename":"github/tests/ReplayData/PaginatedList.testGetThirdPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"17a36885ecfd620871475a9147615cbe07ec5c23","filename":"github/tests/ReplayData/PaginatedList.testGettingTheReversedListDoesNotModifyTheOriginalList.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingAfterIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"1f7c3a0c618cfb492bff37df664aab9021ca755b","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInThirdPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIterationInSlice.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"40c8fdb6efad0e7be4e5bb198b36b7fd95830c3b","filename":"github/tests/ReplayData/PaginatedList.testNoFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationSupportsIterator.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"502c05d24253950207933d5a7957a1bdca4342e3","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithMultiplePages.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithSinglePage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSeveralIterations.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingInFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilEnd.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21624eca355af27f649a6d14211cab14aeb05516","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilFourthPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/Persistence.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0c0581afd71ab5f3e4f5df11e4c83176dd5e4b03","filename":"github/tests/ReplayData/PullRequest.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f41d6616cc044c72241365d554b9e8af3903744","filename":"github/tests/ReplayData/PullRequest.testCreateComment.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8130f423a59910224f389a5cdad1c818fce7476","filename":"github/tests/ReplayData/PullRequest.testGetComments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d1517454fdc23e01257f762f41efa18c331e00ef","filename":"github/tests/ReplayData/PullRequest.testGetCommits.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"69f64d309cbae6eb19b500827d9fde15271e09a8","filename":"github/tests/ReplayData/PullRequest.testGetFiles.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8855499d8d0a56726e208d162415ed574ae07402","filename":"github/tests/ReplayData/PullRequest.testGetIssueComment.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8d7e393d2e5855d1323d2b4c1b407d596facf80a","filename":"github/tests/ReplayData/PullRequest.testGetIssueComments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"488b720429c4b1672184b70b41fee7b89473141d","filename":"github/tests/ReplayData/PullRequest.testMerge.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"50cd9c3df6616168823f83c8b03d9fe1dcc14cb6","filename":"github/tests/ReplayData/PullRequest.testMergeWithCommitMessage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0984d3abd06d8d487f16ddd543b9696db7320227","filename":"github/tests/ReplayData/PullRequestComment.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2a70109a0af9533722f7c6075e92ebc8b5b65bad","filename":"github/tests/ReplayData/PullRequestComment.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"373f7adc095f89c4e5b6068c4d6c5bcc1d37dc17","filename":"github/tests/ReplayData/PullRequestComment.testGetReactions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"43dce8e4234b8c38b249d4f6adf399fdb3c4c293","filename":"github/tests/ReplayData/PullRequestFile.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"732633c10936fe827a8f1d023d1dfc1c34824b5c","filename":"github/tests/ReplayData/PullRequestReview.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"562c425b42ff684e5f04823b4c6b0a22070fe3c2","filename":"github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dca139cb3d4958b76bc8468b7572b12fb00a645b","filename":"github/tests/ReplayData/RateLimiting.testGetRateLimit.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"df34e96ca7f890fa361996c678afb07cc42a130f","filename":"github/tests/ReplayData/RateLimiting.testRateLimiting.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"787d3956812c905b6ec26753d5df4392c1a6d1de","filename":"github/tests/ReplayData/RateLimiting.testResetTime.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0268609f775f39abf16d4a5024d6eb4f4a57a2e8","filename":"github/tests/ReplayData/RawData.testCompletedObject.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4b0db8f23bbd0d123f3fcdae6c13ab896f61291a","filename":"github/tests/ReplayData/RawData.testNonCompletableObject.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c572a42a13d93c3073c1fae19c5683be209627a5","filename":"github/tests/ReplayData/RawData.testNotYetCompletedObject.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0ce726ed473c88e242a6c6dbecbf9b64e9db88af","filename":"github/tests/ReplayData/Reaction.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89c6761ecab93e3a89aa36bcd9202e268835e933","filename":"github/tests/ReplayData/Reaction.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a0b5c49c063ca1119bf2c7e6a98ca7ff4754a344","filename":"github/tests/ReplayData/Reaction.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"068ca57b9c5f9d39b81af7a912d6646370892325","filename":"github/tests/ReplayData/Release.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dddeef7a36d73e5793718ba3b74df6531ab757e5","filename":"github/tests/ReplayData/Release.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2c43077bc275e4f2370cdc06a02e730b2aad3a05","filename":"github/tests/ReplayData/Release.testCreateGitTagAndRelease.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8a2b900110b6c54167f35dd07ba656ffcf906bfa","filename":"github/tests/ReplayData/Release.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7091a55b35bdc075a7367a30759c73cb611c3adc","filename":"github/tests/ReplayData/Release.testGetAsset.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3652b3c26278480c1cf4bb178d2d43d660ec8651","filename":"github/tests/ReplayData/Release.testGetAssets.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f410765876a050eac81285ad124da33116b6eda4","filename":"github/tests/ReplayData/Release.testGetLatestRelease.txt","status":"added","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"699b446a201dfcb13cf08921f2ab523078163b01","filename":"github/tests/ReplayData/Release.testGetRelease.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8c675e6be527d2feb53be45442f37708db88f1b","filename":"github/tests/ReplayData/Release.testUpdate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"027ee7a60cb94b6a9577e2a22956a2d49ddb299c","filename":"github/tests/ReplayData/Release.testUploadAsset.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4e5df1305b1edcaef1acae9eeaae25059bd853f5","filename":"github/tests/ReplayData/ReleaseAsset.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"214e784797bad896cee5525685a5971e4e93670e","filename":"github/tests/ReplayData/ReleaseAsset.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af26b8527a8e5c05e4d344e554d6f401295fe0c0","filename":"github/tests/ReplayData/ReleaseAsset.testUpdate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"972491525f07e3491ed9ffe5e70b1d056ca96456","filename":"github/tests/ReplayData/Repository.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b85dd717383b483193033f0a63e1cbd159963999","filename":"github/tests/ReplayData/Repository.testAssignees.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eee412afb1dedacee8731d90ce165a48bddf8354","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionContexts.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5df6fcceeb55b96df94297d393e88c5c9dd064fd","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionEnforcementLevel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"aedfb7ee70e434d2b5d51a5af34462828796fd6f","filename":"github/tests/ReplayData/Repository.testCollaborators.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ea3d1d065f52799bfbd192dafbbb8260e4a58014","filename":"github/tests/ReplayData/Repository.testCompare.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16de2820b2b56e6d66385999e1ddc5628fe1d145","filename":"github/tests/ReplayData/Repository.testCreateGitCommit.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d529a7b991c0e0e3f07e812d985cf20cd2aa555","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c2c4dde2963477f156daa0bd5d2ae1758fb4ac7f","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithParents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"821c71e07abf01b2b1048440224b3b9a74dfc382","filename":"github/tests/ReplayData/Repository.testCreateGitTreeWithBaseTree.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21:10 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/"382b92a7be1b87a6e528c22581b09ece1318bffcae2689c178933d885df348e9"'), ('Last-Modified', 'Thu, 01 Feb 2018 00:16:11 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '19'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE75:2A8FF:3256282:2CE6190:69626056')] +{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYmZlOGQwZjYyM2NhMjlkOTg0ZWMwOWQyYjU2NmU5YWIxMGFlMDI0","commit":{"author":{"name":"R1kk3r","email":"R1kk3r@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"message":"Remove the default \"null\" input send during GET request (#691)\n\n* Remove the default \"null\" input send during GET request\r\n\r\n* Remove the 'null' value from all tests","tree":{"sha":"3be58227503a8829339306ffa910c5c45e3f4676","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3be58227503a8829339306ffa910c5c45e3f4676"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…","comments_url":"…","author":{"login":"R1kk3r","id":8941245,"node_id":"MDQ6VXNlcjg5NDEyNDU=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/R1kk3r","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…"}],"stats":{"total":1862,"additions":931,"deletions":931},"files":[{"sha":"ae512681fb2a9a4beb02936d63f74f2de7c71cac","filename":"github/Requester.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e8e838a31ecebf58cb13f3907473e22253816bb","filename":"github/tests/Logging_.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fa9b95b08adc77b7d176d58b194fb4980c4f7553","filename":"github/tests/ReplayData/AuthenticatedUser.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fd2474416b0d7301a3f80734ce4fb0c8aef4c976","filename":"github/tests/ReplayData/AuthenticatedUser.testCreateFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6b3a9cb3ff333fad031a1a969565010e9e08f052","filename":"github/tests/ReplayData/AuthenticatedUser.testEmails.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"2c13f315f366c935bd4457c58fe936b83935f542","filename":"github/tests/ReplayData/AuthenticatedUser.testFollowing.txt","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e4a315bddeb9451cc41fff3df7885a3d499a8fdf","filename":"github/tests/ReplayData/AuthenticatedUser.testGetAuthorizations.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d6d547c87cc5a7a830609582f2d017299855181","filename":"github/tests/ReplayData/AuthenticatedUser.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee4acbe742f39b0ee7db9de1a5c87e7a8a5dcfe6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fc243ab943bc7c934a1c14d8173be2a0b8fbee62","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a99983599fed3989a2fff567210279ade49d0bba","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16cf1d959a76d759ba92cb46633093fc41279cf7","filename":"github/tests/ReplayData/AuthenticatedUser.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"86d87360fd9c1191891c01282013922fda30e217","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotification.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1a70b15c5729b9d51ba2c81d2c17d5380636d014","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotifications.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b5a32e8e5dc243fbfab923a9cfcacc2fa95cef3","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotificationsWithOtherArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13ffcbb0250c576a7093938be7dc34adaa1f7739","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrganizationEvents.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13cb72bb1596a394d397faa9c56c1f15c95433dc","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrgs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ad8d42fab5c11e03ce3a81bd35c1161af8ee738b","filename":"github/tests/ReplayData/AuthenticatedUser.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3e6afea17e85cf239cf53bda145accc70ab5697","filename":"github/tests/ReplayData/AuthenticatedUser.testGetReposWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d0d887e56cc88241f73bc255a679953665cc6ba6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetStarredGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"92785959fd58cfab7e727204be5780bd071d7c32","filename":"github/tests/ReplayData/AuthenticatedUser.testGetTeams.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f13fa35577b87cee1c425e534d975c43de820c57","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"63e871c0020e4f9f4e67db3a687b165de7479021","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b10e61d4d53e03081f9f0575e21e566dff84e4fd","filename":"github/tests/ReplayData/AuthenticatedUser.testStarring.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1256b91f1361e066bb4acd855f5358d75787fcf6","filename":"github/tests/ReplayData/AuthenticatedUser.testSubscriptions.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0fee5b52c97c5d5a5c06c4a98b141fa94fc8474b","filename":"github/tests/ReplayData/AuthenticatedUser.testWatching.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d5e56c14052d1de71ad2d5ae810235ebb17c95a8","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithLogin.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"425bcd1f6c84a04cb55be0b55707ee9d3822ec12","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithToken.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4357e4453f4b18d15df489402c3e70add0118f92","filename":"github/tests/ReplayData/Authentication.testBasicAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"efcf3628a18438e4c535267933897019d06cf1ba","filename":"github/tests/ReplayData/Authentication.testNoAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f6a50faf696352ae2bb6fd18cdf36b92f51a2c88","filename":"github/tests/ReplayData/Authentication.testOAuthAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"666056f4e79baf48cc4b7988d6201d71eb05cf37","filename":"github/tests/ReplayData/Authentication.testSecretKeyAuthentication.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6d0f9f01af5acb4691d8e94a8acaab1991563af2","filename":"github/tests/ReplayData/Authentication.testUserAgent.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c225d7a56691b7695591bce48a1ebcfee873d44b","filename":"github/tests/ReplayData/Authorization.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ed8b51778789c5a682807596f6cfb5033d555873","filename":"github/tests/ReplayData/Authorization.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a249e52f2db24f87ea99205998a0bc8b9593ac36","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeInClassAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeTransformation.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1191038c709ba815d2e8976cccebc7c2c2011963","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d62b76ff4af8b051d9d3df0beb8141c6c8552e91","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8542c2261908e8c2c0767920e720889399cba058","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInDict.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a3e26db30db2660f789ca24c94d8ca8a820de73f","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d0ae92940279199cbc3b609581eb938a8e1df72","filename":"github/tests/ReplayData/BadAttributes.testIssue195.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"42a4fbca1a248c6ade2597f1c8d073f7c45cd627","filename":"github/tests/ReplayData/Branch.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"62bfa681493885eb631b96071b8d35d18d277505","filename":"github/tests/ReplayData/Branch.testCommitCommentsOnLine.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"68a5e361c9b0cc4034205994061cc2396807ac53","filename":"github/tests/ReplayData/Branch.testProtectedAttributes.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae41cf9930a54f844def85b87471c17d7a3d43bc","filename":"github/tests/ReplayData/Commit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3d79b663004bda0b8052a5027bcf5c28efbbc4ae","filename":"github/tests/ReplayData/Commit.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c584befdaa345bc8233ed9c25bba44c27cbd8b7c","filename":"github/tests/ReplayData/CommitCombinedStatus.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"024f236d53337d76ca3742759ba2429e8bbe4b30","filename":"github/tests/ReplayData/CommitComment.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1430b71497af7f4786dd3b4bd8001106ec5a05cd","filename":"github/tests/ReplayData/CommitComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6dec5a3f4aec14b24f0769004cb4c504ba1e7a1e","filename":"github/tests/ReplayData/CommitComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7eb92c6fd038dd7c516325c77013879b1644f312","filename":"github/tests/ReplayData/CommitStatus.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d4beca4c2188ac1ac7554f22c85b83f0c063e3e0","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1238d33da59a2cc67577bfe6e6f54c3aa9fed775","filename":"github/tests/ReplayData/ContentFile.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bbc4408719fcd76936c1b8255547b8fb6d278f15","filename":"github/tests/ReplayData/Download.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"85afa3aadd5fcf86cbbcc2f8936124cf2fcf223a","filename":"github/tests/ReplayData/Download.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a1657a95314f2b200e76c5c9c353c8be62c47601","filename":"github/tests/ReplayData/Enterprise.testHttp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f69e5f4aced99c4627fcc974ab9499067c5a7c13","filename":"github/tests/ReplayData/Enterprise.testHttps.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a1d3f565a77117c3a0cd7b24f2759f3f3d496fe","filename":"github/tests/ReplayData/Enterprise.testLongUrl.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0a7f4ff7a8847f6e0f4dded421c8d27c46591944","filename":"github/tests/ReplayData/Enterprise.testSpecificPort.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"96d2b87605ee696367134155739abd51f5623bc3","filename":"github/tests/ReplayData/Equality.testBranchEquality.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3ea41a026a658d7de31219660406e01f8bc79b8","filename":"github/tests/ReplayData/Equality.testUserDifference.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c061908b2b2fad79dce7b485ec88fe19a46026e2","filename":"github/tests/ReplayData/Equality.testUserEquality.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1ea7b2b6594276be9d6164a75d76832157f7ff63","filename":"github/tests/ReplayData/Event.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4028ca293790edfb8813936cf6b380dae48cff49","filename":"github/tests/ReplayData/Exceptions.testBadAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"34340f8419f5a97c5655ac2fa195dcacf883cd63","filename":"github/tests/ReplayData/Exceptions.testNonJsonDataReturnedByGithub.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fbb8a31e31501b14d2d34b0313faa1e5db5e8501","filename":"github/tests/ReplayData/Exceptions.testUnknownObject.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"98935a9eaef0b2c3a78d831924721d4d4d379845","filename":"github/tests/ReplayData/Exceptions.testUnknownUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4c4752c5b504fcad94d22a5f025e8eddfbf077a3","filename":"github/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt","status":"modified","additions":60,"deletions":60,"changes":120,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"27eb6a8220d5dadaa0aaf4d7b54cb62ebd6f9ccc","filename":"github/tests/ReplayData/Gist.testAttributes.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e5a449ae4c12998fc58c84d3424f5b5dcf8ad1c6","filename":"github/tests/ReplayData/Gist.testCreateComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b22500c1065445e717a3f6d3282439c66368fcc7","filename":"github/tests/ReplayData/Gist.testDelete.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7a6d84eb6c4701a51c026c8b8a90ecddd5893387","filename":"github/tests/ReplayData/Gist.testDeleteFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"869c07e936b7bd21ce10b14d4be8e1c31c09e738","filename":"github/tests/ReplayData/Gist.testEditWithAllParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9690563ae43062788c234c0adf0db3bb7a083c4a","filename":"github/tests/ReplayData/Gist.testEditWithoutParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a324d9138adcdaeecef2fe3324e95f095d44841","filename":"github/tests/ReplayData/Gist.testFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9fc68bd047481bbcc5c0907d6526a568455113b5","filename":"github/tests/ReplayData/Gist.testGetComments.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"834877a2b45f15de5ec7bbb98c9c623892ab4688","filename":"github/tests/ReplayData/Gist.testRenameFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5fe65eb4fc93d71d45a6b970b8e41d36777a900e","filename":"github/tests/ReplayData/Gist.testStarring.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fb7ff856f1a0fd1511b0255aca190dc669b5f9ce","filename":"github/tests/ReplayData/GistComment.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a68067b6f9fe4392f69decf950a76838a3b428ef","filename":"github/tests/ReplayData/GistComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b775ed5c0d19bba779eee97c8d82c53076c01562","filename":"github/tests/ReplayData/GitBlob.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"16b4d77f2c46bc1728a7b52369fd4a401b191c57","filename":"github/tests/ReplayData/GitCommit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd2136e6e69460b038f21f60704a2afc17b30977","filename":"github/tests/ReplayData/GitRef.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ead5b2c4a86741c74c638295cad1c31d01001b3e","filename":"github/tests/ReplayData/GitRef.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"add7f585747d7a8907d9bc5ed16db43698857315","filename":"github/tests/ReplayData/GitTag.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"429055c9e57244df8536e2eef5d80b14a7cdd4a9","filename":"github/tests/ReplayData/GitTree.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b5363131e82b84dbdbb016b0c177a034bdef8bad","filename":"github/tests/ReplayData/Github.testGetEmojis.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"df020c4c3a7d8b316782cbd950aa3cd89ffd3297","filename":"github/tests/ReplayData/Github.testGetGists.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d643f1e766ad0c0388835b231d73bad1dd797c4e","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplate.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8eee46f50acd0a36c576097283aa0c6bb9b5985","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplates.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"78b92a1fc5d37b06d7791c9b0e474ec86c59d3be","filename":"github/tests/ReplayData/Github.testGetHook.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8e1ab91c92b47b1e9c4e82d949580cb14f9c7c08","filename":"github/tests/ReplayData/Github.testGetHooks.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/Github.testGetRepoFromFullName.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c3407e6dbef8628074b18d33812c2ba465baf008","filename":"github/tests/ReplayData/Github.testGetRepoFromId.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14910c7de15dafbd1b70a60ca9c4683319d384ae","filename":"github/tests/ReplayData/Github.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0564e373fbf7d66e9a34004a4e9613c774d37051","filename":"github/tests/ReplayData/Github.testGetReposSince.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c655af2d39334f7bf893665039ffd50050e73cd6","filename":"github/tests/ReplayData/Github.testGetUsers.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"255eb5c1750dfd45e01a6610d4d032135f7987ae","filename":"github/tests/ReplayData/Github.testGetUsersSince.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21b10ea4d3611c638ed96ee53f41de0a6f213c93","filename":"github/tests/ReplayData/Github.testLegacySearchRepos.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"59482af7a3645041d66abc42a17b5dd3799c059a","filename":"github/tests/ReplayData/Github.testLegacySearchReposExplicitPagination.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a4c713c1c8e4bda07d201842aa12b055a58a5908","filename":"github/tests/ReplayData/Github.testLegacySearchReposPagination.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ca04b62f7e62a3069e3e5a0d3d26592417488bd0","filename":"github/tests/ReplayData/Github.testLegacySearchReposWithLanguage.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf8ed68cb0934c52324d3e15750f0063c272832f","filename":"github/tests/ReplayData/Github.testLegacySearchUserByEmail.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testLegacySearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d52e4eca22c5920cec28c6ecb15dbe63acd0756b","filename":"github/tests/ReplayData/Github.testLegacySearchUsersExplicitPagination.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c0768215e75ca8c639c73c3d49cd25d50d5b2856","filename":"github/tests/ReplayData/Github.testLegacySearchUsersPagination.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c052fc6947dd0fb51cf81fc3708ddd5003795544","filename":"github/tests/ReplayData/Github.testSearchRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"61e97e984153fb0a576fcad4cf2472049729fc5d","filename":"github/tests/ReplayData/Github.testSearchUserByEmail.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testSearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8238293a3c7739e9f055920717b199def8394e24","filename":"github/tests/ReplayData/Hook.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35d5b4ebccb1e3ebc2b164613b79a98a71fd6020","filename":"github/tests/ReplayData/Hook.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7dcca212ad1033fc54d6e34a74755a8212c4f20e","filename":"github/tests/ReplayData/Hook.testPing.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b77d2fc33c0bc0ad2a9dccdbe003a537919b3c4d","filename":"github/tests/ReplayData/Hook.testTest.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0098cce6d3d1dff648b5bdffee2ff4ce7ff5dc25","filename":"github/tests/ReplayData/Issue.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"754e1c1fe322e27d1fa0b2ade9fc929b568c59a5","filename":"github/tests/ReplayData/Issue.testAddAndRemoveAssignees.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf5c11f89bf0a1b068ac1cf7e848f2c449707beb","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabels.txt","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"836084944d1287e3d85009fea65560f525a89755","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabelsWithStringArguments.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b5c449743e450bd2104ad0e275e647a43e43d432","filename":"github/tests/ReplayData/Issue.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4954645e321ae426d866f5c614f260be58f9acb4","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabels.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8eacccf4819d8822fb52208dcee888a09509861a","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabelsWithStringArguments.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e1bcb4f8e3d865e78abec0ac0dd3be1ce41c4227","filename":"github/tests/ReplayData/Issue.testEditWithAllParameters.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"38a17838415137beefbfcf87288763361bc07c2c","filename":"github/tests/ReplayData/Issue.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9dd15f2852a90179a67af7c9c7d4d3d02e0da386","filename":"github/tests/ReplayData/Issue.testGetCommentsSince.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5391293d77a937e0ec9a56c1a7bb9c9ccd9e6725","filename":"github/tests/ReplayData/Issue.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"53874dbaea7c028a9102dff2b06a632113dc148f","filename":"github/tests/ReplayData/Issue.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5e27e933bf19ca470dd88c9b3faad017df9f82e1","filename":"github/tests/ReplayData/Issue.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf4003f79f571dd8084bafe48d7c88a57ad8bfb1","filename":"github/tests/ReplayData/Issue131.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01f5744b5abc831d2fda65b8ac08fa45d694d1dd","filename":"github/tests/ReplayData/Issue131.testGetPullWithOrgHeadUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8f656a1fedc33063adada6b6aa75641281102e32","filename":"github/tests/ReplayData/Issue131.testGetPullsWithOrgHeadUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"497d81512841a06376f5c8a0673e32fc42ffbc8b","filename":"github/tests/ReplayData/Issue133.testGetPageWithoutInitialArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ae3414605995f5d9d65e46723daf65f98f5a0dbb","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsFailsWhenAutenticatedThroughOAuth.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bbda83c7e6c47b233a2feb1f27d8e42f09b33604","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsSucceedsWhenAutenticatedThroughLoginPassword.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5a14176434a7a32fca896324f668bf59e15ded83","filename":"github/tests/ReplayData/Issue134.testGetOAuthScopesFromHeader.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"10a97fef33ca80e6214eb59ce52e0a5eab802005","filename":"github/tests/ReplayData/Issue139.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"76c7550db49c70f345c2fa3798aa06f812d3c13e","filename":"github/tests/ReplayData/Issue139.testCompletion.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"6114fef60f8699bfa5a9da8626ed84eb552f7718","filename":"github/tests/ReplayData/Issue140.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0999c57f9596b209bc541a6ae78992140fe94825","filename":"github/tests/ReplayData/Issue140.testGetDirContents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b0add897beba366c24513d26fb16b36d723f3199","filename":"github/tests/ReplayData/Issue140.testGetDirContentsThenLazyCompletionOfFile.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01cab386c0d913caef0bef5c71c34a498aacf95e","filename":"github/tests/ReplayData/Issue140.testGetDirContentsWithRef.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ec701bafbc9fa23fd9bf4dffdf2c1f2879c2c880","filename":"github/tests/ReplayData/Issue140.testGetFileContents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ddbfb9c7449da41916ce43a8dd462efccbc8526a","filename":"github/tests/ReplayData/Issue158.testPaginationWithSecretKeyAuthentication.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5444722cd83b58cb4e57c0bdb218298e8e39a808","filename":"github/tests/ReplayData/Issue174.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0e3be28273d8f39eae0fbb756fa535e697fee1b4","filename":"github/tests/ReplayData/Issue174.testGetDirContentsWhithHttpRedirect.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14f1cee3cccedc026fdeaec02c9c64e86e5c9405","filename":"github/tests/ReplayData/Issue214.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"187fa73a0c1cf266b20e86bf93bc7aa9aeebb444","filename":"github/tests/ReplayData/Issue214.testAssignees.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"26776936bff15d073dd66c307724ae45a549e3b4","filename":"github/tests/ReplayData/Issue214.testCollaborators.txt","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3821a7c6cbe790128813eaee55dad0ebfc9ecf76","filename":"github/tests/ReplayData/Issue214.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue216.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a6eca3755c3737f450c7acc6aa7cfcda82eb8e3f","filename":"github/tests/ReplayData/Issue216.testIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue278.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"330e60a7c2125c71e286b105a71c0cb4e949fa06","filename":"github/tests/ReplayData/Issue278.testIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f7dd20d38095b145df37be674632287a52f4427","filename":"github/tests/ReplayData/Issue33.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dcde122984a1cb07bf92825dbfda94df6a68af32","filename":"github/tests/ReplayData/Issue33.testClosedIssues.txt","status":"modified","additions":38,"deletions":38,"changes":76,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b31ba310d16b55f4451b27b603c85b96b99ae399","filename":"github/tests/ReplayData/Issue33.testOpenIssues.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eefc7e94209ba85d1019a4abf556fd489609a31e","filename":"github/tests/ReplayData/Issue494.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d2eaa5268603989fed79a192c1125ef42b164e42","filename":"github/tests/ReplayData/Issue50.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4fc4e4073af1576b80c96c7e2475a0d7063684ab","filename":"github/tests/ReplayData/Issue50.testAddLabelToIssue.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2884f165d475892d328e8ff70a1f445bf84a0cbc","filename":"github/tests/ReplayData/Issue50.testCreateIssueWithLabel.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8868c42714a24702b08690587c5d0211fe31f02d","filename":"github/tests/ReplayData/Issue50.testGetIssuesWithLabel.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f7a5849221702f4e0dc68c0534edfade1e1be531","filename":"github/tests/ReplayData/Issue50.testGetLabel.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d5fa1ddf25a2dee415c9f378287a8d6be1ce2192","filename":"github/tests/ReplayData/Issue50.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee8d60b1b25e4beb8940e33d2a7c350d468c42a0","filename":"github/tests/ReplayData/Issue50.testIssueGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01a833337636675e26a5cf9ea8405723351681b9","filename":"github/tests/ReplayData/Issue50.testRemoveLabelFromIssue.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3f4a4173324684a0bcce3ce3dc1d45221d6cebcf","filename":"github/tests/ReplayData/Issue50.testSetIssueLabels.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dab58fe0ae2601fa39d394b0dc5674c3c2b25ac2","filename":"github/tests/ReplayData/Issue54.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9c1cdf47b5c066675831db4d7e6d48598ddb6409","filename":"github/tests/ReplayData/Issue54.testConversion.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ffbace5b712787022cd874f20a7692e59012a462","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterprise.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bd5b1e596d51f86415608aa6ffd646324061f6c9","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterpriseWithPort.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ad967f64de33a4edb657f9596ce191c1d8589ebe","filename":"github/tests/ReplayData/Issue87.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"39a7f5034c73701754b18cba69abaf03ef1c48a3","filename":"github/tests/ReplayData/IssueComment.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0f0457abe7d1fb855264b258e721db2e2c6e061f","filename":"github/tests/ReplayData/IssueComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8551d7d4b57f69e21d656c1c01584ee5bde55eb","filename":"github/tests/ReplayData/IssueComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dea7355c5bea8dce58eb5991bbeb46c8a6b5f5e5","filename":"github/tests/ReplayData/IssueEvent.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a93448223a43fa61b5f4ac246b317bfb7f234abb","filename":"github/tests/ReplayData/IssueEvent.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"72918401316da1b51c97aa034878f549b07833fb","filename":"github/tests/ReplayData/Label.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9f1f1d8ad666f9dc214774406d7c3c618e05ca8f","filename":"github/tests/ReplayData/Label.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ecf3ee8172f2d6063369cecc495e826a56c230f2","filename":"github/tests/ReplayData/LazyRepository.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d73fa84d313e0c5330ca2e388124f4f83324fcd2","filename":"github/tests/ReplayData/LazyRepository.testGetIssues.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f567fa8271f790cad148301ffbb0488702601fcb","filename":"github/tests/ReplayData/LazyRepository.testGetUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"96d38f2a62ebe509877901c51385a5aa833f5109","filename":"github/tests/ReplayData/LazyRepository.testOwner.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c42a9ae0b6fc63227c73c42fd53e81769a25ec27","filename":"github/tests/ReplayData/Logging.testLoggingWithBaseUrl.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3957553d2ac1381441c949028f83b0c8f252518f","filename":"github/tests/ReplayData/Logging.testLoggingWithBasicAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35e2bca3e6b1460be145fc49f16a0ee05eab5879","filename":"github/tests/ReplayData/Logging.testLoggingWithOAuthAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14b309a8c22e64349df1fbd286a4c18c7146c900","filename":"github/tests/ReplayData/Logging.testLoggingWithoutAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"20dc2580756725ffbbfb697b8d120f4798f99c9c","filename":"github/tests/ReplayData/Markdown.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f13ebe417a0ed3031383e173893883054951af05","filename":"github/tests/ReplayData/Milestone.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a9c841d5032ee424be7c6ba53ef8248fd917606d","filename":"github/tests/ReplayData/Milestone.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"397e007dc115b0e5d8916b00d84498d0f5bfdebd","filename":"github/tests/ReplayData/Milestone.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c584a88217478d92a9968a167a72ee3b4f033083","filename":"github/tests/ReplayData/NamedUser.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14e16ebcef877070b5031800ad6e4fb292616ae7","filename":"github/tests/ReplayData/NamedUser.testAttributesOfOtherUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ff78a099dd579a54abb4143dfab9edb823814100","filename":"github/tests/ReplayData/NamedUser.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"98744d958ad103aac6b87b7917df73ca09559b4d","filename":"github/tests/ReplayData/NamedUser.testGetFollowers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c5664be7ebd249c6a46c27135aaeed66c8e8fee0","filename":"github/tests/ReplayData/NamedUser.testGetFollowing.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a252e0280d443e08e557b5109870ac43da964fa5","filename":"github/tests/ReplayData/NamedUser.testGetGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"846233458f9a6ef5c1618aae78bc45ab35ab3ef5","filename":"github/tests/ReplayData/NamedUser.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"93d9b7685512fc17986e599cf0b439306203f951","filename":"github/tests/ReplayData/NamedUser.testGetOrgs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2507e4ca2fcc642d161add858d57c9e84696daa8","filename":"github/tests/ReplayData/NamedUser.testGetPublicEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0a17525c621b819f28e649b082bc8619a6cafa2e","filename":"github/tests/ReplayData/NamedUser.testGetPublicReceivedEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e548c61c5cd57e7ceae784aed918636d38f0a609","filename":"github/tests/ReplayData/NamedUser.testGetReceivedEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/NamedUser.testGetRepo.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f5927c5eac564de12f300700d9de5e457615089b","filename":"github/tests/ReplayData/NamedUser.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d9dc67a3b3ddfbeb12766d4d8744c12d42fb978","filename":"github/tests/ReplayData/NamedUser.testGetReposWithType.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fdc793bed4bdd137c6f593738e724267b7ce56c4","filename":"github/tests/ReplayData/NamedUser.testGetStarred.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"82ee98e6583088149046a9035c140e3f60398634","filename":"github/tests/ReplayData/NamedUser.testGetSubscriptions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89d2c521142d2b6bb8bfd925011ea0e5e8f245e2","filename":"github/tests/ReplayData/NamedUser.testGetWatched.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8686861f3d99e507c284f1e894d290079e252f7","filename":"github/tests/ReplayData/NamedUser.testHasInFollowing.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"301591609c426e37386cd6b73b73a8bda11f83f2","filename":"github/tests/ReplayData/Organization.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f362310f262352a6e06ea9ae5ac3813fbaf2a09","filename":"github/tests/ReplayData/Organization.testCreateFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f86012dd7a6393f2abe01f27558cf99dc12d7f70","filename":"github/tests/ReplayData/Organization.testCreateRepoWithAllArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b44d8b90222471fbf38063a9a6e19a13ba86abdb","filename":"github/tests/ReplayData/Organization.testCreateTeamWithAllArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7cb41076ee3319d8ad82adf9f759e25636766c11","filename":"github/tests/ReplayData/Organization.testGetEvents.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"db70ce23dc93573451cea7edfe0fd628951d9507","filename":"github/tests/ReplayData/Organization.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b80482a2c916de3390184c143729dc7b3dc0aed9","filename":"github/tests/ReplayData/Organization.testGetIssuesWithAllArguments.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"03f1f429008f878be91eadf7908d1ed45095eceb","filename":"github/tests/ReplayData/Organization.testGetMembers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"70e8e97a4d9822e15c5a07641afb4ddada21a92d","filename":"github/tests/ReplayData/Organization.testGetPublicMembers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fb8353cc3186115b7a8a79b5575f2106d51c1270","filename":"github/tests/ReplayData/Organization.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"779284c062bcc12fa5929801febd1a74c015dc01","filename":"github/tests/ReplayData/Organization.testGetReposWithType.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"46c4acba3de6fc6009ff8146c2aac42e0e133ce3","filename":"github/tests/ReplayData/Organization.testGetTeams.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"875ff9e70a281559e89ec235fe616fed2d1d15f4","filename":"github/tests/ReplayData/Organization.testMembers.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b67ef7c085bd28b49fae8e88b319b24b9ea30758","filename":"github/tests/ReplayData/Organization.testPublicMembers.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"57b6e1a23796374cab458e262e1b7f0c901687e2","filename":"github/tests/ReplayData/OrganizationHasInMembers.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/PaginatedList.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"05a96f8907cb08062475eb6e0eebab39623595ee","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPage.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7b88f2b69601b9c6030fbab659fd0f4401b4e6ac","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithGetPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2d7bb6dfa9d5d1270a66409ea2f64b3b2708862f","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithNoUrlParams2.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testGetFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"693cabd5de565c3ce87856edd0421a76e4856d75","filename":"github/tests/ReplayData/PaginatedList.testGetThirdPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"17a36885ecfd620871475a9147615cbe07ec5c23","filename":"github/tests/ReplayData/PaginatedList.testGettingTheReversedListDoesNotModifyTheOriginalList.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingAfterIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"1f7c3a0c618cfb492bff37df664aab9021ca755b","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInThirdPage.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIteration.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIterationInSlice.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"40c8fdb6efad0e7be4e5bb198b36b7fd95830c3b","filename":"github/tests/ReplayData/PaginatedList.testNoFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationSupportsIterator.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"502c05d24253950207933d5a7957a1bdca4342e3","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithMultiplePages.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithSinglePage.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSeveralIterations.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingInFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilEnd.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21624eca355af27f649a6d14211cab14aeb05516","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilFourthPage.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/Persistence.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0c0581afd71ab5f3e4f5df11e4c83176dd5e4b03","filename":"github/tests/ReplayData/PullRequest.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f41d6616cc044c72241365d554b9e8af3903744","filename":"github/tests/ReplayData/PullRequest.testCreateComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8130f423a59910224f389a5cdad1c818fce7476","filename":"github/tests/ReplayData/PullRequest.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d1517454fdc23e01257f762f41efa18c331e00ef","filename":"github/tests/ReplayData/PullRequest.testGetCommits.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"69f64d309cbae6eb19b500827d9fde15271e09a8","filename":"github/tests/ReplayData/PullRequest.testGetFiles.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8855499d8d0a56726e208d162415ed574ae07402","filename":"github/tests/ReplayData/PullRequest.testGetIssueComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8d7e393d2e5855d1323d2b4c1b407d596facf80a","filename":"github/tests/ReplayData/PullRequest.testGetIssueComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"488b720429c4b1672184b70b41fee7b89473141d","filename":"github/tests/ReplayData/PullRequest.testMerge.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"50cd9c3df6616168823f83c8b03d9fe1dcc14cb6","filename":"github/tests/ReplayData/PullRequest.testMergeWithCommitMessage.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0984d3abd06d8d487f16ddd543b9696db7320227","filename":"github/tests/ReplayData/PullRequestComment.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2a70109a0af9533722f7c6075e92ebc8b5b65bad","filename":"github/tests/ReplayData/PullRequestComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"373f7adc095f89c4e5b6068c4d6c5bcc1d37dc17","filename":"github/tests/ReplayData/PullRequestComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"43dce8e4234b8c38b249d4f6adf399fdb3c4c293","filename":"github/tests/ReplayData/PullRequestFile.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"732633c10936fe827a8f1d023d1dfc1c34824b5c","filename":"github/tests/ReplayData/PullRequestReview.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"562c425b42ff684e5f04823b4c6b0a22070fe3c2","filename":"github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dca139cb3d4958b76bc8468b7572b12fb00a645b","filename":"github/tests/ReplayData/RateLimiting.testGetRateLimit.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"df34e96ca7f890fa361996c678afb07cc42a130f","filename":"github/tests/ReplayData/RateLimiting.testRateLimiting.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"787d3956812c905b6ec26753d5df4392c1a6d1de","filename":"github/tests/ReplayData/RateLimiting.testResetTime.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0268609f775f39abf16d4a5024d6eb4f4a57a2e8","filename":"github/tests/ReplayData/RawData.testCompletedObject.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4b0db8f23bbd0d123f3fcdae6c13ab896f61291a","filename":"github/tests/ReplayData/RawData.testNonCompletableObject.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c572a42a13d93c3073c1fae19c5683be209627a5","filename":"github/tests/ReplayData/RawData.testNotYetCompletedObject.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0ce726ed473c88e242a6c6dbecbf9b64e9db88af","filename":"github/tests/ReplayData/Reaction.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89c6761ecab93e3a89aa36bcd9202e268835e933","filename":"github/tests/ReplayData/Reaction.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a0b5c49c063ca1119bf2c7e6a98ca7ff4754a344","filename":"github/tests/ReplayData/Reaction.testDelete.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"068ca57b9c5f9d39b81af7a912d6646370892325","filename":"github/tests/ReplayData/Release.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dddeef7a36d73e5793718ba3b74df6531ab757e5","filename":"github/tests/ReplayData/Release.testAttributes.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2c43077bc275e4f2370cdc06a02e730b2aad3a05","filename":"github/tests/ReplayData/Release.testCreateGitTagAndRelease.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8a2b900110b6c54167f35dd07ba656ffcf906bfa","filename":"github/tests/ReplayData/Release.testDelete.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7091a55b35bdc075a7367a30759c73cb611c3adc","filename":"github/tests/ReplayData/Release.testGetAsset.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3652b3c26278480c1cf4bb178d2d43d660ec8651","filename":"github/tests/ReplayData/Release.testGetAssets.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f410765876a050eac81285ad124da33116b6eda4","filename":"github/tests/ReplayData/Release.testGetLatestRelease.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"699b446a201dfcb13cf08921f2ab523078163b01","filename":"github/tests/ReplayData/Release.testGetRelease.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8c675e6be527d2feb53be45442f37708db88f1b","filename":"github/tests/ReplayData/Release.testUpdate.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"027ee7a60cb94b6a9577e2a22956a2d49ddb299c","filename":"github/tests/ReplayData/Release.testUploadAsset.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4e5df1305b1edcaef1acae9eeaae25059bd853f5","filename":"github/tests/ReplayData/ReleaseAsset.testAttributes.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"214e784797bad896cee5525685a5971e4e93670e","filename":"github/tests/ReplayData/ReleaseAsset.testDelete.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af26b8527a8e5c05e4d344e554d6f401295fe0c0","filename":"github/tests/ReplayData/ReleaseAsset.testUpdate.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"972491525f07e3491ed9ffe5e70b1d056ca96456","filename":"github/tests/ReplayData/Repository.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b85dd717383b483193033f0a63e1cbd159963999","filename":"github/tests/ReplayData/Repository.testAssignees.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eee412afb1dedacee8731d90ce165a48bddf8354","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionContexts.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5df6fcceeb55b96df94297d393e88c5c9dd064fd","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionEnforcementLevel.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"aedfb7ee70e434d2b5d51a5af34462828796fd6f","filename":"github/tests/ReplayData/Repository.testCollaborators.txt","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ea3d1d065f52799bfbd192dafbbb8260e4a58014","filename":"github/tests/ReplayData/Repository.testCompare.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16de2820b2b56e6d66385999e1ddc5628fe1d145","filename":"github/tests/ReplayData/Repository.testCreateGitCommit.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d529a7b991c0e0e3f07e812d985cf20cd2aa555","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithAllArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c2c4dde2963477f156daa0bd5d2ae1758fb4ac7f","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithParents.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"821c71e07abf01b2b1048440224b3b9a74dfc382","filename":"github/tests/ReplayData/Repository.testCreateGitTreeWithBaseTree.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5cc9592941953269e102c58bff2da5d6f0d3f4c4","filename":"github/tests/ReplayData/Repository.testCreateIssueWithAllArguments.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"33358f352ae30834b652dbd2876414907b94db52","filename":"github/tests/ReplayData/Repository.testCreateIssueWithAllArgumentsStringLabel.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"de7d6bae17d1716f4bbbe7778a7a9548e26d3ecd","filename":"github/tests/ReplayData/Repository.testCreatePullFromIssue.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"321475bd63088516ce13792f8c1f90fbd5cc14d8","filename":"github/tests/ReplayData/Repository.testDelete.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"604dac1c57c59c94b373653d61ee058f74349934","filename":"github/tests/ReplayData/Repository.testDeleteFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024?page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21:11 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/"d69101e8e58c1060df55e957a45612e73ef82f7d0c4f2e01ef15e12304bb4189"'), ('Last-Modified', 'Thu, 01 Feb 2018 00:16:11 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F71C:456F1:33C58F5:2E2F958:69626057')] +{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYmZlOGQwZjYyM2NhMjlkOTg0ZWMwOWQyYjU2NmU5YWIxMGFlMDI0","commit":{"author":{"name":"R1kk3r","email":"R1kk3r@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"message":"Remove the default \"null\" input send during GET request (#691)\n\n* Remove the default \"null\" input send during GET request\r\n\r\n* Remove the 'null' value from all tests","tree":{"sha":"3be58227503a8829339306ffa910c5c45e3f4676","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3be58227503a8829339306ffa910c5c45e3f4676"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…","comments_url":"…","author":{"login":"R1kk3r","id":8941245,"node_id":"MDQ6VXNlcjg5NDEyNDU=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/R1kk3r","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…"}],"stats":{"total":1862,"additions":931,"deletions":931},"files":[{"sha":"192f40829ac63766fee2314cd17187b5a50efeaf","filename":"github/tests/ReplayData/Repository.testGetArchiveLink.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8c72d6a1f5868a267fc1fba8a9e74d066d3c8aa5","filename":"github/tests/ReplayData/Repository.testGetBranch.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"61081debc45b1da1b800205ac5975fe9e0fce374","filename":"github/tests/ReplayData/Repository.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e4cbdbf65991fcf87618e4a5a8b78070209c18fd","filename":"github/tests/ReplayData/Repository.testGetCommits.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"021e48e2fc989c8854dc93dbda11417eebf21e1b","filename":"github/tests/ReplayData/Repository.testGetCommitsWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"60310e7107137d52be94a248fba7c32fb041b457","filename":"github/tests/ReplayData/Repository.testGetCommitsWithAuthor.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"58bf8b5a4fd34179d311af9b8d64337ffe63323b","filename":"github/tests/ReplayData/Repository.testGetCommitsWithSinceUntil.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d962deb95ecdfea2d14c46c11b4011d3bfee2979","filename":"github/tests/ReplayData/Repository.testGetContentDir.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"61afbc549451482c3f782abc75f6ca3c4f4d70ff","filename":"github/tests/ReplayData/Repository.testGetContents.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f5d5115b99b7ef8607973b6c0ac7aa898b539c4d","filename":"github/tests/ReplayData/Repository.testGetContentsWithRef.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f32e2d40d3e5322bd79ff429277ba0658c5cc712","filename":"github/tests/ReplayData/Repository.testGetContributors.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"39a8a5b9d639531e6c7279590ac7f7ae37ccf198","filename":"github/tests/ReplayData/Repository.testGetDownloads.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3cd6c4b888d630dc9cfe24ee69c97288c99d61a5","filename":"github/tests/ReplayData/Repository.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a674ffdecb2f408a07f28c32520614694fe5dce5","filename":"github/tests/ReplayData/Repository.testGetForks.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d99af0ff1fd27449fe2ff045f79cd8eca51ff3d0","filename":"github/tests/ReplayData/Repository.testGetGitRef.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d99af0ff1fd27449fe2ff045f79cd8eca51ff3d0","filename":"github/tests/ReplayData/Repository.testGetGitRefWithIssue102Reverted.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ed8e9b6b834de58b30fe42aa2a3636983e14ae54","filename":"github/tests/ReplayData/Repository.testGetGitRefs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e0378202f00bee143cc61dfea76f8ce17e93dd5b","filename":"github/tests/ReplayData/Repository.testGetGitTreeWithRecursive.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3ee37ebea384b2838e5dee3020c5231a260e7ff9","filename":"github/tests/ReplayData/Repository.testGetHooks.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"93e10fac45d449060416c517aba2ddac70aea67b","filename":"github/tests/ReplayData/Repository.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9808ca104aad9b0ce6a1758a1e8fb4092bb4ead9","filename":"github/tests/ReplayData/Repository.testGetIssuesComments.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cd4f8d4742dda83c0a90e51173ba322f510429a2","filename":"github/tests/ReplayData/Repository.testGetIssuesEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"87f5a4874b488564d0f91297ee7da78c20250b82","filename":"github/tests/ReplayData/Repository.testGetIssuesWithArguments.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f1ece6cf69e0505895524be110ddd78466add205","filename":"github/tests/ReplayData/Repository.testGetIssuesWithWildcards.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7ad28c72b116c91bff1c20b5c1d08d48a396f1c5","filename":"github/tests/ReplayData/Repository.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"203d3f83b031516411480a1d6273495dfe27b7ef","filename":"github/tests/ReplayData/Repository.testGetLabel.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b5a7d836112451221ab6bcb71ccc85e9e0222199","filename":"github/tests/ReplayData/Repository.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bce7fe97461e86f7ca73eea015eb89e2a35db7a7","filename":"github/tests/ReplayData/Repository.testGetLanguages.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"347dfbd76ea4471e15b3d47de22d7195aa29c6eb","filename":"github/tests/ReplayData/Repository.testGetMilestones.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f1dc001c4cd5ac0397c62b3ccd7d2032e137056c","filename":"github/tests/ReplayData/Repository.testGetMilestonesWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"88c05bc9cd387a39f7f2df0deb371577372ef4ee","filename":"github/tests/ReplayData/Repository.testGetNetworkEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"dbef9adfbec49c2535e48a183757a3021b7e5b0b","filename":"github/tests/ReplayData/Repository.testGetPulls.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c30d78a2fe590e6844140dd6a5300c8cea539478","filename":"github/tests/ReplayData/Repository.testGetPullsComments.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"002ba9ba6c0892ff4f3bd5d1bd39cb44b48e3b75","filename":"github/tests/ReplayData/Repository.testGetPullsWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"522bd059b175f8a8052e36b330c0978630e55ed4","filename":"github/tests/ReplayData/Repository.testGetStargazers.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4b05643d7e5850eaec524415646c23b26dccbeac","filename":"github/tests/ReplayData/Repository.testGetStargazersWithDates.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a7c605f39239a87c4eb7df0f60ad52bfe1a8ea61","filename":"github/tests/ReplayData/Repository.testGetSubscribers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"169302b59004679b8b805f4f7dbb8b4398d59ded","filename":"github/tests/ReplayData/Repository.testGetTeams.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c84fc45599bdfe6907e3384a5b20e878a4fc8464","filename":"github/tests/ReplayData/Repository.testGetWatchers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1f662578248c13a1f438c544924875ea43d5d2ad","filename":"github/tests/ReplayData/Repository.testLegacySearchIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"2daad7e48ea77e12ea1f20c9375ea384c904ead6","filename":"github/tests/ReplayData/Repository.testProtectBranch.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"512ac0b9e9c8a27a341a28c0a323fa26c90b1d47","filename":"github/tests/ReplayData/Repository.testRemoveBranchProtection.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d10d19052ee973d408b1087bd578cdd30373fe3b","filename":"github/tests/ReplayData/Repository.testSearchIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"16443f4437fbc723a686dd621cf93206f3e41d8b","filename":"github/tests/ReplayData/Repository.testStatisticsAfterCaching.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9eb0339a81f6fd814caeb8a2109c82e292cb712c","filename":"github/tests/ReplayData/Repository.testStatisticsBeforeCaching.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6c802c1dabd50f95a8978374ef7290e0a5c44298","filename":"github/tests/ReplayData/Repository.testUpdateFile.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1f0ed43e9ea5b6b80e1b4baf28683ef0a3ce8bea","filename":"github/tests/ReplayData/RepositoryKey.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc1d79f458f41b8f3a5ea69d96eca83536acd043","filename":"github/tests/ReplayData/RepositoryKey.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fdcaf61f7527a7d73a677565860ada027807ad0b","filename":"github/tests/ReplayData/Search.testGetPageOnSearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"91fc882e09910036d0270fcef3cc9c71d73b40b9","filename":"github/tests/ReplayData/Search.testPaginateSearchUsers.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e8cf2876687683e8bf1722ec08589640a441139c","filename":"github/tests/ReplayData/Search.testSearchCode.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"61b53195794a09a13cdfc2df415fc6c4a5082495","filename":"github/tests/ReplayData/Search.testSearchIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ec81881219553486639573687032bb3e21a3fcd8","filename":"github/tests/ReplayData/Search.testSearchRepos.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9d9b7540b34283d9b82694fe8c32d5e44baed4a2","filename":"github/tests/ReplayData/Search.testSearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae28e1da0be36409eea816dc2e41c95df5bc95fb","filename":"github/tests/ReplayData/Search.testUrlquotingOfQualifiers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d4ad3900786253c7289b08b755b0a777f2b4824d","filename":"github/tests/ReplayData/Search.testUrlquotingOfQuery.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4028ca293790edfb8813936cf6b380dae48cff49","filename":"github/tests/ReplayData/SpecificExceptions.testBadCredentials.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d60400a963591d661438ddca823dfac829c11b12","filename":"github/tests/ReplayData/SpecificExceptions.testBadUserAgent.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6e91d784a80c862e95d7f225449321c0b0fa5a25","filename":"github/tests/ReplayData/SpecificExceptions.testRateLimitExceeded.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fbb8a31e31501b14d2d34b0313faa1e5db5e8501","filename":"github/tests/ReplayData/SpecificExceptions.testUnknownObject.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"07e9b678fcf3a156709f88ab788e8e683cb1a22f","filename":"github/tests/ReplayData/Status.testGetLastMessage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"076c3dbd1e4d66a5deea9244ac9d84ccc3db1b31","filename":"github/tests/ReplayData/Status.testGetMessages.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"faa3da5a3dd3601a8e99cc997aa0aa4598ba8008","filename":"github/tests/ReplayData/Status.testGetStatus.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"def9a1f84c05a1c5301d40f16a133387e7886356","filename":"github/tests/ReplayData/Tag.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a6c80164cf5f1e21759cb4c6f8a00b61c30d9e15","filename":"github/tests/ReplayData/Team.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c95d5c1c6730a46fa05a0c6320014637252926e3","filename":"github/tests/ReplayData/Team.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6c0fe50e5634c5f0a4f3b8f757210bea1b40a133","filename":"github/tests/ReplayData/Team.testMembers.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4c11b29ba65eb25e26c62203fc18b82fd5ae0283","filename":"github/tests/ReplayData/Team.testRepoPermission.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a223d0215b2e4f0092b83b757cace5392ea4764b","filename":"github/tests/ReplayData/Team.testRepos.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c4ef7ba042505264b1b7953d41e0395026f4a2de","filename":"github/tests/ReplayData/UserKey.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bea02385c0e9301a825da723d42e71478191bdf7","filename":"github/tests/ReplayData/UserKey.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21:12 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '21'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F6F0:2D20B4:3273DBC:2CBC5EB:69626058')] +{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"…","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"…","keys_url":"…","collaborators_url":"…","teams_url":"…","hooks_url":"…","issue_events_url":"…","events_url":"…","assignees_url":"…","branches_url":"…","tags_url":"…","blobs_url":"…","git_tags_url":"…","git_refs_url":"…","trees_url":"…","statuses_url":"…","languages_url":"…","stargazers_url":"…","contributors_url":"…","subscribers_url":"…","subscription_url":"…","commits_url":"…","git_commits_url":"…","comments_url":"…","issue_comment_url":"…","contents_url":"…","compare_url":"…","merges_url":"…","archive_url":"…","downloads_url":"…","issues_url":"…","pulls_url":"…","milestones_url":"…","notifications_url":"…","labels_url":"…","releases_url":"…","deployments_url":"…","created_at":"2012-02-25T12:53:47Z","updated_at":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28:45Z","git_url":"…","ssh_url":"…","clone_url":"…","svn_url":"…","homepage":"https://pygithub.readthedocs.io/","size":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/6cfe46b712e2bf65560bd8189c4654cd6c56eeca...cef98416f45a9cdaf84d7f53cea13ac074a2c05d?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21: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/"f36066e7a06aada3d2ff90d1b6ba467b2c5b3ce39bebced0bd50e16e2e3a31bc"'), ('Last-Modified', 'Wed, 07 Feb 2018 06:44:57 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '22'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E6B3:3CA6C7:33D55B1:2E62412:69626059')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/6cfe46b712e2bf65560bd8189c4654cd6c56eeca...cef98416f45a9cdaf84d7f53cea13ac074a2c05d","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"6cfe46b712e2bf65560bd8189c4654cd6c56eeca","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo2Y2ZlNDZiNzEyZTJiZjY1NTYwYmQ4MTg5YzQ2NTRjZDZjNTZlZWNh","commit":{"author":{"name":"Iraquitan Cordeiro Filho","email":"iraquitanfilho@gmail.com","date":"2018-01-16T21:52:52Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T21:52:52Z"},"message":"Add permissions field to NamedUser (#676)","tree":{"sha":"fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","html_url":"…","comments_url":"…","author":{"login":"iraquitan","id":3467229,"node_id":"MDQ6VXNlcjM0NjcyMjk=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/iraquitan","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6bc804dc15789a63e01f19b6f18386a03132b651","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6bc804dc15789a63e01f19b6f18386a03132b651","html_url":"…"}]},"merge_base_commit":{"sha":"6cfe46b712e2bf65560bd8189c4654cd6c56eeca","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo2Y2ZlNDZiNzEyZTJiZjY1NTYwYmQ4MTg5YzQ2NTRjZDZjNTZlZWNh","commit":{"author":{"name":"Iraquitan Cordeiro Filho","email":"iraquitanfilho@gmail.com","date":"2018-01-16T21:52:52Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T21:52:52Z"},"message":"Add permissions field to NamedUser (#676)","tree":{"sha":"fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/fe321bdf6a4bbea0e38fd5f922cd9ec667aaba5c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","html_url":"…","comments_url":"…","author":{"login":"iraquitan","id":3467229,"node_id":"MDQ6VXNlcjM0NjcyMjk=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/iraquitan","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6bc804dc15789a63e01f19b6f18386a03132b651","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6bc804dc15789a63e01f19b6f18386a03132b651","html_url":"…"}]},"status":"ahead","ahead_by":7,"behind_by":0,"total_commits":7,"commits":[{"sha":"45d18436fd29924ba89d803a982ca2f0ff8231e8","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0NWQxODQzNmZkMjk5MjRiYTg5ZDgwM2E5ODJjYTJmMGZmODIzMWU4","commit":{"author":{"name":"Andrew Smith","email":"espadav8@gmail.com","date":"2018-01-16T21:57:24Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T21:57:24Z"},"message":"Add method to get latest release of a repository (#609)","tree":{"sha":"3a90d8d494c2e508f741468494cec79c43983cbb","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3a90d8d494c2e508f741468494cec79c43983cbb"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/45d18436fd29924ba89d803a982ca2f0ff8231e8","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/45d18436fd29924ba89d803a982ca2f0ff8231e8","html_url":"…","comments_url":"…","author":{"login":"EspadaV8","id":115825,"node_id":"MDQ6VXNlcjExNTgyNQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EspadaV8","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6cfe46b712e2bf65560bd8189c4654cd6c56eeca","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6cfe46b712e2bf65560bd8189c4654cd6c56eeca","html_url":"…"}]},{"sha":"3baa682cf83121d026514947200720186b288035","node_id":"MDY6Q29tbWl0MzU0NDQ5MDozYmFhNjgyY2Y4MzEyMWQwMjY1MTQ5NDcyMDA3MjAxODZiMjg4MDM1","commit":{"author":{"name":"Ilya Konstantinov","email":"ilya.konstantinov@gmail.com","date":"2018-01-16T22:17:47Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-16T22:17:47Z"},"message":"Add committer/author to Repository.delete_file (#678)","tree":{"sha":"c56629d19bbdb917833dd593bea7f7d564e2ce27","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/c56629d19bbdb917833dd593bea7f7d564e2ce27"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3baa682cf83121d026514947200720186b288035","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3baa682cf83121d026514947200720186b288035","html_url":"…","comments_url":"…","author":{"login":"ikonst","id":1186084,"node_id":"MDQ6VXNlcjExODYwODQ=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/ikonst","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"45d18436fd29924ba89d803a982ca2f0ff8231e8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/45d18436fd29924ba89d803a982ca2f0ff8231e8","html_url":"…"}]},{"sha":"2f9b1e018a6ab27e5df6373ebab0d01e147291a7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDoyZjliMWUwMThhNmFiMjdlNWRmNjM3M2ViYWIwZDAxZTE0NzI5MWE3","commit":{"author":{"name":"edquist","email":"edquist@users.noreply.github.com","date":"2018-01-26T19:59:30Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-26T19:59:30Z"},"message":"make created_at/published_at attrs available for Release objects (#689)","tree":{"sha":"89cd5c3864b60d7b8ddf2c747e65b32dd6dca4c9","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/89cd5c3864b60d7b8ddf2c747e65b32dd6dca4c9"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/2f9b1e018a6ab27e5df6373ebab0d01e147291a7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2f9b1e018a6ab27e5df6373ebab0d01e147291a7","html_url":"…","comments_url":"…","author":{"login":"edquist","id":5522437,"node_id":"MDQ6VXNlcjU1MjI0Mzc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/edquist","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3baa682cf83121d026514947200720186b288035","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3baa682cf83121d026514947200720186b288035","html_url":"…"}]},{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo1YzljMmY3NTIzOWFlMDdlZjU5MGJhYTJjMmVhMjgwNDZiOGM5YWNj","commit":{"author":{"name":"Gilad Shefer","email":"gshefer@redhat.com","date":"2018-01-27T03:06:09Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-01-27T03:06:09Z"},"message":"Updated PullRequest reviewer request according to API changes (#690)\n\nhttps://developer.github.com/changes/2018-01-24-end-thor-preview/","tree":{"sha":"77fd159691755370fed9ab056ee070f70b75b241","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/77fd159691755370fed9ab056ee070f70b75b241"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…","comments_url":"…","author":{"login":"gshefer","id":21076742,"node_id":"MDQ6VXNlcjIxMDc2NzQy","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/gshefer","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"2f9b1e018a6ab27e5df6373ebab0d01e147291a7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2f9b1e018a6ab27e5df6373ebab0d01e147291a7","html_url":"…"}]},{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYmZlOGQwZjYyM2NhMjlkOTg0ZWMwOWQyYjU2NmU5YWIxMGFlMDI0","commit":{"author":{"name":"R1kk3r","email":"R1kk3r@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"message":"Remove the default \"null\" input send during GET request (#691)\n\n* Remove the default \"null\" input send during GET request\r\n\r\n* Remove the 'null' value from all tests","tree":{"sha":"3be58227503a8829339306ffa910c5c45e3f4676","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3be58227503a8829339306ffa910c5c45e3f4676"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…","comments_url":"…","author":{"login":"R1kk3r","id":8941245,"node_id":"MDQ6VXNlcjg5NDEyNDU=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/R1kk3r","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…"}]},{"sha":"e671fdd0356b9580870082ffca112e2236f396f1","node_id":"MDY6Q29tbWl0MzU0NDQ5MDplNjcxZmRkMDM1NmI5NTgwODcwMDgyZmZjYTExMmUyMjM2ZjM5NmYx","commit":{"author":{"name":"Michael Behrisch","email":"oss@behrisch.de","date":"2018-02-06T22:21:51Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-06T22:21:51Z"},"message":"Fix date format for milestone creation (#593)","tree":{"sha":"24f3271df47a466a10644af443a36016faef87d8","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/24f3271df47a466a10644af443a36016faef87d8"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e671fdd0356b9580870082ffca112e2236f396f1","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e671fdd0356b9580870082ffca112e2236f396f1","html_url":"…","comments_url":"…","author":{"login":"behrisch","id":454288,"node_id":"MDQ6VXNlcjQ1NDI4OA==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/behrisch","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…"}]},{"sha":"cef98416f45a9cdaf84d7f53cea13ac074a2c05d","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjZWY5ODQxNmY0NWE5Y2RhZjg0ZDdmNTNjZWExM2FjMDc0YTJjMDVk","commit":{"author":{"name":"Brian Torres-Gil","email":"btorres-gil@paloaltonetworks.com","date":"2018-02-07T06:44:57Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-07T06:44:57Z"},"message":"Use datetime object in create_milestone (#698)\n\nMethod create_milestone now uses datetime object to fit better with v3 API using ISO8601.\r\n\r\nDate object still allowed for backward compatibility.","tree":{"sha":"47f87c87b5b549c21cd55d7a59deed01ee0b8b8e","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/47f87c87b5b549c21cd55d7a59deed01ee0b8b8e"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cef98416f45a9cdaf84d7f53cea13ac074a2c05d","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cef98416f45a9cdaf84d7f53cea13ac074a2c05d","html_url":"…","comments_url":"…","author":{"login":"btorresgil","id":4164289,"node_id":"MDQ6VXNlcjQxNjQyODk=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/btorresgil","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"e671fdd0356b9580870082ffca112e2236f396f1","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e671fdd0356b9580870082ffca112e2236f396f1","html_url":"…"}]}],"files":[{"sha":"8af90a85abe045410f36466d386eb39aaa6e31c8","filename":"github/GitRelease.py","status":"modified","additions":22,"deletions":0,"changes":22,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"04d5712cc080ad7d77b989f2f7b29142ad219ddf","filename":"github/PaginatedList.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3a63d660d8436ab87245e487bfcfc65fc06f0225","filename":"github/PullRequest.py","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"36f50e5858c18bc699a26879dcd16b39f1b333d9","filename":"github/Repository.py","status":"modified","additions":36,"deletions":6,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae512681fb2a9a4beb02936d63f74f2de7c71cac","filename":"github/Requester.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"100eab70bfc6a3f61216d4ca1941af3e1b5824b8","filename":"github/tests/GitRelease.py","status":"modified","additions":8,"deletions":0,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e8e838a31ecebf58cb13f3907473e22253816bb","filename":"github/tests/Logging_.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fa9b95b08adc77b7d176d58b194fb4980c4f7553","filename":"github/tests/ReplayData/AuthenticatedUser.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fd2474416b0d7301a3f80734ce4fb0c8aef4c976","filename":"github/tests/ReplayData/AuthenticatedUser.testCreateFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6b3a9cb3ff333fad031a1a969565010e9e08f052","filename":"github/tests/ReplayData/AuthenticatedUser.testEmails.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"2c13f315f366c935bd4457c58fe936b83935f542","filename":"github/tests/ReplayData/AuthenticatedUser.testFollowing.txt","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e4a315bddeb9451cc41fff3df7885a3d499a8fdf","filename":"github/tests/ReplayData/AuthenticatedUser.testGetAuthorizations.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d6d547c87cc5a7a830609582f2d017299855181","filename":"github/tests/ReplayData/AuthenticatedUser.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee4acbe742f39b0ee7db9de1a5c87e7a8a5dcfe6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fc243ab943bc7c934a1c14d8173be2a0b8fbee62","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a99983599fed3989a2fff567210279ade49d0bba","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16cf1d959a76d759ba92cb46633093fc41279cf7","filename":"github/tests/ReplayData/AuthenticatedUser.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"86d87360fd9c1191891c01282013922fda30e217","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotification.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1a70b15c5729b9d51ba2c81d2c17d5380636d014","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotifications.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b5a32e8e5dc243fbfab923a9cfcacc2fa95cef3","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotificationsWithOtherArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13ffcbb0250c576a7093938be7dc34adaa1f7739","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrganizationEvents.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13cb72bb1596a394d397faa9c56c1f15c95433dc","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrgs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ad8d42fab5c11e03ce3a81bd35c1161af8ee738b","filename":"github/tests/ReplayData/AuthenticatedUser.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3e6afea17e85cf239cf53bda145accc70ab5697","filename":"github/tests/ReplayData/AuthenticatedUser.testGetReposWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d0d887e56cc88241f73bc255a679953665cc6ba6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetStarredGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"92785959fd58cfab7e727204be5780bd071d7c32","filename":"github/tests/ReplayData/AuthenticatedUser.testGetTeams.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f13fa35577b87cee1c425e534d975c43de820c57","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"63e871c0020e4f9f4e67db3a687b165de7479021","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b10e61d4d53e03081f9f0575e21e566dff84e4fd","filename":"github/tests/ReplayData/AuthenticatedUser.testStarring.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1256b91f1361e066bb4acd855f5358d75787fcf6","filename":"github/tests/ReplayData/AuthenticatedUser.testSubscriptions.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0fee5b52c97c5d5a5c06c4a98b141fa94fc8474b","filename":"github/tests/ReplayData/AuthenticatedUser.testWatching.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d5e56c14052d1de71ad2d5ae810235ebb17c95a8","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithLogin.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"425bcd1f6c84a04cb55be0b55707ee9d3822ec12","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithToken.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4357e4453f4b18d15df489402c3e70add0118f92","filename":"github/tests/ReplayData/Authentication.testBasicAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"efcf3628a18438e4c535267933897019d06cf1ba","filename":"github/tests/ReplayData/Authentication.testNoAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f6a50faf696352ae2bb6fd18cdf36b92f51a2c88","filename":"github/tests/ReplayData/Authentication.testOAuthAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"666056f4e79baf48cc4b7988d6201d71eb05cf37","filename":"github/tests/ReplayData/Authentication.testSecretKeyAuthentication.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6d0f9f01af5acb4691d8e94a8acaab1991563af2","filename":"github/tests/ReplayData/Authentication.testUserAgent.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c225d7a56691b7695591bce48a1ebcfee873d44b","filename":"github/tests/ReplayData/Authorization.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ed8b51778789c5a682807596f6cfb5033d555873","filename":"github/tests/ReplayData/Authorization.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a249e52f2db24f87ea99205998a0bc8b9593ac36","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeInClassAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeTransformation.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1191038c709ba815d2e8976cccebc7c2c2011963","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d62b76ff4af8b051d9d3df0beb8141c6c8552e91","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8542c2261908e8c2c0767920e720889399cba058","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInDict.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a3e26db30db2660f789ca24c94d8ca8a820de73f","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d0ae92940279199cbc3b609581eb938a8e1df72","filename":"github/tests/ReplayData/BadAttributes.testIssue195.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"42a4fbca1a248c6ade2597f1c8d073f7c45cd627","filename":"github/tests/ReplayData/Branch.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"62bfa681493885eb631b96071b8d35d18d277505","filename":"github/tests/ReplayData/Branch.testCommitCommentsOnLine.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"68a5e361c9b0cc4034205994061cc2396807ac53","filename":"github/tests/ReplayData/Branch.testProtectedAttributes.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae41cf9930a54f844def85b87471c17d7a3d43bc","filename":"github/tests/ReplayData/Commit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3d79b663004bda0b8052a5027bcf5c28efbbc4ae","filename":"github/tests/ReplayData/Commit.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c584befdaa345bc8233ed9c25bba44c27cbd8b7c","filename":"github/tests/ReplayData/CommitCombinedStatus.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"024f236d53337d76ca3742759ba2429e8bbe4b30","filename":"github/tests/ReplayData/CommitComment.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1430b71497af7f4786dd3b4bd8001106ec5a05cd","filename":"github/tests/ReplayData/CommitComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6dec5a3f4aec14b24f0769004cb4c504ba1e7a1e","filename":"github/tests/ReplayData/CommitComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7eb92c6fd038dd7c516325c77013879b1644f312","filename":"github/tests/ReplayData/CommitStatus.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d4beca4c2188ac1ac7554f22c85b83f0c063e3e0","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1238d33da59a2cc67577bfe6e6f54c3aa9fed775","filename":"github/tests/ReplayData/ContentFile.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bbc4408719fcd76936c1b8255547b8fb6d278f15","filename":"github/tests/ReplayData/Download.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"85afa3aadd5fcf86cbbcc2f8936124cf2fcf223a","filename":"github/tests/ReplayData/Download.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a1657a95314f2b200e76c5c9c353c8be62c47601","filename":"github/tests/ReplayData/Enterprise.testHttp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f69e5f4aced99c4627fcc974ab9499067c5a7c13","filename":"github/tests/ReplayData/Enterprise.testHttps.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a1d3f565a77117c3a0cd7b24f2759f3f3d496fe","filename":"github/tests/ReplayData/Enterprise.testLongUrl.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0a7f4ff7a8847f6e0f4dded421c8d27c46591944","filename":"github/tests/ReplayData/Enterprise.testSpecificPort.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"96d2b87605ee696367134155739abd51f5623bc3","filename":"github/tests/ReplayData/Equality.testBranchEquality.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3ea41a026a658d7de31219660406e01f8bc79b8","filename":"github/tests/ReplayData/Equality.testUserDifference.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c061908b2b2fad79dce7b485ec88fe19a46026e2","filename":"github/tests/ReplayData/Equality.testUserEquality.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1ea7b2b6594276be9d6164a75d76832157f7ff63","filename":"github/tests/ReplayData/Event.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4028ca293790edfb8813936cf6b380dae48cff49","filename":"github/tests/ReplayData/Exceptions.testBadAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"34340f8419f5a97c5655ac2fa195dcacf883cd63","filename":"github/tests/ReplayData/Exceptions.testNonJsonDataReturnedByGithub.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fbb8a31e31501b14d2d34b0313faa1e5db5e8501","filename":"github/tests/ReplayData/Exceptions.testUnknownObject.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"98935a9eaef0b2c3a78d831924721d4d4d379845","filename":"github/tests/ReplayData/Exceptions.testUnknownUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4c4752c5b504fcad94d22a5f025e8eddfbf077a3","filename":"github/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt","status":"modified","additions":60,"deletions":60,"changes":120,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"27eb6a8220d5dadaa0aaf4d7b54cb62ebd6f9ccc","filename":"github/tests/ReplayData/Gist.testAttributes.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e5a449ae4c12998fc58c84d3424f5b5dcf8ad1c6","filename":"github/tests/ReplayData/Gist.testCreateComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b22500c1065445e717a3f6d3282439c66368fcc7","filename":"github/tests/ReplayData/Gist.testDelete.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7a6d84eb6c4701a51c026c8b8a90ecddd5893387","filename":"github/tests/ReplayData/Gist.testDeleteFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"869c07e936b7bd21ce10b14d4be8e1c31c09e738","filename":"github/tests/ReplayData/Gist.testEditWithAllParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9690563ae43062788c234c0adf0db3bb7a083c4a","filename":"github/tests/ReplayData/Gist.testEditWithoutParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a324d9138adcdaeecef2fe3324e95f095d44841","filename":"github/tests/ReplayData/Gist.testFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9fc68bd047481bbcc5c0907d6526a568455113b5","filename":"github/tests/ReplayData/Gist.testGetComments.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"834877a2b45f15de5ec7bbb98c9c623892ab4688","filename":"github/tests/ReplayData/Gist.testRenameFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5fe65eb4fc93d71d45a6b970b8e41d36777a900e","filename":"github/tests/ReplayData/Gist.testStarring.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fb7ff856f1a0fd1511b0255aca190dc669b5f9ce","filename":"github/tests/ReplayData/GistComment.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a68067b6f9fe4392f69decf950a76838a3b428ef","filename":"github/tests/ReplayData/GistComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b775ed5c0d19bba779eee97c8d82c53076c01562","filename":"github/tests/ReplayData/GitBlob.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"16b4d77f2c46bc1728a7b52369fd4a401b191c57","filename":"github/tests/ReplayData/GitCommit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd2136e6e69460b038f21f60704a2afc17b30977","filename":"github/tests/ReplayData/GitRef.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ead5b2c4a86741c74c638295cad1c31d01001b3e","filename":"github/tests/ReplayData/GitRef.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"add7f585747d7a8907d9bc5ed16db43698857315","filename":"github/tests/ReplayData/GitTag.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"429055c9e57244df8536e2eef5d80b14a7cdd4a9","filename":"github/tests/ReplayData/GitTree.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b5363131e82b84dbdbb016b0c177a034bdef8bad","filename":"github/tests/ReplayData/Github.testGetEmojis.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"df020c4c3a7d8b316782cbd950aa3cd89ffd3297","filename":"github/tests/ReplayData/Github.testGetGists.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d643f1e766ad0c0388835b231d73bad1dd797c4e","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8eee46f50acd0a36c576097283aa0c6bb9b5985","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplates.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"78b92a1fc5d37b06d7791c9b0e474ec86c59d3be","filename":"github/tests/ReplayData/Github.testGetHook.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8e1ab91c92b47b1e9c4e82d949580cb14f9c7c08","filename":"github/tests/ReplayData/Github.testGetHooks.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/Github.testGetRepoFromFullName.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c3407e6dbef8628074b18d33812c2ba465baf008","filename":"github/tests/ReplayData/Github.testGetRepoFromId.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14910c7de15dafbd1b70a60ca9c4683319d384ae","filename":"github/tests/ReplayData/Github.testGetRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0564e373fbf7d66e9a34004a4e9613c774d37051","filename":"github/tests/ReplayData/Github.testGetReposSince.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c655af2d39334f7bf893665039ffd50050e73cd6","filename":"github/tests/ReplayData/Github.testGetUsers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"255eb5c1750dfd45e01a6610d4d032135f7987ae","filename":"github/tests/ReplayData/Github.testGetUsersSince.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21b10ea4d3611c638ed96ee53f41de0a6f213c93","filename":"github/tests/ReplayData/Github.testLegacySearchRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"59482af7a3645041d66abc42a17b5dd3799c059a","filename":"github/tests/ReplayData/Github.testLegacySearchReposExplicitPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a4c713c1c8e4bda07d201842aa12b055a58a5908","filename":"github/tests/ReplayData/Github.testLegacySearchReposPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ca04b62f7e62a3069e3e5a0d3d26592417488bd0","filename":"github/tests/ReplayData/Github.testLegacySearchReposWithLanguage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf8ed68cb0934c52324d3e15750f0063c272832f","filename":"github/tests/ReplayData/Github.testLegacySearchUserByEmail.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testLegacySearchUsers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d52e4eca22c5920cec28c6ecb15dbe63acd0756b","filename":"github/tests/ReplayData/Github.testLegacySearchUsersExplicitPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c0768215e75ca8c639c73c3d49cd25d50d5b2856","filename":"github/tests/ReplayData/Github.testLegacySearchUsersPagination.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c052fc6947dd0fb51cf81fc3708ddd5003795544","filename":"github/tests/ReplayData/Github.testSearchRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"61e97e984153fb0a576fcad4cf2472049729fc5d","filename":"github/tests/ReplayData/Github.testSearchUserByEmail.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testSearchUsers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8238293a3c7739e9f055920717b199def8394e24","filename":"github/tests/ReplayData/Hook.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35d5b4ebccb1e3ebc2b164613b79a98a71fd6020","filename":"github/tests/ReplayData/Hook.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7dcca212ad1033fc54d6e34a74755a8212c4f20e","filename":"github/tests/ReplayData/Hook.testPing.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b77d2fc33c0bc0ad2a9dccdbe003a537919b3c4d","filename":"github/tests/ReplayData/Hook.testTest.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0098cce6d3d1dff648b5bdffee2ff4ce7ff5dc25","filename":"github/tests/ReplayData/Issue.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"754e1c1fe322e27d1fa0b2ade9fc929b568c59a5","filename":"github/tests/ReplayData/Issue.testAddAndRemoveAssignees.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf5c11f89bf0a1b068ac1cf7e848f2c449707beb","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"836084944d1287e3d85009fea65560f525a89755","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabelsWithStringArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b5c449743e450bd2104ad0e275e647a43e43d432","filename":"github/tests/ReplayData/Issue.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4954645e321ae426d866f5c614f260be58f9acb4","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8eacccf4819d8822fb52208dcee888a09509861a","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabelsWithStringArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e1bcb4f8e3d865e78abec0ac0dd3be1ce41c4227","filename":"github/tests/ReplayData/Issue.testEditWithAllParameters.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"38a17838415137beefbfcf87288763361bc07c2c","filename":"github/tests/ReplayData/Issue.testGetComments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9dd15f2852a90179a67af7c9c7d4d3d02e0da386","filename":"github/tests/ReplayData/Issue.testGetCommentsSince.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5391293d77a937e0ec9a56c1a7bb9c9ccd9e6725","filename":"github/tests/ReplayData/Issue.testGetEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"53874dbaea7c028a9102dff2b06a632113dc148f","filename":"github/tests/ReplayData/Issue.testGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5e27e933bf19ca470dd88c9b3faad017df9f82e1","filename":"github/tests/ReplayData/Issue.testGetReactions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf4003f79f571dd8084bafe48d7c88a57ad8bfb1","filename":"github/tests/ReplayData/Issue131.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01f5744b5abc831d2fda65b8ac08fa45d694d1dd","filename":"github/tests/ReplayData/Issue131.testGetPullWithOrgHeadUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8f656a1fedc33063adada6b6aa75641281102e32","filename":"github/tests/ReplayData/Issue131.testGetPullsWithOrgHeadUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"497d81512841a06376f5c8a0673e32fc42ffbc8b","filename":"github/tests/ReplayData/Issue133.testGetPageWithoutInitialArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ae3414605995f5d9d65e46723daf65f98f5a0dbb","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsFailsWhenAutenticatedThroughOAuth.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bbda83c7e6c47b233a2feb1f27d8e42f09b33604","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsSucceedsWhenAutenticatedThroughLoginPassword.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5a14176434a7a32fca896324f668bf59e15ded83","filename":"github/tests/ReplayData/Issue134.testGetOAuthScopesFromHeader.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"10a97fef33ca80e6214eb59ce52e0a5eab802005","filename":"github/tests/ReplayData/Issue139.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"76c7550db49c70f345c2fa3798aa06f812d3c13e","filename":"github/tests/ReplayData/Issue139.testCompletion.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"6114fef60f8699bfa5a9da8626ed84eb552f7718","filename":"github/tests/ReplayData/Issue140.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0999c57f9596b209bc541a6ae78992140fe94825","filename":"github/tests/ReplayData/Issue140.testGetDirContents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b0add897beba366c24513d26fb16b36d723f3199","filename":"github/tests/ReplayData/Issue140.testGetDirContentsThenLazyCompletionOfFile.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01cab386c0d913caef0bef5c71c34a498aacf95e","filename":"github/tests/ReplayData/Issue140.testGetDirContentsWithRef.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ec701bafbc9fa23fd9bf4dffdf2c1f2879c2c880","filename":"github/tests/ReplayData/Issue140.testGetFileContents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ddbfb9c7449da41916ce43a8dd462efccbc8526a","filename":"github/tests/ReplayData/Issue158.testPaginationWithSecretKeyAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5444722cd83b58cb4e57c0bdb218298e8e39a808","filename":"github/tests/ReplayData/Issue174.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0e3be28273d8f39eae0fbb756fa535e697fee1b4","filename":"github/tests/ReplayData/Issue174.testGetDirContentsWhithHttpRedirect.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14f1cee3cccedc026fdeaec02c9c64e86e5c9405","filename":"github/tests/ReplayData/Issue214.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"187fa73a0c1cf266b20e86bf93bc7aa9aeebb444","filename":"github/tests/ReplayData/Issue214.testAssignees.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"26776936bff15d073dd66c307724ae45a549e3b4","filename":"github/tests/ReplayData/Issue214.testCollaborators.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3821a7c6cbe790128813eaee55dad0ebfc9ecf76","filename":"github/tests/ReplayData/Issue214.testGetIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue216.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a6eca3755c3737f450c7acc6aa7cfcda82eb8e3f","filename":"github/tests/ReplayData/Issue216.testIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue278.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"330e60a7c2125c71e286b105a71c0cb4e949fa06","filename":"github/tests/ReplayData/Issue278.testIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f7dd20d38095b145df37be674632287a52f4427","filename":"github/tests/ReplayData/Issue33.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dcde122984a1cb07bf92825dbfda94df6a68af32","filename":"github/tests/ReplayData/Issue33.testClosedIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b31ba310d16b55f4451b27b603c85b96b99ae399","filename":"github/tests/ReplayData/Issue33.testOpenIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eefc7e94209ba85d1019a4abf556fd489609a31e","filename":"github/tests/ReplayData/Issue494.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d2eaa5268603989fed79a192c1125ef42b164e42","filename":"github/tests/ReplayData/Issue50.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4fc4e4073af1576b80c96c7e2475a0d7063684ab","filename":"github/tests/ReplayData/Issue50.testAddLabelToIssue.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2884f165d475892d328e8ff70a1f445bf84a0cbc","filename":"github/tests/ReplayData/Issue50.testCreateIssueWithLabel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8868c42714a24702b08690587c5d0211fe31f02d","filename":"github/tests/ReplayData/Issue50.testGetIssuesWithLabel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f7a5849221702f4e0dc68c0534edfade1e1be531","filename":"github/tests/ReplayData/Issue50.testGetLabel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d5fa1ddf25a2dee415c9f378287a8d6be1ce2192","filename":"github/tests/ReplayData/Issue50.testGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee8d60b1b25e4beb8940e33d2a7c350d468c42a0","filename":"github/tests/ReplayData/Issue50.testIssueGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01a833337636675e26a5cf9ea8405723351681b9","filename":"github/tests/ReplayData/Issue50.testRemoveLabelFromIssue.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3f4a4173324684a0bcce3ce3dc1d45221d6cebcf","filename":"github/tests/ReplayData/Issue50.testSetIssueLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dab58fe0ae2601fa39d394b0dc5674c3c2b25ac2","filename":"github/tests/ReplayData/Issue54.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9c1cdf47b5c066675831db4d7e6d48598ddb6409","filename":"github/tests/ReplayData/Issue54.testConversion.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ffbace5b712787022cd874f20a7692e59012a462","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterprise.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bd5b1e596d51f86415608aa6ffd646324061f6c9","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterpriseWithPort.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ad967f64de33a4edb657f9596ce191c1d8589ebe","filename":"github/tests/ReplayData/Issue87.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"39a7f5034c73701754b18cba69abaf03ef1c48a3","filename":"github/tests/ReplayData/IssueComment.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0f0457abe7d1fb855264b258e721db2e2c6e061f","filename":"github/tests/ReplayData/IssueComment.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8551d7d4b57f69e21d656c1c01584ee5bde55eb","filename":"github/tests/ReplayData/IssueComment.testGetReactions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dea7355c5bea8dce58eb5991bbeb46c8a6b5f5e5","filename":"github/tests/ReplayData/IssueEvent.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a93448223a43fa61b5f4ac246b317bfb7f234abb","filename":"github/tests/ReplayData/IssueEvent.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"72918401316da1b51c97aa034878f549b07833fb","filename":"github/tests/ReplayData/Label.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9f1f1d8ad666f9dc214774406d7c3c618e05ca8f","filename":"github/tests/ReplayData/Label.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ecf3ee8172f2d6063369cecc495e826a56c230f2","filename":"github/tests/ReplayData/LazyRepository.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d73fa84d313e0c5330ca2e388124f4f83324fcd2","filename":"github/tests/ReplayData/LazyRepository.testGetIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f567fa8271f790cad148301ffbb0488702601fcb","filename":"github/tests/ReplayData/LazyRepository.testGetUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"96d38f2a62ebe509877901c51385a5aa833f5109","filename":"github/tests/ReplayData/LazyRepository.testOwner.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c42a9ae0b6fc63227c73c42fd53e81769a25ec27","filename":"github/tests/ReplayData/Logging.testLoggingWithBaseUrl.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3957553d2ac1381441c949028f83b0c8f252518f","filename":"github/tests/ReplayData/Logging.testLoggingWithBasicAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35e2bca3e6b1460be145fc49f16a0ee05eab5879","filename":"github/tests/ReplayData/Logging.testLoggingWithOAuthAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14b309a8c22e64349df1fbd286a4c18c7146c900","filename":"github/tests/ReplayData/Logging.testLoggingWithoutAuthentication.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"20dc2580756725ffbbfb697b8d120f4798f99c9c","filename":"github/tests/ReplayData/Markdown.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f13ebe417a0ed3031383e173893883054951af05","filename":"github/tests/ReplayData/Milestone.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a9c841d5032ee424be7c6ba53ef8248fd917606d","filename":"github/tests/ReplayData/Milestone.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"397e007dc115b0e5d8916b00d84498d0f5bfdebd","filename":"github/tests/ReplayData/Milestone.testGetLabels.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c584a88217478d92a9968a167a72ee3b4f033083","filename":"github/tests/ReplayData/NamedUser.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14e16ebcef877070b5031800ad6e4fb292616ae7","filename":"github/tests/ReplayData/NamedUser.testAttributesOfOtherUser.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ff78a099dd579a54abb4143dfab9edb823814100","filename":"github/tests/ReplayData/NamedUser.testGetEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"98744d958ad103aac6b87b7917df73ca09559b4d","filename":"github/tests/ReplayData/NamedUser.testGetFollowers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c5664be7ebd249c6a46c27135aaeed66c8e8fee0","filename":"github/tests/ReplayData/NamedUser.testGetFollowing.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a252e0280d443e08e557b5109870ac43da964fa5","filename":"github/tests/ReplayData/NamedUser.testGetGists.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"846233458f9a6ef5c1618aae78bc45ab35ab3ef5","filename":"github/tests/ReplayData/NamedUser.testGetKeys.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"93d9b7685512fc17986e599cf0b439306203f951","filename":"github/tests/ReplayData/NamedUser.testGetOrgs.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2507e4ca2fcc642d161add858d57c9e84696daa8","filename":"github/tests/ReplayData/NamedUser.testGetPublicEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0a17525c621b819f28e649b082bc8619a6cafa2e","filename":"github/tests/ReplayData/NamedUser.testGetPublicReceivedEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e548c61c5cd57e7ceae784aed918636d38f0a609","filename":"github/tests/ReplayData/NamedUser.testGetReceivedEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/NamedUser.testGetRepo.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f5927c5eac564de12f300700d9de5e457615089b","filename":"github/tests/ReplayData/NamedUser.testGetRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d9dc67a3b3ddfbeb12766d4d8744c12d42fb978","filename":"github/tests/ReplayData/NamedUser.testGetReposWithType.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fdc793bed4bdd137c6f593738e724267b7ce56c4","filename":"github/tests/ReplayData/NamedUser.testGetStarred.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"82ee98e6583088149046a9035c140e3f60398634","filename":"github/tests/ReplayData/NamedUser.testGetSubscriptions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89d2c521142d2b6bb8bfd925011ea0e5e8f245e2","filename":"github/tests/ReplayData/NamedUser.testGetWatched.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8686861f3d99e507c284f1e894d290079e252f7","filename":"github/tests/ReplayData/NamedUser.testHasInFollowing.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"301591609c426e37386cd6b73b73a8bda11f83f2","filename":"github/tests/ReplayData/Organization.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f362310f262352a6e06ea9ae5ac3813fbaf2a09","filename":"github/tests/ReplayData/Organization.testCreateFork.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f86012dd7a6393f2abe01f27558cf99dc12d7f70","filename":"github/tests/ReplayData/Organization.testCreateRepoWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b44d8b90222471fbf38063a9a6e19a13ba86abdb","filename":"github/tests/ReplayData/Organization.testCreateTeamWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7cb41076ee3319d8ad82adf9f759e25636766c11","filename":"github/tests/ReplayData/Organization.testGetEvents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"db70ce23dc93573451cea7edfe0fd628951d9507","filename":"github/tests/ReplayData/Organization.testGetIssues.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b80482a2c916de3390184c143729dc7b3dc0aed9","filename":"github/tests/ReplayData/Organization.testGetIssuesWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"03f1f429008f878be91eadf7908d1ed45095eceb","filename":"github/tests/ReplayData/Organization.testGetMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"70e8e97a4d9822e15c5a07641afb4ddada21a92d","filename":"github/tests/ReplayData/Organization.testGetPublicMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fb8353cc3186115b7a8a79b5575f2106d51c1270","filename":"github/tests/ReplayData/Organization.testGetRepos.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"779284c062bcc12fa5929801febd1a74c015dc01","filename":"github/tests/ReplayData/Organization.testGetReposWithType.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"46c4acba3de6fc6009ff8146c2aac42e0e133ce3","filename":"github/tests/ReplayData/Organization.testGetTeams.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"875ff9e70a281559e89ec235fe616fed2d1d15f4","filename":"github/tests/ReplayData/Organization.testMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b67ef7c085bd28b49fae8e88b319b24b9ea30758","filename":"github/tests/ReplayData/Organization.testPublicMembers.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"57b6e1a23796374cab458e262e1b7f0c901687e2","filename":"github/tests/ReplayData/OrganizationHasInMembers.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/PaginatedList.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"05a96f8907cb08062475eb6e0eebab39623595ee","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7b88f2b69601b9c6030fbab659fd0f4401b4e6ac","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithGetPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2d7bb6dfa9d5d1270a66409ea2f64b3b2708862f","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithNoUrlParams2.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testGetFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"693cabd5de565c3ce87856edd0421a76e4856d75","filename":"github/tests/ReplayData/PaginatedList.testGetThirdPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"17a36885ecfd620871475a9147615cbe07ec5c23","filename":"github/tests/ReplayData/PaginatedList.testGettingTheReversedListDoesNotModifyTheOriginalList.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingAfterIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"1f7c3a0c618cfb492bff37df664aab9021ca755b","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInThirdPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIterationInSlice.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIteration.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"40c8fdb6efad0e7be4e5bb198b36b7fd95830c3b","filename":"github/tests/ReplayData/PaginatedList.testNoFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationSupportsIterator.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"502c05d24253950207933d5a7957a1bdca4342e3","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithMultiplePages.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithSinglePage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSeveralIterations.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingInFirstPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilEnd.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21624eca355af27f649a6d14211cab14aeb05516","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilFourthPage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/Persistence.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0c0581afd71ab5f3e4f5df11e4c83176dd5e4b03","filename":"github/tests/ReplayData/PullRequest.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f41d6616cc044c72241365d554b9e8af3903744","filename":"github/tests/ReplayData/PullRequest.testCreateComment.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8130f423a59910224f389a5cdad1c818fce7476","filename":"github/tests/ReplayData/PullRequest.testGetComments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d1517454fdc23e01257f762f41efa18c331e00ef","filename":"github/tests/ReplayData/PullRequest.testGetCommits.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"69f64d309cbae6eb19b500827d9fde15271e09a8","filename":"github/tests/ReplayData/PullRequest.testGetFiles.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8855499d8d0a56726e208d162415ed574ae07402","filename":"github/tests/ReplayData/PullRequest.testGetIssueComment.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8d7e393d2e5855d1323d2b4c1b407d596facf80a","filename":"github/tests/ReplayData/PullRequest.testGetIssueComments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"488b720429c4b1672184b70b41fee7b89473141d","filename":"github/tests/ReplayData/PullRequest.testMerge.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"50cd9c3df6616168823f83c8b03d9fe1dcc14cb6","filename":"github/tests/ReplayData/PullRequest.testMergeWithCommitMessage.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0984d3abd06d8d487f16ddd543b9696db7320227","filename":"github/tests/ReplayData/PullRequestComment.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2a70109a0af9533722f7c6075e92ebc8b5b65bad","filename":"github/tests/ReplayData/PullRequestComment.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"373f7adc095f89c4e5b6068c4d6c5bcc1d37dc17","filename":"github/tests/ReplayData/PullRequestComment.testGetReactions.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"43dce8e4234b8c38b249d4f6adf399fdb3c4c293","filename":"github/tests/ReplayData/PullRequestFile.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"732633c10936fe827a8f1d023d1dfc1c34824b5c","filename":"github/tests/ReplayData/PullRequestReview.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"562c425b42ff684e5f04823b4c6b0a22070fe3c2","filename":"github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dca139cb3d4958b76bc8468b7572b12fb00a645b","filename":"github/tests/ReplayData/RateLimiting.testGetRateLimit.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"df34e96ca7f890fa361996c678afb07cc42a130f","filename":"github/tests/ReplayData/RateLimiting.testRateLimiting.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"787d3956812c905b6ec26753d5df4392c1a6d1de","filename":"github/tests/ReplayData/RateLimiting.testResetTime.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0268609f775f39abf16d4a5024d6eb4f4a57a2e8","filename":"github/tests/ReplayData/RawData.testCompletedObject.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4b0db8f23bbd0d123f3fcdae6c13ab896f61291a","filename":"github/tests/ReplayData/RawData.testNonCompletableObject.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c572a42a13d93c3073c1fae19c5683be209627a5","filename":"github/tests/ReplayData/RawData.testNotYetCompletedObject.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0ce726ed473c88e242a6c6dbecbf9b64e9db88af","filename":"github/tests/ReplayData/Reaction.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89c6761ecab93e3a89aa36bcd9202e268835e933","filename":"github/tests/ReplayData/Reaction.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a0b5c49c063ca1119bf2c7e6a98ca7ff4754a344","filename":"github/tests/ReplayData/Reaction.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"068ca57b9c5f9d39b81af7a912d6646370892325","filename":"github/tests/ReplayData/Release.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dddeef7a36d73e5793718ba3b74df6531ab757e5","filename":"github/tests/ReplayData/Release.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2c43077bc275e4f2370cdc06a02e730b2aad3a05","filename":"github/tests/ReplayData/Release.testCreateGitTagAndRelease.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8a2b900110b6c54167f35dd07ba656ffcf906bfa","filename":"github/tests/ReplayData/Release.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7091a55b35bdc075a7367a30759c73cb611c3adc","filename":"github/tests/ReplayData/Release.testGetAsset.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3652b3c26278480c1cf4bb178d2d43d660ec8651","filename":"github/tests/ReplayData/Release.testGetAssets.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f410765876a050eac81285ad124da33116b6eda4","filename":"github/tests/ReplayData/Release.testGetLatestRelease.txt","status":"added","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"699b446a201dfcb13cf08921f2ab523078163b01","filename":"github/tests/ReplayData/Release.testGetRelease.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8c675e6be527d2feb53be45442f37708db88f1b","filename":"github/tests/ReplayData/Release.testUpdate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"027ee7a60cb94b6a9577e2a22956a2d49ddb299c","filename":"github/tests/ReplayData/Release.testUploadAsset.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4e5df1305b1edcaef1acae9eeaae25059bd853f5","filename":"github/tests/ReplayData/ReleaseAsset.testAttributes.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"214e784797bad896cee5525685a5971e4e93670e","filename":"github/tests/ReplayData/ReleaseAsset.testDelete.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af26b8527a8e5c05e4d344e554d6f401295fe0c0","filename":"github/tests/ReplayData/ReleaseAsset.testUpdate.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"972491525f07e3491ed9ffe5e70b1d056ca96456","filename":"github/tests/ReplayData/Repository.setUp.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b85dd717383b483193033f0a63e1cbd159963999","filename":"github/tests/ReplayData/Repository.testAssignees.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eee412afb1dedacee8731d90ce165a48bddf8354","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionContexts.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5df6fcceeb55b96df94297d393e88c5c9dd064fd","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionEnforcementLevel.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"aedfb7ee70e434d2b5d51a5af34462828796fd6f","filename":"github/tests/ReplayData/Repository.testCollaborators.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ea3d1d065f52799bfbd192dafbbb8260e4a58014","filename":"github/tests/ReplayData/Repository.testCompare.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16de2820b2b56e6d66385999e1ddc5628fe1d145","filename":"github/tests/ReplayData/Repository.testCreateGitCommit.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d529a7b991c0e0e3f07e812d985cf20cd2aa555","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithAllArguments.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c2c4dde2963477f156daa0bd5d2ae1758fb4ac7f","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithParents.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"821c71e07abf01b2b1048440224b3b9a74dfc382","filename":"github/tests/ReplayData/Repository.testCreateGitTreeWithBaseTree.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024?page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"382b92a7be1b87a6e528c22581b09ece1318bffcae2689c178933d885df348e9"'), ('Last-Modified', 'Thu, 01 Feb 2018 00:16:11 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '23'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'ECA6:2CAD27:34B62E1:2F2A263:69626059')] +{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYmZlOGQwZjYyM2NhMjlkOTg0ZWMwOWQyYjU2NmU5YWIxMGFlMDI0","commit":{"author":{"name":"R1kk3r","email":"R1kk3r@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"message":"Remove the default \"null\" input send during GET request (#691)\n\n* Remove the default \"null\" input send during GET request\r\n\r\n* Remove the 'null' value from all tests","tree":{"sha":"3be58227503a8829339306ffa910c5c45e3f4676","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3be58227503a8829339306ffa910c5c45e3f4676"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…","comments_url":"…","author":{"login":"R1kk3r","id":8941245,"node_id":"MDQ6VXNlcjg5NDEyNDU=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/R1kk3r","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…"}],"stats":{"total":1862,"additions":931,"deletions":931},"files":[{"sha":"ae512681fb2a9a4beb02936d63f74f2de7c71cac","filename":"github/Requester.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e8e838a31ecebf58cb13f3907473e22253816bb","filename":"github/tests/Logging_.py","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fa9b95b08adc77b7d176d58b194fb4980c4f7553","filename":"github/tests/ReplayData/AuthenticatedUser.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fd2474416b0d7301a3f80734ce4fb0c8aef4c976","filename":"github/tests/ReplayData/AuthenticatedUser.testCreateFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6b3a9cb3ff333fad031a1a969565010e9e08f052","filename":"github/tests/ReplayData/AuthenticatedUser.testEmails.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"2c13f315f366c935bd4457c58fe936b83935f542","filename":"github/tests/ReplayData/AuthenticatedUser.testFollowing.txt","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e4a315bddeb9451cc41fff3df7885a3d499a8fdf","filename":"github/tests/ReplayData/AuthenticatedUser.testGetAuthorizations.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d6d547c87cc5a7a830609582f2d017299855181","filename":"github/tests/ReplayData/AuthenticatedUser.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee4acbe742f39b0ee7db9de1a5c87e7a8a5dcfe6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fc243ab943bc7c934a1c14d8173be2a0b8fbee62","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a99983599fed3989a2fff567210279ade49d0bba","filename":"github/tests/ReplayData/AuthenticatedUser.testGetIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16cf1d959a76d759ba92cb46633093fc41279cf7","filename":"github/tests/ReplayData/AuthenticatedUser.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"86d87360fd9c1191891c01282013922fda30e217","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotification.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1a70b15c5729b9d51ba2c81d2c17d5380636d014","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotifications.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b5a32e8e5dc243fbfab923a9cfcacc2fa95cef3","filename":"github/tests/ReplayData/AuthenticatedUser.testGetNotificationsWithOtherArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13ffcbb0250c576a7093938be7dc34adaa1f7739","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrganizationEvents.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"13cb72bb1596a394d397faa9c56c1f15c95433dc","filename":"github/tests/ReplayData/AuthenticatedUser.testGetOrgs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ad8d42fab5c11e03ce3a81bd35c1161af8ee738b","filename":"github/tests/ReplayData/AuthenticatedUser.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3e6afea17e85cf239cf53bda145accc70ab5697","filename":"github/tests/ReplayData/AuthenticatedUser.testGetReposWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d0d887e56cc88241f73bc255a679953665cc6ba6","filename":"github/tests/ReplayData/AuthenticatedUser.testGetStarredGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"92785959fd58cfab7e727204be5780bd071d7c32","filename":"github/tests/ReplayData/AuthenticatedUser.testGetTeams.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f13fa35577b87cee1c425e534d975c43de820c57","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"63e871c0020e4f9f4e67db3a687b165de7479021","filename":"github/tests/ReplayData/AuthenticatedUser.testGetUserIssuesWithAllArguments.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b10e61d4d53e03081f9f0575e21e566dff84e4fd","filename":"github/tests/ReplayData/AuthenticatedUser.testStarring.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1256b91f1361e066bb4acd855f5358d75787fcf6","filename":"github/tests/ReplayData/AuthenticatedUser.testSubscriptions.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0fee5b52c97c5d5a5c06c4a98b141fa94fc8474b","filename":"github/tests/ReplayData/AuthenticatedUser.testWatching.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d5e56c14052d1de71ad2d5ae810235ebb17c95a8","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithLogin.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"425bcd1f6c84a04cb55be0b55707ee9d3822ec12","filename":"github/tests/ReplayData/Authentication.testAuthorizationHeaderWithToken.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4357e4453f4b18d15df489402c3e70add0118f92","filename":"github/tests/ReplayData/Authentication.testBasicAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"efcf3628a18438e4c535267933897019d06cf1ba","filename":"github/tests/ReplayData/Authentication.testNoAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f6a50faf696352ae2bb6fd18cdf36b92f51a2c88","filename":"github/tests/ReplayData/Authentication.testOAuthAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"666056f4e79baf48cc4b7988d6201d71eb05cf37","filename":"github/tests/ReplayData/Authentication.testSecretKeyAuthentication.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6d0f9f01af5acb4691d8e94a8acaab1991563af2","filename":"github/tests/ReplayData/Authentication.testUserAgent.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c225d7a56691b7695591bce48a1ebcfee873d44b","filename":"github/tests/ReplayData/Authorization.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ed8b51778789c5a682807596f6cfb5033d555873","filename":"github/tests/ReplayData/Authorization.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a249e52f2db24f87ea99205998a0bc8b9593ac36","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeInClassAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadAttributeTransformation.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1191038c709ba815d2e8976cccebc7c2c2011963","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d62b76ff4af8b051d9d3df0beb8141c6c8552e91","filename":"github/tests/ReplayData/BadAttributes.testBadSimpleAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"aed928675ba56f43fb1c40791c7674102310bca5","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttribute.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8542c2261908e8c2c0767920e720889399cba058","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInDict.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a3e26db30db2660f789ca24c94d8ca8a820de73f","filename":"github/tests/ReplayData/BadAttributes.testBadTransformedAttributeInList.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5d0ae92940279199cbc3b609581eb938a8e1df72","filename":"github/tests/ReplayData/BadAttributes.testIssue195.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"42a4fbca1a248c6ade2597f1c8d073f7c45cd627","filename":"github/tests/ReplayData/Branch.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"62bfa681493885eb631b96071b8d35d18d277505","filename":"github/tests/ReplayData/Branch.testCommitCommentsOnLine.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"68a5e361c9b0cc4034205994061cc2396807ac53","filename":"github/tests/ReplayData/Branch.testProtectedAttributes.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae41cf9930a54f844def85b87471c17d7a3d43bc","filename":"github/tests/ReplayData/Commit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3d79b663004bda0b8052a5027bcf5c28efbbc4ae","filename":"github/tests/ReplayData/Commit.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c584befdaa345bc8233ed9c25bba44c27cbd8b7c","filename":"github/tests/ReplayData/CommitCombinedStatus.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"024f236d53337d76ca3742759ba2429e8bbe4b30","filename":"github/tests/ReplayData/CommitComment.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1430b71497af7f4786dd3b4bd8001106ec5a05cd","filename":"github/tests/ReplayData/CommitComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6dec5a3f4aec14b24f0769004cb4c504ba1e7a1e","filename":"github/tests/ReplayData/CommitComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7eb92c6fd038dd7c516325c77013879b1644f312","filename":"github/tests/ReplayData/CommitStatus.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/ConditionalRequestUpdate.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d4beca4c2188ac1ac7554f22c85b83f0c063e3e0","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidNotUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/ConditionalRequestUpdate.testDidUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1238d33da59a2cc67577bfe6e6f54c3aa9fed775","filename":"github/tests/ReplayData/ContentFile.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bbc4408719fcd76936c1b8255547b8fb6d278f15","filename":"github/tests/ReplayData/Download.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"85afa3aadd5fcf86cbbcc2f8936124cf2fcf223a","filename":"github/tests/ReplayData/Download.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a1657a95314f2b200e76c5c9c353c8be62c47601","filename":"github/tests/ReplayData/Enterprise.testHttp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f69e5f4aced99c4627fcc974ab9499067c5a7c13","filename":"github/tests/ReplayData/Enterprise.testHttps.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a1d3f565a77117c3a0cd7b24f2759f3f3d496fe","filename":"github/tests/ReplayData/Enterprise.testLongUrl.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"0a7f4ff7a8847f6e0f4dded421c8d27c46591944","filename":"github/tests/ReplayData/Enterprise.testSpecificPort.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"96d2b87605ee696367134155739abd51f5623bc3","filename":"github/tests/ReplayData/Equality.testBranchEquality.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f3ea41a026a658d7de31219660406e01f8bc79b8","filename":"github/tests/ReplayData/Equality.testUserDifference.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c061908b2b2fad79dce7b485ec88fe19a46026e2","filename":"github/tests/ReplayData/Equality.testUserEquality.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1ea7b2b6594276be9d6164a75d76832157f7ff63","filename":"github/tests/ReplayData/Event.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4028ca293790edfb8813936cf6b380dae48cff49","filename":"github/tests/ReplayData/Exceptions.testBadAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"34340f8419f5a97c5655ac2fa195dcacf883cd63","filename":"github/tests/ReplayData/Exceptions.testNonJsonDataReturnedByGithub.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fbb8a31e31501b14d2d34b0313faa1e5db5e8501","filename":"github/tests/ReplayData/Exceptions.testUnknownObject.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"98935a9eaef0b2c3a78d831924721d4d4d379845","filename":"github/tests/ReplayData/Exceptions.testUnknownUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4c4752c5b504fcad94d22a5f025e8eddfbf077a3","filename":"github/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt","status":"modified","additions":60,"deletions":60,"changes":120,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"27eb6a8220d5dadaa0aaf4d7b54cb62ebd6f9ccc","filename":"github/tests/ReplayData/Gist.testAttributes.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e5a449ae4c12998fc58c84d3424f5b5dcf8ad1c6","filename":"github/tests/ReplayData/Gist.testCreateComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b22500c1065445e717a3f6d3282439c66368fcc7","filename":"github/tests/ReplayData/Gist.testDelete.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7a6d84eb6c4701a51c026c8b8a90ecddd5893387","filename":"github/tests/ReplayData/Gist.testDeleteFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"869c07e936b7bd21ce10b14d4be8e1c31c09e738","filename":"github/tests/ReplayData/Gist.testEditWithAllParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9690563ae43062788c234c0adf0db3bb7a083c4a","filename":"github/tests/ReplayData/Gist.testEditWithoutParameters.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6a324d9138adcdaeecef2fe3324e95f095d44841","filename":"github/tests/ReplayData/Gist.testFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9fc68bd047481bbcc5c0907d6526a568455113b5","filename":"github/tests/ReplayData/Gist.testGetComments.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"834877a2b45f15de5ec7bbb98c9c623892ab4688","filename":"github/tests/ReplayData/Gist.testRenameFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5fe65eb4fc93d71d45a6b970b8e41d36777a900e","filename":"github/tests/ReplayData/Gist.testStarring.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fb7ff856f1a0fd1511b0255aca190dc669b5f9ce","filename":"github/tests/ReplayData/GistComment.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a68067b6f9fe4392f69decf950a76838a3b428ef","filename":"github/tests/ReplayData/GistComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b775ed5c0d19bba779eee97c8d82c53076c01562","filename":"github/tests/ReplayData/GitBlob.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"16b4d77f2c46bc1728a7b52369fd4a401b191c57","filename":"github/tests/ReplayData/GitCommit.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd2136e6e69460b038f21f60704a2afc17b30977","filename":"github/tests/ReplayData/GitRef.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ead5b2c4a86741c74c638295cad1c31d01001b3e","filename":"github/tests/ReplayData/GitRef.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"add7f585747d7a8907d9bc5ed16db43698857315","filename":"github/tests/ReplayData/GitTag.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"429055c9e57244df8536e2eef5d80b14a7cdd4a9","filename":"github/tests/ReplayData/GitTree.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b5363131e82b84dbdbb016b0c177a034bdef8bad","filename":"github/tests/ReplayData/Github.testGetEmojis.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"df020c4c3a7d8b316782cbd950aa3cd89ffd3297","filename":"github/tests/ReplayData/Github.testGetGists.txt","status":"modified","additions":0,"deletions":0,"changes":0,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d643f1e766ad0c0388835b231d73bad1dd797c4e","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplate.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8eee46f50acd0a36c576097283aa0c6bb9b5985","filename":"github/tests/ReplayData/Github.testGetGitignoreTemplates.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"78b92a1fc5d37b06d7791c9b0e474ec86c59d3be","filename":"github/tests/ReplayData/Github.testGetHook.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8e1ab91c92b47b1e9c4e82d949580cb14f9c7c08","filename":"github/tests/ReplayData/Github.testGetHooks.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/Github.testGetRepoFromFullName.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c3407e6dbef8628074b18d33812c2ba465baf008","filename":"github/tests/ReplayData/Github.testGetRepoFromId.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14910c7de15dafbd1b70a60ca9c4683319d384ae","filename":"github/tests/ReplayData/Github.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0564e373fbf7d66e9a34004a4e9613c774d37051","filename":"github/tests/ReplayData/Github.testGetReposSince.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c655af2d39334f7bf893665039ffd50050e73cd6","filename":"github/tests/ReplayData/Github.testGetUsers.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"255eb5c1750dfd45e01a6610d4d032135f7987ae","filename":"github/tests/ReplayData/Github.testGetUsersSince.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21b10ea4d3611c638ed96ee53f41de0a6f213c93","filename":"github/tests/ReplayData/Github.testLegacySearchRepos.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"59482af7a3645041d66abc42a17b5dd3799c059a","filename":"github/tests/ReplayData/Github.testLegacySearchReposExplicitPagination.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a4c713c1c8e4bda07d201842aa12b055a58a5908","filename":"github/tests/ReplayData/Github.testLegacySearchReposPagination.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ca04b62f7e62a3069e3e5a0d3d26592417488bd0","filename":"github/tests/ReplayData/Github.testLegacySearchReposWithLanguage.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf8ed68cb0934c52324d3e15750f0063c272832f","filename":"github/tests/ReplayData/Github.testLegacySearchUserByEmail.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testLegacySearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d52e4eca22c5920cec28c6ecb15dbe63acd0756b","filename":"github/tests/ReplayData/Github.testLegacySearchUsersExplicitPagination.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c0768215e75ca8c639c73c3d49cd25d50d5b2856","filename":"github/tests/ReplayData/Github.testLegacySearchUsersPagination.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c052fc6947dd0fb51cf81fc3708ddd5003795544","filename":"github/tests/ReplayData/Github.testSearchRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"61e97e984153fb0a576fcad4cf2472049729fc5d","filename":"github/tests/ReplayData/Github.testSearchUserByEmail.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e260bbe1e616a72c2613f7f48ce3a1a95bffaaf1","filename":"github/tests/ReplayData/Github.testSearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8238293a3c7739e9f055920717b199def8394e24","filename":"github/tests/ReplayData/Hook.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35d5b4ebccb1e3ebc2b164613b79a98a71fd6020","filename":"github/tests/ReplayData/Hook.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7dcca212ad1033fc54d6e34a74755a8212c4f20e","filename":"github/tests/ReplayData/Hook.testPing.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b77d2fc33c0bc0ad2a9dccdbe003a537919b3c4d","filename":"github/tests/ReplayData/Hook.testTest.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0098cce6d3d1dff648b5bdffee2ff4ce7ff5dc25","filename":"github/tests/ReplayData/Issue.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"754e1c1fe322e27d1fa0b2ade9fc929b568c59a5","filename":"github/tests/ReplayData/Issue.testAddAndRemoveAssignees.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf5c11f89bf0a1b068ac1cf7e848f2c449707beb","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabels.txt","status":"modified","additions":8,"deletions":8,"changes":16,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"836084944d1287e3d85009fea65560f525a89755","filename":"github/tests/ReplayData/Issue.testAddAndRemoveLabelsWithStringArguments.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b5c449743e450bd2104ad0e275e647a43e43d432","filename":"github/tests/ReplayData/Issue.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4954645e321ae426d866f5c614f260be58f9acb4","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabels.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8eacccf4819d8822fb52208dcee888a09509861a","filename":"github/tests/ReplayData/Issue.testDeleteAndSetLabelsWithStringArguments.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e1bcb4f8e3d865e78abec0ac0dd3be1ce41c4227","filename":"github/tests/ReplayData/Issue.testEditWithAllParameters.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"38a17838415137beefbfcf87288763361bc07c2c","filename":"github/tests/ReplayData/Issue.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9dd15f2852a90179a67af7c9c7d4d3d02e0da386","filename":"github/tests/ReplayData/Issue.testGetCommentsSince.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5391293d77a937e0ec9a56c1a7bb9c9ccd9e6725","filename":"github/tests/ReplayData/Issue.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"53874dbaea7c028a9102dff2b06a632113dc148f","filename":"github/tests/ReplayData/Issue.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5e27e933bf19ca470dd88c9b3faad017df9f82e1","filename":"github/tests/ReplayData/Issue.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bf4003f79f571dd8084bafe48d7c88a57ad8bfb1","filename":"github/tests/ReplayData/Issue131.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01f5744b5abc831d2fda65b8ac08fa45d694d1dd","filename":"github/tests/ReplayData/Issue131.testGetPullWithOrgHeadUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8f656a1fedc33063adada6b6aa75641281102e32","filename":"github/tests/ReplayData/Issue131.testGetPullsWithOrgHeadUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"497d81512841a06376f5c8a0673e32fc42ffbc8b","filename":"github/tests/ReplayData/Issue133.testGetPageWithoutInitialArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ae3414605995f5d9d65e46723daf65f98f5a0dbb","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsFailsWhenAutenticatedThroughOAuth.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bbda83c7e6c47b233a2feb1f27d8e42f09b33604","filename":"github/tests/ReplayData/Issue134.testGetAuthorizationsSucceedsWhenAutenticatedThroughLoginPassword.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5a14176434a7a32fca896324f668bf59e15ded83","filename":"github/tests/ReplayData/Issue134.testGetOAuthScopesFromHeader.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"10a97fef33ca80e6214eb59ce52e0a5eab802005","filename":"github/tests/ReplayData/Issue139.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"76c7550db49c70f345c2fa3798aa06f812d3c13e","filename":"github/tests/ReplayData/Issue139.testCompletion.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"6114fef60f8699bfa5a9da8626ed84eb552f7718","filename":"github/tests/ReplayData/Issue140.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0999c57f9596b209bc541a6ae78992140fe94825","filename":"github/tests/ReplayData/Issue140.testGetDirContents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b0add897beba366c24513d26fb16b36d723f3199","filename":"github/tests/ReplayData/Issue140.testGetDirContentsThenLazyCompletionOfFile.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01cab386c0d913caef0bef5c71c34a498aacf95e","filename":"github/tests/ReplayData/Issue140.testGetDirContentsWithRef.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ec701bafbc9fa23fd9bf4dffdf2c1f2879c2c880","filename":"github/tests/ReplayData/Issue140.testGetFileContents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ddbfb9c7449da41916ce43a8dd462efccbc8526a","filename":"github/tests/ReplayData/Issue158.testPaginationWithSecretKeyAuthentication.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5444722cd83b58cb4e57c0bdb218298e8e39a808","filename":"github/tests/ReplayData/Issue174.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0e3be28273d8f39eae0fbb756fa535e697fee1b4","filename":"github/tests/ReplayData/Issue174.testGetDirContentsWhithHttpRedirect.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14f1cee3cccedc026fdeaec02c9c64e86e5c9405","filename":"github/tests/ReplayData/Issue214.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"187fa73a0c1cf266b20e86bf93bc7aa9aeebb444","filename":"github/tests/ReplayData/Issue214.testAssignees.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"26776936bff15d073dd66c307724ae45a549e3b4","filename":"github/tests/ReplayData/Issue214.testCollaborators.txt","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3821a7c6cbe790128813eaee55dad0ebfc9ecf76","filename":"github/tests/ReplayData/Issue214.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue216.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a6eca3755c3737f450c7acc6aa7cfcda82eb8e3f","filename":"github/tests/ReplayData/Issue216.testIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/Issue278.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"330e60a7c2125c71e286b105a71c0cb4e949fa06","filename":"github/tests/ReplayData/Issue278.testIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f7dd20d38095b145df37be674632287a52f4427","filename":"github/tests/ReplayData/Issue33.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dcde122984a1cb07bf92825dbfda94df6a68af32","filename":"github/tests/ReplayData/Issue33.testClosedIssues.txt","status":"modified","additions":38,"deletions":38,"changes":76,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b31ba310d16b55f4451b27b603c85b96b99ae399","filename":"github/tests/ReplayData/Issue33.testOpenIssues.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eefc7e94209ba85d1019a4abf556fd489609a31e","filename":"github/tests/ReplayData/Issue494.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d2eaa5268603989fed79a192c1125ef42b164e42","filename":"github/tests/ReplayData/Issue50.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4fc4e4073af1576b80c96c7e2475a0d7063684ab","filename":"github/tests/ReplayData/Issue50.testAddLabelToIssue.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2884f165d475892d328e8ff70a1f445bf84a0cbc","filename":"github/tests/ReplayData/Issue50.testCreateIssueWithLabel.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8868c42714a24702b08690587c5d0211fe31f02d","filename":"github/tests/ReplayData/Issue50.testGetIssuesWithLabel.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f7a5849221702f4e0dc68c0534edfade1e1be531","filename":"github/tests/ReplayData/Issue50.testGetLabel.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d5fa1ddf25a2dee415c9f378287a8d6be1ce2192","filename":"github/tests/ReplayData/Issue50.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee8d60b1b25e4beb8940e33d2a7c350d468c42a0","filename":"github/tests/ReplayData/Issue50.testIssueGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"01a833337636675e26a5cf9ea8405723351681b9","filename":"github/tests/ReplayData/Issue50.testRemoveLabelFromIssue.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3f4a4173324684a0bcce3ce3dc1d45221d6cebcf","filename":"github/tests/ReplayData/Issue50.testSetIssueLabels.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dab58fe0ae2601fa39d394b0dc5674c3c2b25ac2","filename":"github/tests/ReplayData/Issue54.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9c1cdf47b5c066675831db4d7e6d48598ddb6409","filename":"github/tests/ReplayData/Issue54.testConversion.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ffbace5b712787022cd874f20a7692e59012a462","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterprise.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"bd5b1e596d51f86415608aa6ffd646324061f6c9","filename":"github/tests/ReplayData/Issue80.testIgnoreHttpsFromGithubEnterpriseWithPort.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ad967f64de33a4edb657f9596ce191c1d8589ebe","filename":"github/tests/ReplayData/Issue87.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"39a7f5034c73701754b18cba69abaf03ef1c48a3","filename":"github/tests/ReplayData/IssueComment.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0f0457abe7d1fb855264b258e721db2e2c6e061f","filename":"github/tests/ReplayData/IssueComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8551d7d4b57f69e21d656c1c01584ee5bde55eb","filename":"github/tests/ReplayData/IssueComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dea7355c5bea8dce58eb5991bbeb46c8a6b5f5e5","filename":"github/tests/ReplayData/IssueEvent.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a93448223a43fa61b5f4ac246b317bfb7f234abb","filename":"github/tests/ReplayData/IssueEvent.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"72918401316da1b51c97aa034878f549b07833fb","filename":"github/tests/ReplayData/Label.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9f1f1d8ad666f9dc214774406d7c3c618e05ca8f","filename":"github/tests/ReplayData/Label.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ecf3ee8172f2d6063369cecc495e826a56c230f2","filename":"github/tests/ReplayData/LazyRepository.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d73fa84d313e0c5330ca2e388124f4f83324fcd2","filename":"github/tests/ReplayData/LazyRepository.testGetIssues.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f567fa8271f790cad148301ffbb0488702601fcb","filename":"github/tests/ReplayData/LazyRepository.testGetUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"96d38f2a62ebe509877901c51385a5aa833f5109","filename":"github/tests/ReplayData/LazyRepository.testOwner.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c42a9ae0b6fc63227c73c42fd53e81769a25ec27","filename":"github/tests/ReplayData/Logging.testLoggingWithBaseUrl.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3957553d2ac1381441c949028f83b0c8f252518f","filename":"github/tests/ReplayData/Logging.testLoggingWithBasicAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"35e2bca3e6b1460be145fc49f16a0ee05eab5879","filename":"github/tests/ReplayData/Logging.testLoggingWithOAuthAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14b309a8c22e64349df1fbd286a4c18c7146c900","filename":"github/tests/ReplayData/Logging.testLoggingWithoutAuthentication.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"20dc2580756725ffbbfb697b8d120f4798f99c9c","filename":"github/tests/ReplayData/Markdown.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f13ebe417a0ed3031383e173893883054951af05","filename":"github/tests/ReplayData/Milestone.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a9c841d5032ee424be7c6ba53ef8248fd917606d","filename":"github/tests/ReplayData/Milestone.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"397e007dc115b0e5d8916b00d84498d0f5bfdebd","filename":"github/tests/ReplayData/Milestone.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c584a88217478d92a9968a167a72ee3b4f033083","filename":"github/tests/ReplayData/NamedUser.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"14e16ebcef877070b5031800ad6e4fb292616ae7","filename":"github/tests/ReplayData/NamedUser.testAttributesOfOtherUser.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ff78a099dd579a54abb4143dfab9edb823814100","filename":"github/tests/ReplayData/NamedUser.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"98744d958ad103aac6b87b7917df73ca09559b4d","filename":"github/tests/ReplayData/NamedUser.testGetFollowers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c5664be7ebd249c6a46c27135aaeed66c8e8fee0","filename":"github/tests/ReplayData/NamedUser.testGetFollowing.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a252e0280d443e08e557b5109870ac43da964fa5","filename":"github/tests/ReplayData/NamedUser.testGetGists.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"846233458f9a6ef5c1618aae78bc45ab35ab3ef5","filename":"github/tests/ReplayData/NamedUser.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"93d9b7685512fc17986e599cf0b439306203f951","filename":"github/tests/ReplayData/NamedUser.testGetOrgs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2507e4ca2fcc642d161add858d57c9e84696daa8","filename":"github/tests/ReplayData/NamedUser.testGetPublicEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0a17525c621b819f28e649b082bc8619a6cafa2e","filename":"github/tests/ReplayData/NamedUser.testGetPublicReceivedEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"e548c61c5cd57e7ceae784aed918636d38f0a609","filename":"github/tests/ReplayData/NamedUser.testGetReceivedEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cee793a9e5906d3e0d53737f40e338668e4d14af","filename":"github/tests/ReplayData/NamedUser.testGetRepo.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f5927c5eac564de12f300700d9de5e457615089b","filename":"github/tests/ReplayData/NamedUser.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d9dc67a3b3ddfbeb12766d4d8744c12d42fb978","filename":"github/tests/ReplayData/NamedUser.testGetReposWithType.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fdc793bed4bdd137c6f593738e724267b7ce56c4","filename":"github/tests/ReplayData/NamedUser.testGetStarred.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"82ee98e6583088149046a9035c140e3f60398634","filename":"github/tests/ReplayData/NamedUser.testGetSubscriptions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89d2c521142d2b6bb8bfd925011ea0e5e8f245e2","filename":"github/tests/ReplayData/NamedUser.testGetWatched.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f8686861f3d99e507c284f1e894d290079e252f7","filename":"github/tests/ReplayData/NamedUser.testHasInFollowing.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"301591609c426e37386cd6b73b73a8bda11f83f2","filename":"github/tests/ReplayData/Organization.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f362310f262352a6e06ea9ae5ac3813fbaf2a09","filename":"github/tests/ReplayData/Organization.testCreateFork.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f86012dd7a6393f2abe01f27558cf99dc12d7f70","filename":"github/tests/ReplayData/Organization.testCreateRepoWithAllArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b44d8b90222471fbf38063a9a6e19a13ba86abdb","filename":"github/tests/ReplayData/Organization.testCreateTeamWithAllArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7cb41076ee3319d8ad82adf9f759e25636766c11","filename":"github/tests/ReplayData/Organization.testGetEvents.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"db70ce23dc93573451cea7edfe0fd628951d9507","filename":"github/tests/ReplayData/Organization.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b80482a2c916de3390184c143729dc7b3dc0aed9","filename":"github/tests/ReplayData/Organization.testGetIssuesWithAllArguments.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"03f1f429008f878be91eadf7908d1ed45095eceb","filename":"github/tests/ReplayData/Organization.testGetMembers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"70e8e97a4d9822e15c5a07641afb4ddada21a92d","filename":"github/tests/ReplayData/Organization.testGetPublicMembers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"fb8353cc3186115b7a8a79b5575f2106d51c1270","filename":"github/tests/ReplayData/Organization.testGetRepos.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"779284c062bcc12fa5929801febd1a74c015dc01","filename":"github/tests/ReplayData/Organization.testGetReposWithType.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"46c4acba3de6fc6009ff8146c2aac42e0e133ce3","filename":"github/tests/ReplayData/Organization.testGetTeams.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"875ff9e70a281559e89ec235fe616fed2d1d15f4","filename":"github/tests/ReplayData/Organization.testMembers.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b67ef7c085bd28b49fae8e88b319b24b9ea30758","filename":"github/tests/ReplayData/Organization.testPublicMembers.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"57b6e1a23796374cab458e262e1b7f0c901687e2","filename":"github/tests/ReplayData/OrganizationHasInMembers.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b38ffadf100f5a1c284059d51070ab3c5210d9d9","filename":"github/tests/ReplayData/PaginatedList.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"05a96f8907cb08062475eb6e0eebab39623595ee","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPage.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7b88f2b69601b9c6030fbab659fd0f4401b4e6ac","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithGetPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2d7bb6dfa9d5d1270a66409ea2f64b3b2708862f","filename":"github/tests/ReplayData/PaginatedList.testCustomPerPageWithNoUrlParams2.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testGetFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"693cabd5de565c3ce87856edd0421a76e4856d75","filename":"github/tests/ReplayData/PaginatedList.testGetThirdPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"17a36885ecfd620871475a9147615cbe07ec5c23","filename":"github/tests/ReplayData/PaginatedList.testGettingTheReversedListDoesNotModifyTheOriginalList.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingAfterIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"1f7c3a0c618cfb492bff37df664aab9021ca755b","filename":"github/tests/ReplayData/PaginatedList.testIntIndexingInThirdPage.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIteration.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3067def9dd081b29e11a82be64667e8534e0bbbd","filename":"github/tests/ReplayData/PaginatedList.testInterruptedIterationInSlice.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testIteration.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"40c8fdb6efad0e7be4e5bb198b36b7fd95830c3b","filename":"github/tests/ReplayData/PaginatedList.testNoFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationSupportsIterator.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"502c05d24253950207933d5a7957a1bdca4342e3","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithMultiplePages.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5f2ca4a916d394bf1b9b34b07246371c3cecafb8","filename":"github/tests/ReplayData/PaginatedList.testReversedIterationWithSinglePage.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSeveralIterations.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ee62809a95b90f97877360c44249d3536cbdbd1f","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingInFirstPage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af3164c0ed1a42d6ee47c24452e7b9c76c3f19f5","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilEnd.txt","status":"modified","additions":14,"deletions":14,"changes":28,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"21624eca355af27f649a6d14211cab14aeb05516","filename":"github/tests/ReplayData/PaginatedList.testSliceIndexingUntilFourthPage.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9921cd3ea9b1c851ff1bee2806b40e319cc4f04d","filename":"github/tests/ReplayData/Persistence.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3b694113e4e4664c814d5c91ddc13d072e6aadfa","filename":"github/tests/ReplayData/Persistence.testLoadAndUpdate.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0c0581afd71ab5f3e4f5df11e4c83176dd5e4b03","filename":"github/tests/ReplayData/PullRequest.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2f41d6616cc044c72241365d554b9e8af3903744","filename":"github/tests/ReplayData/PullRequest.testCreateComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8130f423a59910224f389a5cdad1c818fce7476","filename":"github/tests/ReplayData/PullRequest.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d1517454fdc23e01257f762f41efa18c331e00ef","filename":"github/tests/ReplayData/PullRequest.testGetCommits.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"69f64d309cbae6eb19b500827d9fde15271e09a8","filename":"github/tests/ReplayData/PullRequest.testGetFiles.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8855499d8d0a56726e208d162415ed574ae07402","filename":"github/tests/ReplayData/PullRequest.testGetIssueComment.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8d7e393d2e5855d1323d2b4c1b407d596facf80a","filename":"github/tests/ReplayData/PullRequest.testGetIssueComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"488b720429c4b1672184b70b41fee7b89473141d","filename":"github/tests/ReplayData/PullRequest.testMerge.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"50cd9c3df6616168823f83c8b03d9fe1dcc14cb6","filename":"github/tests/ReplayData/PullRequest.testMergeWithCommitMessage.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0984d3abd06d8d487f16ddd543b9696db7320227","filename":"github/tests/ReplayData/PullRequestComment.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2a70109a0af9533722f7c6075e92ebc8b5b65bad","filename":"github/tests/ReplayData/PullRequestComment.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"373f7adc095f89c4e5b6068c4d6c5bcc1d37dc17","filename":"github/tests/ReplayData/PullRequestComment.testGetReactions.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"43dce8e4234b8c38b249d4f6adf399fdb3c4c293","filename":"github/tests/ReplayData/PullRequestFile.setUp.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"732633c10936fe827a8f1d023d1dfc1c34824b5c","filename":"github/tests/ReplayData/PullRequestReview.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"562c425b42ff684e5f04823b4c6b0a22070fe3c2","filename":"github/tests/ReplayData/PullRequestReviewerRequests.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dca139cb3d4958b76bc8468b7572b12fb00a645b","filename":"github/tests/ReplayData/RateLimiting.testGetRateLimit.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"df34e96ca7f890fa361996c678afb07cc42a130f","filename":"github/tests/ReplayData/RateLimiting.testRateLimiting.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"787d3956812c905b6ec26753d5df4392c1a6d1de","filename":"github/tests/ReplayData/RateLimiting.testResetTime.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0268609f775f39abf16d4a5024d6eb4f4a57a2e8","filename":"github/tests/ReplayData/RawData.testCompletedObject.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4b0db8f23bbd0d123f3fcdae6c13ab896f61291a","filename":"github/tests/ReplayData/RawData.testNonCompletableObject.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c572a42a13d93c3073c1fae19c5683be209627a5","filename":"github/tests/ReplayData/RawData.testNotYetCompletedObject.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"0ce726ed473c88e242a6c6dbecbf9b64e9db88af","filename":"github/tests/ReplayData/Reaction.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"89c6761ecab93e3a89aa36bcd9202e268835e933","filename":"github/tests/ReplayData/Reaction.testAttributes.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"a0b5c49c063ca1119bf2c7e6a98ca7ff4754a344","filename":"github/tests/ReplayData/Reaction.testDelete.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"068ca57b9c5f9d39b81af7a912d6646370892325","filename":"github/tests/ReplayData/Release.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"dddeef7a36d73e5793718ba3b74df6531ab757e5","filename":"github/tests/ReplayData/Release.testAttributes.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"2c43077bc275e4f2370cdc06a02e730b2aad3a05","filename":"github/tests/ReplayData/Release.testCreateGitTagAndRelease.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"8a2b900110b6c54167f35dd07ba656ffcf906bfa","filename":"github/tests/ReplayData/Release.testDelete.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"7091a55b35bdc075a7367a30759c73cb611c3adc","filename":"github/tests/ReplayData/Release.testGetAsset.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"3652b3c26278480c1cf4bb178d2d43d660ec8651","filename":"github/tests/ReplayData/Release.testGetAssets.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"f410765876a050eac81285ad124da33116b6eda4","filename":"github/tests/ReplayData/Release.testGetLatestRelease.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"699b446a201dfcb13cf08921f2ab523078163b01","filename":"github/tests/ReplayData/Release.testGetRelease.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d8c675e6be527d2feb53be45442f37708db88f1b","filename":"github/tests/ReplayData/Release.testUpdate.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"027ee7a60cb94b6a9577e2a22956a2d49ddb299c","filename":"github/tests/ReplayData/Release.testUploadAsset.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"4e5df1305b1edcaef1acae9eeaae25059bd853f5","filename":"github/tests/ReplayData/ReleaseAsset.testAttributes.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"214e784797bad896cee5525685a5971e4e93670e","filename":"github/tests/ReplayData/ReleaseAsset.testDelete.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"af26b8527a8e5c05e4d344e554d6f401295fe0c0","filename":"github/tests/ReplayData/ReleaseAsset.testUpdate.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"972491525f07e3491ed9ffe5e70b1d056ca96456","filename":"github/tests/ReplayData/Repository.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"b85dd717383b483193033f0a63e1cbd159963999","filename":"github/tests/ReplayData/Repository.testAssignees.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"eee412afb1dedacee8731d90ce165a48bddf8354","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionContexts.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5df6fcceeb55b96df94297d393e88c5c9dd064fd","filename":"github/tests/ReplayData/Repository.testChangeBranchProtectionEnforcementLevel.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"aedfb7ee70e434d2b5d51a5af34462828796fd6f","filename":"github/tests/ReplayData/Repository.testCollaborators.txt","status":"modified","additions":7,"deletions":7,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ea3d1d065f52799bfbd192dafbbb8260e4a58014","filename":"github/tests/ReplayData/Repository.testCompare.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"16de2820b2b56e6d66385999e1ddc5628fe1d145","filename":"github/tests/ReplayData/Repository.testCreateGitCommit.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5d529a7b991c0e0e3f07e812d985cf20cd2aa555","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithAllArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"c2c4dde2963477f156daa0bd5d2ae1758fb4ac7f","filename":"github/tests/ReplayData/Repository.testCreateGitCommitWithParents.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"821c71e07abf01b2b1048440224b3b9a74dfc382","filename":"github/tests/ReplayData/Repository.testCreateGitTreeWithBaseTree.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"5cc9592941953269e102c58bff2da5d6f0d3f4c4","filename":"github/tests/ReplayData/Repository.testCreateIssueWithAllArguments.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"33358f352ae30834b652dbd2876414907b94db52","filename":"github/tests/ReplayData/Repository.testCreateIssueWithAllArgumentsStringLabel.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"de7d6bae17d1716f4bbbe7778a7a9548e26d3ecd","filename":"github/tests/ReplayData/Repository.testCreatePullFromIssue.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"321475bd63088516ce13792f8c1f90fbd5cc14d8","filename":"github/tests/ReplayData/Repository.testDelete.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"604dac1c57c59c94b373653d61ee058f74349934","filename":"github/tests/ReplayData/Repository.testDeleteFile.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024?page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:21:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d69101e8e58c1060df55e957a45612e73ef82f7d0c4f2e01ef15e12304bb4189"'), ('Last-Modified', 'Thu, 01 Feb 2018 00:16:11 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EE1B:2150B7:308D104:2AF6931:6962605A')] +{"sha":"cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYmZlOGQwZjYyM2NhMjlkOTg0ZWMwOWQyYjU2NmU5YWIxMGFlMDI0","commit":{"author":{"name":"R1kk3r","email":"R1kk3r@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"committer":{"name":"Jason White","email":"jasonwhite@users.noreply.github.com","date":"2018-02-01T00:16:11Z"},"message":"Remove the default \"null\" input send during GET request (#691)\n\n* Remove the default \"null\" input send during GET request\r\n\r\n* Remove the 'null' value from all tests","tree":{"sha":"3be58227503a8829339306ffa910c5c45e3f4676","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3be58227503a8829339306ffa910c5c45e3f4676"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cbfe8d0f623ca29d984ec09d2b566e9ab10ae024","html_url":"…","comments_url":"…","author":{"login":"R1kk3r","id":8941245,"node_id":"MDQ6VXNlcjg5NDEyNDU=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/R1kk3r","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jasonwhite","id":865541,"node_id":"MDQ6VXNlcjg2NTU0MQ==","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/jasonwhite","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5c9c2f75239ae07ef590baa2c2ea28046b8c9acc","html_url":"…"}],"stats":{"total":1862,"additions":931,"deletions":931},"files":[{"sha":"192f40829ac63766fee2314cd17187b5a50efeaf","filename":"github/tests/ReplayData/Repository.testGetArchiveLink.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8c72d6a1f5868a267fc1fba8a9e74d066d3c8aa5","filename":"github/tests/ReplayData/Repository.testGetBranch.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"61081debc45b1da1b800205ac5975fe9e0fce374","filename":"github/tests/ReplayData/Repository.testGetComments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e4cbdbf65991fcf87618e4a5a8b78070209c18fd","filename":"github/tests/ReplayData/Repository.testGetCommits.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"021e48e2fc989c8854dc93dbda11417eebf21e1b","filename":"github/tests/ReplayData/Repository.testGetCommitsWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"60310e7107137d52be94a248fba7c32fb041b457","filename":"github/tests/ReplayData/Repository.testGetCommitsWithAuthor.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"58bf8b5a4fd34179d311af9b8d64337ffe63323b","filename":"github/tests/ReplayData/Repository.testGetCommitsWithSinceUntil.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"d962deb95ecdfea2d14c46c11b4011d3bfee2979","filename":"github/tests/ReplayData/Repository.testGetContentDir.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"61afbc549451482c3f782abc75f6ca3c4f4d70ff","filename":"github/tests/ReplayData/Repository.testGetContents.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f5d5115b99b7ef8607973b6c0ac7aa898b539c4d","filename":"github/tests/ReplayData/Repository.testGetContentsWithRef.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f32e2d40d3e5322bd79ff429277ba0658c5cc712","filename":"github/tests/ReplayData/Repository.testGetContributors.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"39a8a5b9d639531e6c7279590ac7f7ae37ccf198","filename":"github/tests/ReplayData/Repository.testGetDownloads.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3cd6c4b888d630dc9cfe24ee69c97288c99d61a5","filename":"github/tests/ReplayData/Repository.testGetEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a674ffdecb2f408a07f28c32520614694fe5dce5","filename":"github/tests/ReplayData/Repository.testGetForks.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d99af0ff1fd27449fe2ff045f79cd8eca51ff3d0","filename":"github/tests/ReplayData/Repository.testGetGitRef.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d99af0ff1fd27449fe2ff045f79cd8eca51ff3d0","filename":"github/tests/ReplayData/Repository.testGetGitRefWithIssue102Reverted.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ed8e9b6b834de58b30fe42aa2a3636983e14ae54","filename":"github/tests/ReplayData/Repository.testGetGitRefs.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e0378202f00bee143cc61dfea76f8ce17e93dd5b","filename":"github/tests/ReplayData/Repository.testGetGitTreeWithRecursive.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3ee37ebea384b2838e5dee3020c5231a260e7ff9","filename":"github/tests/ReplayData/Repository.testGetHooks.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"93e10fac45d449060416c517aba2ddac70aea67b","filename":"github/tests/ReplayData/Repository.testGetIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9808ca104aad9b0ce6a1758a1e8fb4092bb4ead9","filename":"github/tests/ReplayData/Repository.testGetIssuesComments.txt","status":"modified","additions":6,"deletions":6,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"cd4f8d4742dda83c0a90e51173ba322f510429a2","filename":"github/tests/ReplayData/Repository.testGetIssuesEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"87f5a4874b488564d0f91297ee7da78c20250b82","filename":"github/tests/ReplayData/Repository.testGetIssuesWithArguments.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f1ece6cf69e0505895524be110ddd78466add205","filename":"github/tests/ReplayData/Repository.testGetIssuesWithWildcards.txt","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7ad28c72b116c91bff1c20b5c1d08d48a396f1c5","filename":"github/tests/ReplayData/Repository.testGetKeys.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"203d3f83b031516411480a1d6273495dfe27b7ef","filename":"github/tests/ReplayData/Repository.testGetLabel.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"b5a7d836112451221ab6bcb71ccc85e9e0222199","filename":"github/tests/ReplayData/Repository.testGetLabels.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bce7fe97461e86f7ca73eea015eb89e2a35db7a7","filename":"github/tests/ReplayData/Repository.testGetLanguages.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"347dfbd76ea4471e15b3d47de22d7195aa29c6eb","filename":"github/tests/ReplayData/Repository.testGetMilestones.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"f1dc001c4cd5ac0397c62b3ccd7d2032e137056c","filename":"github/tests/ReplayData/Repository.testGetMilestonesWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"88c05bc9cd387a39f7f2df0deb371577372ef4ee","filename":"github/tests/ReplayData/Repository.testGetNetworkEvents.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"dbef9adfbec49c2535e48a183757a3021b7e5b0b","filename":"github/tests/ReplayData/Repository.testGetPulls.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c30d78a2fe590e6844140dd6a5300c8cea539478","filename":"github/tests/ReplayData/Repository.testGetPullsComments.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"002ba9ba6c0892ff4f3bd5d1bd39cb44b48e3b75","filename":"github/tests/ReplayData/Repository.testGetPullsWithArguments.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"522bd059b175f8a8052e36b330c0978630e55ed4","filename":"github/tests/ReplayData/Repository.testGetStargazers.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4b05643d7e5850eaec524415646c23b26dccbeac","filename":"github/tests/ReplayData/Repository.testGetStargazersWithDates.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a7c605f39239a87c4eb7df0f60ad52bfe1a8ea61","filename":"github/tests/ReplayData/Repository.testGetSubscribers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"169302b59004679b8b805f4f7dbb8b4398d59ded","filename":"github/tests/ReplayData/Repository.testGetTeams.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c84fc45599bdfe6907e3384a5b20e878a4fc8464","filename":"github/tests/ReplayData/Repository.testGetWatchers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1f662578248c13a1f438c544924875ea43d5d2ad","filename":"github/tests/ReplayData/Repository.testLegacySearchIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"2daad7e48ea77e12ea1f20c9375ea384c904ead6","filename":"github/tests/ReplayData/Repository.testProtectBranch.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"512ac0b9e9c8a27a341a28c0a323fa26c90b1d47","filename":"github/tests/ReplayData/Repository.testRemoveBranchProtection.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d10d19052ee973d408b1087bd578cdd30373fe3b","filename":"github/tests/ReplayData/Repository.testSearchIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"16443f4437fbc723a686dd621cf93206f3e41d8b","filename":"github/tests/ReplayData/Repository.testStatisticsAfterCaching.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"9eb0339a81f6fd814caeb8a2109c82e292cb712c","filename":"github/tests/ReplayData/Repository.testStatisticsBeforeCaching.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6c802c1dabd50f95a8978374ef7290e0a5c44298","filename":"github/tests/ReplayData/Repository.testUpdateFile.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"1f0ed43e9ea5b6b80e1b4baf28683ef0a3ce8bea","filename":"github/tests/ReplayData/RepositoryKey.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc1d79f458f41b8f3a5ea69d96eca83536acd043","filename":"github/tests/ReplayData/RepositoryKey.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fdcaf61f7527a7d73a677565860ada027807ad0b","filename":"github/tests/ReplayData/Search.testGetPageOnSearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"91fc882e09910036d0270fcef3cc9c71d73b40b9","filename":"github/tests/ReplayData/Search.testPaginateSearchUsers.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"e8cf2876687683e8bf1722ec08589640a441139c","filename":"github/tests/ReplayData/Search.testSearchCode.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"61b53195794a09a13cdfc2df415fc6c4a5082495","filename":"github/tests/ReplayData/Search.testSearchIssues.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"ec81881219553486639573687032bb3e21a3fcd8","filename":"github/tests/ReplayData/Search.testSearchRepos.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…"},{"sha":"9d9b7540b34283d9b82694fe8c32d5e44baed4a2","filename":"github/tests/ReplayData/Search.testSearchUsers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ae28e1da0be36409eea816dc2e41c95df5bc95fb","filename":"github/tests/ReplayData/Search.testUrlquotingOfQualifiers.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d4ad3900786253c7289b08b755b0a777f2b4824d","filename":"github/tests/ReplayData/Search.testUrlquotingOfQuery.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4028ca293790edfb8813936cf6b380dae48cff49","filename":"github/tests/ReplayData/SpecificExceptions.testBadCredentials.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"d60400a963591d661438ddca823dfac829c11b12","filename":"github/tests/ReplayData/SpecificExceptions.testBadUserAgent.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6e91d784a80c862e95d7f225449321c0b0fa5a25","filename":"github/tests/ReplayData/SpecificExceptions.testRateLimitExceeded.txt","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"fbb8a31e31501b14d2d34b0313faa1e5db5e8501","filename":"github/tests/ReplayData/SpecificExceptions.testUnknownObject.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"07e9b678fcf3a156709f88ab788e8e683cb1a22f","filename":"github/tests/ReplayData/Status.testGetLastMessage.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"076c3dbd1e4d66a5deea9244ac9d84ccc3db1b31","filename":"github/tests/ReplayData/Status.testGetMessages.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"faa3da5a3dd3601a8e99cc997aa0aa4598ba8008","filename":"github/tests/ReplayData/Status.testGetStatus.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"def9a1f84c05a1c5301d40f16a133387e7886356","filename":"github/tests/ReplayData/Tag.setUp.txt","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a6c80164cf5f1e21759cb4c6f8a00b61c30d9e15","filename":"github/tests/ReplayData/Team.setUp.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c95d5c1c6730a46fa05a0c6320014637252926e3","filename":"github/tests/ReplayData/Team.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6c0fe50e5634c5f0a4f3b8f757210bea1b40a133","filename":"github/tests/ReplayData/Team.testMembers.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"4c11b29ba65eb25e26c62203fc18b82fd5ae0283","filename":"github/tests/ReplayData/Team.testRepoPermission.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"a223d0215b2e4f0092b83b757cace5392ea4764b","filename":"github/tests/ReplayData/Team.testRepos.txt","status":"modified","additions":9,"deletions":9,"changes":18,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"c4ef7ba042505264b1b7953d41e0395026f4a2de","filename":"github/tests/ReplayData/UserKey.setUp.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bea02385c0e9301a825da723d42e71478191bdf7","filename":"github/tests/ReplayData/UserKey.testDelete.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt new file mode 100644 index 0000000000..427aea60d6 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversed.txt @@ -0,0 +1,164 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22: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/"1220f807b4367b68e4a5fb01373834797a3df4f2c2bc194662db4ab54cb6bc87"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '25'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E891:2188F0:3257CB4:2CB9A02:6962608B')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:04 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/"bc4c4214971689cf198e10356181fb4815304f55cd9ad1eebcb405885fc56986"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4974'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '26'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FC00:2CAD27:34C75BB:2F390FD:6962608B')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…"}]},{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}]}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:04 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/"1220f807b4367b68e4a5fb01373834797a3df4f2c2bc194662db4ab54cb6bc87"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4973'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '27'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F674:2150B7:309C4B4:2B039C1:6962608C')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:05 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4972'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '28'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EB61:27813:31E993E:2C7A6D3:6962608C')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:05 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/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4971'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '29'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F64D:2188F0:325858F:2CBA196:6962608D')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:05 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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4970'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '30'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F7E4:3CF7C1:3155305:2BBF06E:6962608D')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:06 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4969'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '31'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F733:2D20B4:3284F27:2CCB047:6962608D')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:06 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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4968'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '32'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EB27:3B9D0A:3292031:2CFA670:6962608E')] +{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"…","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"…","keys_url":"…","collaborators_url":"…","teams_url":"…","hooks_url":"…","issue_events_url":"…","events_url":"…","assignees_url":"…","branches_url":"…","tags_url":"…","blobs_url":"…","git_tags_url":"…","git_refs_url":"…","trees_url":"…","statuses_url":"…","languages_url":"…","stargazers_url":"…","contributors_url":"…","subscribers_url":"…","subscription_url":"…","commits_url":"…","git_commits_url":"…","comments_url":"…","issue_comment_url":"…","contents_url":"…","compare_url":"…","merges_url":"…","archive_url":"…","downloads_url":"…","issues_url":"…","pulls_url":"…","milestones_url":"…","notifications_url":"…","labels_url":"…","releases_url":"…","deployments_url":"…","created_at":"2012-02-25T12:53:47Z","updated_at":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28:45Z","git_url":"…","ssh_url":"…","clone_url":"…","svn_url":"…","homepage":"https://pygithub.readthedocs.io/","size":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:06 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/"1220f807b4367b68e4a5fb01373834797a3df4f2c2bc194662db4ab54cb6bc87"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4967'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '33'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FA82:2F3E6F:32CFE55:2D35603:6962608E')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:07 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/"bc4c4214971689cf198e10356181fb4815304f55cd9ad1eebcb405885fc56986"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4966'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '34'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EC73:2C869E:31759DC:2BE9F8A:6962608F')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…"}]},{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}]}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:08 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/"1220f807b4367b68e4a5fb01373834797a3df4f2c2bc194662db4ab54cb6bc87"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4965'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '35'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FA22:3B9D0A:32926F6:2CFAC27:6962608F')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:08 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4964'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '36'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EE31:1E66CC:33000AE:2D44782:69626090')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:08 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/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4963'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '37'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E74C:224637:3355F94:2DC6404:69626090')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:09 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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4962'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '38'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E738:2EFDAC:2F42772:29F51D6:69626091')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:09 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4961'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '39'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F3FE:456F1:33D6FB3:2E3E63D:69626091')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt new file mode 100644 index 0000000000..d5261b9cc0 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesReversedWithPerPage.txt @@ -0,0 +1,164 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:10 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/"d6cc9f2b01cadb135712356eaaec4706d378bef67551a0d22ce62fe8dad8fab9"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4960'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '40'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F9E9:1E66CC:33009F8:2D44F9E:69626091')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:19e1c50...PyGithub:4bf07a2","diff_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.patch","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a"}]},{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -197,6 +197,7 @@ def __init__(\n self.__firstParams: dict[str, Any] = firstParams or {}\n self.__nextUrl = firstUrl\n self.__nextParams: dict[str, Any] = firstParams or {}\n+ self.__lastUrl: str | None = None\n self.__headers = headers\n self.__list_item = list_item\n self.__total_count_item = total_count_item\n@@ -283,19 +284,20 @@ def reversed(self) -> PaginatedList[T]:\n self.__firstParams,\n headers=self.__headers,\n list_item=self.__list_item,\n+ total_count_item=self.__total_count_item,\n attributesTransformer=self._attributesTransformer,\n graphql_query=self.__graphql_query,\n graphql_variables=self.__graphql_variables,\n )\n- r.__reverse()\n+ r.__reverse(self.__lastUrl)\n return r\n \n- def __reverse(self) -> None:\n+ def __reverse(self, last_url: str | None) -> None:\n self._reversed = True\n if self.is_rest:\n- lastUrl = self._getLastPageUrl()\n- if lastUrl:\n- self.__nextUrl = lastUrl\n+ self.__lastUrl = self._getLastPageUrl() if last_url is None else last_url\n+ if self.__lastUrl:\n+ self.__nextUrl = self.__lastUrl\n if self.__nextParams:\n # #2929: remove all parameters from self.__nextParams contained in self.__nextUrl\n self.__nextParams = {\n@@ -364,6 +366,8 @@ def _getPage(self, data: Any, headers: dict[str, str | int] | None) -> list[T]:\n self.__nextUrl = links[\"prev\"]\n elif \"next\" in links:\n self.__nextUrl = links[\"next\"]\n+ if \"last\" in links:\n+ self.__lastUrl = links[\"last\"]\n self.__nextParams = {}\n if self.__list_item in data:\n self.__totalCount = data.get(self.__total_count_item)"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -2400,7 +2400,7 @@ def get_commit(self, sha: str) -> Commit:\n :rtype: :class:`github.Commit.Commit`\n \"\"\"\n assert isinstance(sha, str), sha\n- sha = urllib.parse.quote(sha, safe=\"\")\n+ sha = urllib.parse.quote(sha)\n url = f\"{self.url}/commits/{sha}\"\n return github.Commit.Commit(self._requester, url=url)\n "},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -434,6 +434,7 @@ def __init__(\n self.rate_limiting = (-1, -1)\n self.rate_limiting_resettime = 0\n self.FIX_REPO_GET_GIT_REF = True\n+ assert isinstance(per_page, int), per_page\n self.per_page = per_page\n \n self.oauth_scopes = None"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -31,6 +31,8 @@\n from typing import Any\n from unittest import mock\n \n+from GithubObject import CompletableGithubObjectWithPaginatedProperty\n+\n import github.Repository\n import github.RepositoryDiscussion\n \n@@ -241,6 +243,27 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n \n+ def testSetPerPageIfNotSet(self):\n+ set_per_page = CompletableGithubObjectWithPaginatedProperty.set_per_page_if_not_set\n+ self.assertIsNone(set_per_page(None, 123))\n+ self.assertEqual(set_per_page(\"/path/to/resource\", 123), \"/path/to/resource?per_page=123\")\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource\", 123), \"https://host/path/to/resource?per_page=123\"\n+ )\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource?param=one¶m=2\", 123),\n+ \"https://host/path/to/resource?param=one¶m=2&per_page=123\",\n+ )\n+\n+ for url in [\n+ \"/path/to/resource\",\n+ \"https://host/path/to/resource\",\n+ \"https://host/path/to/resource?param=one¶m=2\",\n+ ]:\n+ # add per_page to url\n+ url = f\"{url}{'&' if '?' in url else '?'}per_page=42\"\n+ self.assertEqual(set_per_page(url, 123), url)\n+\n \n class TestingClass(gho.NonCompletableGithubObject):\n def _initAttributes(self) -> None:"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -377,6 +377,117 @@ def testCustomPerPageReversedIteration(self):\n [comment.created_at for comment in comments],\n )\n \n+ def testCustomPerPageWithRepoCommitFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ # TODO: test with pull request that hase more than per_page commits and more than 300 files\n+ # this paginated list has pagination headers, which are used to create the inner commit instances\n+ # however, they refer to the commit pagination\n+ # files of individual commits use pagination, but the first page does not have pagination headers\n+ # if the individual commits have files at all (below example they don't)\n+ # the commits: /repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 (no files property)\n+ # the files of one commit: /repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ reversed_files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ reversed_files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n def testNoFirstPage(self):\n self.assertFalse(next(iter(self.list), None))\n "},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/\"76261824024a1ac26b4a2a5d565b55ad9ff93f7e450281cfee3a8f33891f1cae\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4821'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '179'), ('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', 'F457:3064F9:3CB5DCA:3849B9B:68CB099B')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4820'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '180'), ('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', 'FAE8:2F13CF:3EC6F44:3A3DC46:68CB099B')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4819'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '181'), ('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', 'F758:2F13CF:3EC70E8:3A3DDDE:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4818'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '182'), ('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', 'F1C5:2B329B:3EF50E9:3A6F71F:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,54 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"cd9016eee287aa6a79b87b036fc978123a258857616e546928a04b1c529cee7a\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4999'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '1'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E942:72AFB:439F857:3EEF85F:68CB0F65')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F954:2B329B:406E958:3BC0E70:68CB0F66')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1758141814'), ('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', 'F055:2DE4CB:4205152:3D336BB:68CB0F66')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1758141814'), ('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', 'EEFD:3064F9:3E222F4:398E891:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F0CE:3217F1:4364F74:3EF2726:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,21 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4805'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '195'), ('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', 'E8DA:2AC3C7:3FF4FDB:3B5EAD7:68CB0C02')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4804'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '196'), ('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', 'F023:2DE4CB:4115DC1:3C5C45B:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4803'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '197'), ('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', 'F28B:1882E2:4064367:3BCA1A4:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4802'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '198'), ('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', 'F8E7:18B612:2AA2F2C:274A775:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:08 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4801'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '199'), ('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', 'EBFE:2B329B:3F91647:3AFB136:68CB0C04')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F3AF:2F13CF:89DF3B3:80C53F8:68CC1152')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F283:3701AC:8AB5A2D:81E0074:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F781:CFEED:31D9E5E:2E996AE:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '21'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E8A4:3945A0:1D9600A:1B96D95:68CC1154')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1758204708'), ('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', 'EC60:3945A0:1D9630C:1B9705B:68CC1154')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F025:30FA66:875AEE8:7E47B98:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EF77:4B476:2F35E91:2C0FAD5:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:10 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/"ce86232e94f9ff861e4fe2e2aa8b1869a7c76ae5ad018694532a0c50fcde9863"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4959'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '41'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE14:2EFDAC:2F42D44:29F5706:69626092')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:19e1c50...PyGithub:4bf07a2","diff_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.patch","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}]}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:11 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/"d6cc9f2b01cadb135712356eaaec4706d378bef67551a0d22ce62fe8dad8fab9"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4958'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '42'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E837:2B714A:32E78C4:2D6B889:69626093')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:19e1c50...PyGithub:4bf07a2","diff_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.patch","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a"}]},{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -197,6 +197,7 @@ def __init__(\n self.__firstParams: dict[str, Any] = firstParams or {}\n self.__nextUrl = firstUrl\n self.__nextParams: dict[str, Any] = firstParams or {}\n+ self.__lastUrl: str | None = None\n self.__headers = headers\n self.__list_item = list_item\n self.__total_count_item = total_count_item\n@@ -283,19 +284,20 @@ def reversed(self) -> PaginatedList[T]:\n self.__firstParams,\n headers=self.__headers,\n list_item=self.__list_item,\n+ total_count_item=self.__total_count_item,\n attributesTransformer=self._attributesTransformer,\n graphql_query=self.__graphql_query,\n graphql_variables=self.__graphql_variables,\n )\n- r.__reverse()\n+ r.__reverse(self.__lastUrl)\n return r\n \n- def __reverse(self) -> None:\n+ def __reverse(self, last_url: str | None) -> None:\n self._reversed = True\n if self.is_rest:\n- lastUrl = self._getLastPageUrl()\n- if lastUrl:\n- self.__nextUrl = lastUrl\n+ self.__lastUrl = self._getLastPageUrl() if last_url is None else last_url\n+ if self.__lastUrl:\n+ self.__nextUrl = self.__lastUrl\n if self.__nextParams:\n # #2929: remove all parameters from self.__nextParams contained in self.__nextUrl\n self.__nextParams = {\n@@ -364,6 +366,8 @@ def _getPage(self, data: Any, headers: dict[str, str | int] | None) -> list[T]:\n self.__nextUrl = links[\"prev\"]\n elif \"next\" in links:\n self.__nextUrl = links[\"next\"]\n+ if \"last\" in links:\n+ self.__lastUrl = links[\"last\"]\n self.__nextParams = {}\n if self.__list_item in data:\n self.__totalCount = data.get(self.__total_count_item)"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -2400,7 +2400,7 @@ def get_commit(self, sha: str) -> Commit:\n :rtype: :class:`github.Commit.Commit`\n \"\"\"\n assert isinstance(sha, str), sha\n- sha = urllib.parse.quote(sha, safe=\"\")\n+ sha = urllib.parse.quote(sha)\n url = f\"{self.url}/commits/{sha}\"\n return github.Commit.Commit(self._requester, url=url)\n "},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -434,6 +434,7 @@ def __init__(\n self.rate_limiting = (-1, -1)\n self.rate_limiting_resettime = 0\n self.FIX_REPO_GET_GIT_REF = True\n+ assert isinstance(per_page, int), per_page\n self.per_page = per_page\n \n self.oauth_scopes = None"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -31,6 +31,8 @@\n from typing import Any\n from unittest import mock\n \n+from GithubObject import CompletableGithubObjectWithPaginatedProperty\n+\n import github.Repository\n import github.RepositoryDiscussion\n \n@@ -241,6 +243,27 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n \n+ def testSetPerPageIfNotSet(self):\n+ set_per_page = CompletableGithubObjectWithPaginatedProperty.set_per_page_if_not_set\n+ self.assertIsNone(set_per_page(None, 123))\n+ self.assertEqual(set_per_page(\"/path/to/resource\", 123), \"/path/to/resource?per_page=123\")\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource\", 123), \"https://host/path/to/resource?per_page=123\"\n+ )\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource?param=one¶m=2\", 123),\n+ \"https://host/path/to/resource?param=one¶m=2&per_page=123\",\n+ )\n+\n+ for url in [\n+ \"/path/to/resource\",\n+ \"https://host/path/to/resource\",\n+ \"https://host/path/to/resource?param=one¶m=2\",\n+ ]:\n+ # add per_page to url\n+ url = f\"{url}{'&' if '?' in url else '?'}per_page=42\"\n+ self.assertEqual(set_per_page(url, 123), url)\n+\n \n class TestingClass(gho.NonCompletableGithubObject):\n def _initAttributes(self) -> None:"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -377,6 +377,117 @@ def testCustomPerPageReversedIteration(self):\n [comment.created_at for comment in comments],\n )\n \n+ def testCustomPerPageWithRepoCommitFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ # TODO: test with pull request that hase more than per_page commits and more than 300 files\n+ # this paginated list has pagination headers, which are used to create the inner commit instances\n+ # however, they refer to the commit pagination\n+ # files of individual commits use pagination, but the first page does not have pagination headers\n+ # if the individual commits have files at all (below example they don't)\n+ # the commits: /repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 (no files property)\n+ # the files of one commit: /repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ reversed_files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ reversed_files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n def testNoFirstPage(self):\n self.assertFalse(next(iter(self.list), None))\n "},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/\"76261824024a1ac26b4a2a5d565b55ad9ff93f7e450281cfee3a8f33891f1cae\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4821'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '179'), ('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', 'F457:3064F9:3CB5DCA:3849B9B:68CB099B')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4820'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '180'), ('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', 'FAE8:2F13CF:3EC6F44:3A3DC46:68CB099B')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4819'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '181'), ('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', 'F758:2F13CF:3EC70E8:3A3DDDE:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4818'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '182'), ('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', 'F1C5:2B329B:3EF50E9:3A6F71F:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,54 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"cd9016eee287aa6a79b87b036fc978123a258857616e546928a04b1c529cee7a\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4999'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '1'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E942:72AFB:439F857:3EEF85F:68CB0F65')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F954:2B329B:406E958:3BC0E70:68CB0F66')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1758141814'), ('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', 'F055:2DE4CB:4205152:3D336BB:68CB0F66')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1758141814'), ('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', 'EEFD:3064F9:3E222F4:398E891:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F0CE:3217F1:4364F74:3EF2726:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,21 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4805'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '195'), ('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', 'E8DA:2AC3C7:3FF4FDB:3B5EAD7:68CB0C02')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4804'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '196'), ('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', 'F023:2DE4CB:4115DC1:3C5C45B:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4803'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '197'), ('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', 'F28B:1882E2:4064367:3BCA1A4:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4802'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '198'), ('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', 'F8E7:18B612:2AA2F2C:274A775:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:08 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4801'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '199'), ('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', 'EBFE:2B329B:3F91647:3AFB136:68CB0C04')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F3AF:2F13CF:89DF3B3:80C53F8:68CC1152')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F283:3701AC:8AB5A2D:81E0074:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F781:CFEED:31D9E5E:2E996AE:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '21'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E8A4:3945A0:1D9600A:1B96D95:68CC1154')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1758204708'), ('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', 'EC60:3945A0:1D9630C:1B9705B:68CC1154')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F025:30FA66:875AEE8:7E47B98:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EF77:4B476:2F35E91:2C0FAD5:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:11 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4957'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '43'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF78:3A95B:36D78AE:315C140:69626093')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:12 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/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4956'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '44'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F0B6:2150B7:309EBC8:2B05B2E:69626094')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -2400,11 +2400,8 @@ def get_commit(self, sha: str) -> Commit:\n :rtype: :class:`github.Commit.Commit`\n \"\"\"\n assert isinstance(sha, str), sha\n- sha = urllib.parse.quote(sha, safe=\"\")\n+ sha = urllib.parse.quote(sha)\n url = f\"{self.url}/commits/{sha}\"\n- # the files property uses pagination, set per-page if it is not the default value\n- if self._requester.per_page != Consts.DEFAULT_PER_PAGE:\n- url = f\"{url}?per_page={self._requester.per_page}\"\n return github.Commit.Commit(self._requester, url=url)\n \n def get_commits(\n@@ -2449,14 +2446,7 @@ def get_commits(\n url_parameters[\"author\"] = author.login\n else:\n url_parameters[\"author\"] = author\n- transformer = PaginatedList.add_per_page_to_url_transformer(self._requester.per_page)\n- return PaginatedList(\n- github.Commit.Commit,\n- self._requester,\n- f\"{self.url}/commits\",\n- url_parameters,\n- attributesTransformer=transformer,\n- )\n+ return PaginatedList(github.Commit.Commit, self._requester, f\"{self.url}/commits\", url_parameters)\n \n def get_contents(self, path: str, ref: Opt[str] = NotSet) -> list[ContentFile] | ContentFile:\n \"\"\""},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -31,6 +31,8 @@\n from typing import Any\n from unittest import mock\n \n+from GithubObject import CompletableGithubObjectWithPaginatedProperty\n+\n import github.Repository\n import github.RepositoryDiscussion\n \n@@ -241,6 +243,27 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n \n+ def testSetPerPageIfNotSet(self):\n+ set_per_page = CompletableGithubObjectWithPaginatedProperty.set_per_page_if_not_set\n+ self.assertIsNone(set_per_page(None, 123))\n+ self.assertEqual(set_per_page(\"/path/to/resource\", 123), \"/path/to/resource?per_page=123\")\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource\", 123), \"https://host/path/to/resource?per_page=123\"\n+ )\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource?param=one¶m=2\", 123),\n+ \"https://host/path/to/resource?param=one¶m=2&per_page=123\",\n+ )\n+\n+ for url in [\n+ \"/path/to/resource\",\n+ \"https://host/path/to/resource\",\n+ \"https://host/path/to/resource?param=one¶m=2\",\n+ ]:\n+ # add per_page to url\n+ url = f\"{url}{'&' if '?' in url else '?'}per_page=42\"\n+ self.assertEqual(set_per_page(url, 123), url)\n+\n \n class TestingClass(gho.NonCompletableGithubObject):\n def _initAttributes(self) -> None:"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:12 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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4955'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '45'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FEA9:3A95B:36D7CB2:315C4F0:69626094')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -435,26 +435,6 @@ def get_page(self, page: int) -> list[T]:\n data = data[self.__list_item]\n return [self.__contentClass(self.__requester, headers, self._transformAttributes(element)) for element in data]\n \n- # Some `GithubObject` classes contain a property that is subject to pagination, e.g. Commit.files.\n- # Created from a `get_*s` method that return a `PaginatedList` of GithubObject instances, that property will\n- # be empty, and the instances are incomplete `CompletableGithubObject`s. Getting the paginated property\n- # will first complete the `GithubObject`.\n- # The url used for completing the object has to contain the `per_page` parameter.\n- # This attribute transformer can be used to inject the `per_page` parameter into the objects\n- # while iterating over the `PaginatedList`.\n- @staticmethod\n- def add_per_page_to_url_transformer(per_page: int) -> Callable[[dict[str, Any]], dict[str, Any]]:\n- def func(attributes: dict[str, Any]) -> dict[str, Any]:\n- if per_page != Consts.DEFAULT_PER_PAGE and \"url\" in attributes:\n- url = attributes[\"url\"]\n- params = Requester.get_parameters_of_url(url)\n- params[\"per_page\"] = [str(per_page)]\n- url = Requester.add_parameters_to_url(url, params)\n- attributes[\"url\"] = url\n- return attributes\n-\n- return func\n-\n @classmethod\n def override_attributes(cls, overrides: dict[str, Any]) -> Callable[[dict[str, Any]], dict[str, Any]]:\n def attributes_transformer(element: dict[str, Any]) -> dict[str, Any]:"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequest.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -708,17 +708,7 @@ def get_commits(self) -> PaginatedList[Commit]:\n \"\"\"\n :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/commits `_\n \"\"\"\n- # issue #3372: Commits created here are incomplete. Getting their files will first complete the object before\n- # files are being fetched. That completing request has to contain the per-page for the first page of files.\n- # Set per-page here if it is not the default.\n- transformer = PaginatedList.add_per_page_to_url_transformer(self._requester.per_page)\n- return PaginatedList(\n- github.Commit.Commit,\n- self._requester,\n- f\"{self.url}/commits\",\n- None,\n- attributesTransformer=transformer,\n- )\n+ return PaginatedList(github.Commit.Commit, self._requester, f\"{self.url}/commits\", None)\n \n def get_files(self) -> PaginatedList[File]:\n \"\"\""}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:12 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4954'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '46'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F4EA:2188F0:325ACDE:2CBC327:69626094')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22: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/"f16f9c440546c43b294983ac61e8a77d175cded8b7a1950de1bfc5d0add0c5b8"'), ('Last-Modified', 'Fri, 09 Jan 2026 12:46:18 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4953'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '47'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EF6E:2CAD27:34CAAB4:2F3BFB6:69626095')] +{"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":"2026-01-09T12:46:18Z","pushed_at":"2026-01-07T11:28: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":19658,"stargazers_count":7638,"watchers_count":7638,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1871,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1871,"open_issues":365,"watchers":7638,"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","user_view_type":"public","site_admin":false},"network_count":1871,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22: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/"d6cc9f2b01cadb135712356eaaec4706d378bef67551a0d22ce62fe8dad8fab9"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4952'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '48'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E951:2188F0:325B0F2:2CBC6AE:69626095')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:19e1c50...PyGithub:4bf07a2","diff_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.patch","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a"}]},{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -197,6 +197,7 @@ def __init__(\n self.__firstParams: dict[str, Any] = firstParams or {}\n self.__nextUrl = firstUrl\n self.__nextParams: dict[str, Any] = firstParams or {}\n+ self.__lastUrl: str | None = None\n self.__headers = headers\n self.__list_item = list_item\n self.__total_count_item = total_count_item\n@@ -283,19 +284,20 @@ def reversed(self) -> PaginatedList[T]:\n self.__firstParams,\n headers=self.__headers,\n list_item=self.__list_item,\n+ total_count_item=self.__total_count_item,\n attributesTransformer=self._attributesTransformer,\n graphql_query=self.__graphql_query,\n graphql_variables=self.__graphql_variables,\n )\n- r.__reverse()\n+ r.__reverse(self.__lastUrl)\n return r\n \n- def __reverse(self) -> None:\n+ def __reverse(self, last_url: str | None) -> None:\n self._reversed = True\n if self.is_rest:\n- lastUrl = self._getLastPageUrl()\n- if lastUrl:\n- self.__nextUrl = lastUrl\n+ self.__lastUrl = self._getLastPageUrl() if last_url is None else last_url\n+ if self.__lastUrl:\n+ self.__nextUrl = self.__lastUrl\n if self.__nextParams:\n # #2929: remove all parameters from self.__nextParams contained in self.__nextUrl\n self.__nextParams = {\n@@ -364,6 +366,8 @@ def _getPage(self, data: Any, headers: dict[str, str | int] | None) -> list[T]:\n self.__nextUrl = links[\"prev\"]\n elif \"next\" in links:\n self.__nextUrl = links[\"next\"]\n+ if \"last\" in links:\n+ self.__lastUrl = links[\"last\"]\n self.__nextParams = {}\n if self.__list_item in data:\n self.__totalCount = data.get(self.__total_count_item)"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -2400,7 +2400,7 @@ def get_commit(self, sha: str) -> Commit:\n :rtype: :class:`github.Commit.Commit`\n \"\"\"\n assert isinstance(sha, str), sha\n- sha = urllib.parse.quote(sha, safe=\"\")\n+ sha = urllib.parse.quote(sha)\n url = f\"{self.url}/commits/{sha}\"\n return github.Commit.Commit(self._requester, url=url)\n "},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -434,6 +434,7 @@ def __init__(\n self.rate_limiting = (-1, -1)\n self.rate_limiting_resettime = 0\n self.FIX_REPO_GET_GIT_REF = True\n+ assert isinstance(per_page, int), per_page\n self.per_page = per_page\n \n self.oauth_scopes = None"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -31,6 +31,8 @@\n from typing import Any\n from unittest import mock\n \n+from GithubObject import CompletableGithubObjectWithPaginatedProperty\n+\n import github.Repository\n import github.RepositoryDiscussion\n \n@@ -241,6 +243,27 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n \n+ def testSetPerPageIfNotSet(self):\n+ set_per_page = CompletableGithubObjectWithPaginatedProperty.set_per_page_if_not_set\n+ self.assertIsNone(set_per_page(None, 123))\n+ self.assertEqual(set_per_page(\"/path/to/resource\", 123), \"/path/to/resource?per_page=123\")\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource\", 123), \"https://host/path/to/resource?per_page=123\"\n+ )\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource?param=one¶m=2\", 123),\n+ \"https://host/path/to/resource?param=one¶m=2&per_page=123\",\n+ )\n+\n+ for url in [\n+ \"/path/to/resource\",\n+ \"https://host/path/to/resource\",\n+ \"https://host/path/to/resource?param=one¶m=2\",\n+ ]:\n+ # add per_page to url\n+ url = f\"{url}{'&' if '?' in url else '?'}per_page=42\"\n+ self.assertEqual(set_per_page(url, 123), url)\n+\n \n class TestingClass(gho.NonCompletableGithubObject):\n def _initAttributes(self) -> None:"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -377,6 +377,117 @@ def testCustomPerPageReversedIteration(self):\n [comment.created_at for comment in comments],\n )\n \n+ def testCustomPerPageWithRepoCommitFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ # TODO: test with pull request that hase more than per_page commits and more than 300 files\n+ # this paginated list has pagination headers, which are used to create the inner commit instances\n+ # however, they refer to the commit pagination\n+ # files of individual commits use pagination, but the first page does not have pagination headers\n+ # if the individual commits have files at all (below example they don't)\n+ # the commits: /repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 (no files property)\n+ # the files of one commit: /repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ reversed_files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ reversed_files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n def testNoFirstPage(self):\n self.assertFalse(next(iter(self.list), None))\n "},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/\"76261824024a1ac26b4a2a5d565b55ad9ff93f7e450281cfee3a8f33891f1cae\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4821'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '179'), ('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', 'F457:3064F9:3CB5DCA:3849B9B:68CB099B')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4820'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '180'), ('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', 'FAE8:2F13CF:3EC6F44:3A3DC46:68CB099B')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4819'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '181'), ('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', 'F758:2F13CF:3EC70E8:3A3DDDE:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4818'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '182'), ('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', 'F1C5:2B329B:3EF50E9:3A6F71F:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,54 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"cd9016eee287aa6a79b87b036fc978123a258857616e546928a04b1c529cee7a\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4999'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '1'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E942:72AFB:439F857:3EEF85F:68CB0F65')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F954:2B329B:406E958:3BC0E70:68CB0F66')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1758141814'), ('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', 'F055:2DE4CB:4205152:3D336BB:68CB0F66')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1758141814'), ('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', 'EEFD:3064F9:3E222F4:398E891:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F0CE:3217F1:4364F74:3EF2726:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,21 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4805'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '195'), ('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', 'E8DA:2AC3C7:3FF4FDB:3B5EAD7:68CB0C02')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4804'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '196'), ('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', 'F023:2DE4CB:4115DC1:3C5C45B:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4803'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '197'), ('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', 'F28B:1882E2:4064367:3BCA1A4:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4802'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '198'), ('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', 'F8E7:18B612:2AA2F2C:274A775:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:08 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4801'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '199'), ('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', 'EBFE:2B329B:3F91647:3AFB136:68CB0C04')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F3AF:2F13CF:89DF3B3:80C53F8:68CC1152')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F283:3701AC:8AB5A2D:81E0074:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F781:CFEED:31D9E5E:2E996AE:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '21'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E8A4:3945A0:1D9600A:1B96D95:68CC1154')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1758204708'), ('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', 'EC60:3945A0:1D9630C:1B9705B:68CC1154')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F025:30FA66:875AEE8:7E47B98:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EF77:4B476:2F35E91:2C0FAD5:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"ce86232e94f9ff861e4fe2e2aa8b1869a7c76ae5ad018694532a0c50fcde9863"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4951'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '49'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FDB9:3B9D0A:32947A9:2CFC859:69626095')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:19e1c50...PyGithub:4bf07a2","diff_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.patch","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}]}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:14 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d6cc9f2b01cadb135712356eaaec4706d378bef67551a0d22ce62fe8dad8fab9"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4950'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '50'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'ECC2:2CAD27:34CB250:2F3C680:69626096')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:19e1c50...PyGithub:4bf07a2","diff_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86.patch","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8/comments","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"https://avatars.githubusercontent.com/u/5759247?v=4","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"https://github.com/dblanchette","followers_url":"https://api.github.com/users/dblanchette/followers","following_url":"https://api.github.com/users/dblanchette/following{/other_user}","gists_url":"https://api.github.com/users/dblanchette/gists{/gist_id}","starred_url":"https://api.github.com/users/dblanchette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dblanchette/subscriptions","organizations_url":"https://api.github.com/users/dblanchette/orgs","repos_url":"https://api.github.com/users/dblanchette/repos","events_url":"https://api.github.com/users/dblanchette/events{/privacy}","received_events_url":"https://api.github.com/users/dblanchette/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"https://github.com/PyGithub/PyGithub/commit/c4b3bb17c8fceb30705efba345c92c0c7576d53a"}]},{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"https://github.com/PyGithub/PyGithub/commit/441eeedfccdbda06ef0ed5009a39c87f1d3721ff"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -197,6 +197,7 @@ def __init__(\n self.__firstParams: dict[str, Any] = firstParams or {}\n self.__nextUrl = firstUrl\n self.__nextParams: dict[str, Any] = firstParams or {}\n+ self.__lastUrl: str | None = None\n self.__headers = headers\n self.__list_item = list_item\n self.__total_count_item = total_count_item\n@@ -283,19 +284,20 @@ def reversed(self) -> PaginatedList[T]:\n self.__firstParams,\n headers=self.__headers,\n list_item=self.__list_item,\n+ total_count_item=self.__total_count_item,\n attributesTransformer=self._attributesTransformer,\n graphql_query=self.__graphql_query,\n graphql_variables=self.__graphql_variables,\n )\n- r.__reverse()\n+ r.__reverse(self.__lastUrl)\n return r\n \n- def __reverse(self) -> None:\n+ def __reverse(self, last_url: str | None) -> None:\n self._reversed = True\n if self.is_rest:\n- lastUrl = self._getLastPageUrl()\n- if lastUrl:\n- self.__nextUrl = lastUrl\n+ self.__lastUrl = self._getLastPageUrl() if last_url is None else last_url\n+ if self.__lastUrl:\n+ self.__nextUrl = self.__lastUrl\n if self.__nextParams:\n # #2929: remove all parameters from self.__nextParams contained in self.__nextUrl\n self.__nextParams = {\n@@ -364,6 +366,8 @@ def _getPage(self, data: Any, headers: dict[str, str | int] | None) -> list[T]:\n self.__nextUrl = links[\"prev\"]\n elif \"next\" in links:\n self.__nextUrl = links[\"next\"]\n+ if \"last\" in links:\n+ self.__lastUrl = links[\"last\"]\n self.__nextParams = {}\n if self.__list_item in data:\n self.__totalCount = data.get(self.__total_count_item)"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -2400,7 +2400,7 @@ def get_commit(self, sha: str) -> Commit:\n :rtype: :class:`github.Commit.Commit`\n \"\"\"\n assert isinstance(sha, str), sha\n- sha = urllib.parse.quote(sha, safe=\"\")\n+ sha = urllib.parse.quote(sha)\n url = f\"{self.url}/commits/{sha}\"\n return github.Commit.Commit(self._requester, url=url)\n "},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -434,6 +434,7 @@ def __init__(\n self.rate_limiting = (-1, -1)\n self.rate_limiting_resettime = 0\n self.FIX_REPO_GET_GIT_REF = True\n+ assert isinstance(per_page, int), per_page\n self.per_page = per_page\n \n self.oauth_scopes = None"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -31,6 +31,8 @@\n from typing import Any\n from unittest import mock\n \n+from GithubObject import CompletableGithubObjectWithPaginatedProperty\n+\n import github.Repository\n import github.RepositoryDiscussion\n \n@@ -241,6 +243,27 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n \n+ def testSetPerPageIfNotSet(self):\n+ set_per_page = CompletableGithubObjectWithPaginatedProperty.set_per_page_if_not_set\n+ self.assertIsNone(set_per_page(None, 123))\n+ self.assertEqual(set_per_page(\"/path/to/resource\", 123), \"/path/to/resource?per_page=123\")\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource\", 123), \"https://host/path/to/resource?per_page=123\"\n+ )\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource?param=one¶m=2\", 123),\n+ \"https://host/path/to/resource?param=one¶m=2&per_page=123\",\n+ )\n+\n+ for url in [\n+ \"/path/to/resource\",\n+ \"https://host/path/to/resource\",\n+ \"https://host/path/to/resource?param=one¶m=2\",\n+ ]:\n+ # add per_page to url\n+ url = f\"{url}{'&' if '?' in url else '?'}per_page=42\"\n+ self.assertEqual(set_per_page(url, 123), url)\n+\n \n class TestingClass(gho.NonCompletableGithubObject):\n def _initAttributes(self) -> None:"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -377,6 +377,117 @@ def testCustomPerPageReversedIteration(self):\n [comment.created_at for comment in comments],\n )\n \n+ def testCustomPerPageWithRepoCommitFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commit = repo.get_commit(\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\")\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithRepoCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ commits = repo.get_commits(sha=\"dependabot/github_actions/actions/setup-python-6\")\n+ commit = commits[0]\n+ files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFiles(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ # TODO: test with pull request that hase more than per_page commits and more than 300 files\n+ # this paginated list has pagination headers, which are used to create the inner commit instances\n+ # however, they refer to the commit pagination\n+ # files of individual commits use pagination, but the first page does not have pagination headers\n+ # if the individual commits have files at all (below example they don't)\n+ # the commits: /repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2 (no files property)\n+ # the files of one commit: /repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ files = list(commit.files)\n+ self.assertListKeyEqual(\n+ files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/_build-pkg.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/openapi.yml\",\n+ ],\n+ )\n+\n+ def testCustomPerPageWithPullCommitsFilesReversed(self):\n+ self.g.per_page = 2\n+ repo = self.g.get_repo(\"PyGithub/PyGithub\", lazy=True)\n+ pull = repo.get_pull(3370)\n+ commits = list(pull.get_commits())\n+ self.assertEqual(len(commits), 1)\n+ commit = commits[0]\n+ reversed_files = list(reversed(commit.files))\n+ self.assertListKeyEqual(\n+ reversed_files,\n+ lambda f: f.filename,\n+ [\n+ \".github/workflows/openapi.yml\",\n+ \".github/workflows/lint.yml\",\n+ \".github/workflows/ci.yml\",\n+ \".github/workflows/_build-pkg.yml\",\n+ ],\n+ )\n+\n def testNoFirstPage(self):\n self.assertFalse(next(iter(self.list), None))\n "},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:51 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/\"76261824024a1ac26b4a2a5d565b55ad9ff93f7e450281cfee3a8f33891f1cae\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4821'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '179'), ('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', 'F457:3064F9:3CB5DCA:3849B9B:68CB099B')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T10:32:55Z\",\"pushed_at\":\"2025-09-16T19:19:00Z\",\"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\":20193,\"stargazers_count\":7521,\"watchers_count\":7521,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7521,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4820'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '180'), ('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', 'FAE8:2F13CF:3EC6F44:3A3DC46:68CB099B')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4819'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '181'), ('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', 'F758:2F13CF:3EC70E8:3A3DDDE:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:18:52 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4818'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '182'), ('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', 'F1C5:2B329B:3EF50E9:3A6F71F:68CB099C')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,54 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"cd9016eee287aa6a79b87b036fc978123a258857616e546928a04b1c529cee7a\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read; contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4999'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '1'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E942:72AFB:439F857:3EEF85F:68CB0F65')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\",\"id\":2806945628,\"node_id\":\"PR_kwDOADYVqs6nTpdc\",\"html_url\":\"https://github.com/PyGithub/PyGithub/pull/3370\",\"diff_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.diff\",\"patch_url\":\"https://github.com/PyGithub/PyGithub/pull/3370.patch\",\"issue_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\",\"number\":3370,\"state\":\"open\",\"locked\":false,\"title\":\"Bump actions/setup-python from 5 to 6\",\"user\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"body\":\"Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n
\\nRelease notes\\n

Sourced from actions/setup-python's releases.

\\n
\\n

v6.0.0

\\n

What's Changed

\\n

Breaking Changes

\\n\\n

Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See Release Notes

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n

Dependency updates:

\\n\\n

New Contributors

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v6.0.0

\\n

v5.6.0

\\n

What's Changed

\\n\\n

Full Changelog: https://github.com/actions/setup-python/compare/v5...v5.6.0

\\n

v5.5.0

\\n

What's Changed

\\n

Enhancements:

\\n\\n

Bug fixes:

\\n\\n\\n
\\n

... (truncated)

\\n
\\n
\\nCommits\\n
    \\n
  • e797f83 Upgrade to node 24 (#1164)
  • \\n
  • 3d1e2d2 Revert "Enhance cache-dependency-path handling to support files outside the w...
  • \\n
  • 65b0712 Clarify pythonLocation behavior for PyPy and GraalPy in environment variables...
  • \\n
  • 5b668cf Bump actions/checkout from 4 to 5 (#1181)
  • \\n
  • f62a0e2 Change missing cache directory error to warning (#1182)
  • \\n
  • 9322b3c Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in PackageIn...
  • \\n
  • fbeb884 Bump form-data to fix critical vulnerabilities #182 & #183 (#1163)
  • \\n
  • 03bb615 Bump idna from 2.9 to 3.7 in /tests/data (#843)
  • \\n
  • 36da51d Add version parsing from Pipfile (#1067)
  • \\n
  • 3c6f142 update documentation (#1156)
  • \\n
  • Additional commits viewable in compare view
  • \\n
\\n
\\n
\\n\\n\\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\\n\\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\\n\\n[//]: # (dependabot-automerge-start)\\n[//]: # (dependabot-automerge-end)\\n\\n---\\n\\n
\\nDependabot commands and options\\n
\\n\\nYou can trigger Dependabot actions by commenting on this PR:\\n- `@dependabot rebase` will rebase this PR\\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\\n- `@dependabot merge` will merge this PR after your CI passes on it\\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\\n- `@dependabot reopen` will reopen this PR if it is closed\\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\\n\\n\\n
\",\"created_at\":\"2025-09-08T06:01:05Z\",\"updated_at\":\"2025-09-08T06:04:56Z\",\"closed_at\":null,\"merged_at\":null,\"merge_commit_sha\":\"a2a81b89eeb0cabcea70d24099634808a4a7aa16\",\"assignee\":null,\"assignees\":[],\"requested_reviewers\":[],\"requested_teams\":[],\"labels\":[{\"id\":2144903025,\"node_id\":\"MDU6TGFiZWwyMTQ0OTAzMDI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/dependencies\",\"name\":\"dependencies\",\"color\":\"0366d6\",\"default\":false,\"description\":\"Pull requests that update a dependency file\"},{\"id\":2208559625,\"node_id\":\"MDU6TGFiZWwyMjA4NTU5NjI1\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels/github_actions\",\"name\":\"github_actions\",\"color\":\"000000\",\"default\":false,\"description\":\"Pull requests that update Github_actions code\"}],\"milestone\":null,\"draft\":false,\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\",\"review_comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\",\"review_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"head\":{\"label\":\"PyGithub:dependabot/github_actions/actions/setup-python-6\",\"ref\":\"dependabot/github_actions/actions/setup-python-6\",\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"base\":{\"label\":\"PyGithub:main\",\"ref\":\"main\",\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"user\":{\"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},\"repo\":{\"id\":3544490,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw\",\"name\":\"PyGithub\",\"full_name\":\"PyGithub/PyGithub\",\"private\":false,\"owner\":{\"login\":\"PyGithub\",\"id\":11288996,\"node_id\":\"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/11288996?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/PyGithub\",\"html_url\":\"https://github.com/PyGithub\",\"followers_url\":\"https://api.github.com/users/PyGithub/followers\",\"following_url\":\"https://api.github.com/users/PyGithub/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/PyGithub/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/PyGithub/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/PyGithub/subscriptions\",\"organizations_url\":\"https://api.github.com/users/PyGithub/orgs\",\"repos_url\":\"https://api.github.com/users/PyGithub/repos\",\"events_url\":\"https://api.github.com/users/PyGithub/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/PyGithub/received_events\",\"type\":\"Organization\",\"user_view_type\":\"public\",\"site_admin\":false},\"html_url\":\"https://github.com/PyGithub/PyGithub\",\"description\":\"Typed interactions with the GitHub API v3\",\"fork\":false,\"url\":\"https://api.github.com/repos/PyGithub/PyGithub\",\"forks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/forks\",\"keys_url\":\"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/PyGithub/PyGithub/teams\",\"hooks_url\":\"https://api.github.com/repos/PyGithub/PyGithub/hooks\",\"issue_events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/PyGithub/PyGithub/events\",\"assignees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tags\",\"blobs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/PyGithub/PyGithub/languages\",\"stargazers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/stargazers\",\"contributors_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contributors\",\"subscribers_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscribers\",\"subscription_url\":\"https://api.github.com/repos/PyGithub/PyGithub/subscription\",\"commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/PyGithub/PyGithub/merges\",\"archive_url\":\"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/PyGithub/PyGithub/downloads\",\"issues_url\":\"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/deployments\",\"created_at\":\"2012-02-25T12:53:47Z\",\"updated_at\":\"2025-09-17T19:27:38Z\",\"pushed_at\":\"2025-09-17T19:34:41Z\",\"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\":20193,\"stargazers_count\":7522,\"watchers_count\":7522,\"language\":\"Python\",\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":false,\"has_pages\":false,\"has_discussions\":true,\"forks_count\":1854,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":361,\"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\":1854,\"open_issues\":361,\"watchers\":7522,\"default_branch\":\"main\"}},\"_links\":{\"self\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370\"},\"html\":{\"href\":\"https://github.com/PyGithub/PyGithub/pull/3370\"},\"issue\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370\"},\"comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/issues/3370/comments\"},\"review_comments\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/comments\"},\"review_comment\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}\"},\"commits\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/pulls/3370/commits\"},\"statuses\":{\"href\":\"https://api.github.com/repos/PyGithub/PyGithub/statuses/3253acaabd86de12b73d0a24c98eb9c13d1987b5\"}},\"author_association\":\"CONTRIBUTOR\",\"auto_merge\":null,\"active_lock_reason\":null,\"merged\":false,\"mergeable\":true,\"rebaseable\":true,\"mergeable_state\":\"blocked\",\"merged_by\":null,\"comments\":1,\"review_comments\":0,\"maintainer_can_modify\":false,\"commits\":1,\"additions\":7,\"deletions\":7,\"changed_files\":4}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/pulls/3370/commits?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"ee0bd29f46ca6bf0f6ec025563f13202c83011d90f11bf228b97df450479e0de\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:04:56 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F954:2B329B:406E958:3BC0E70:68CB0F66')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:34 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4997'), ('X-RateLimit-Reset', '1758141814'), ('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', 'F055:2DE4CB:4205152:3D336BB:68CB0F66')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1758141814'), ('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', 'EEFD:3064F9:3E222F4:398E891:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:43:35 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1758141814'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F0CE:3217F1:4364F74:3EF2726:68CB0F67')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,21 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4805'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '195'), ('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', 'E8DA:2AC3C7:3FF4FDB:3B5EAD7:68CB0C02')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4804'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '196'), ('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', 'F023:2DE4CB:4115DC1:3C5C45B:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4803'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '197'), ('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', 'F28B:1882E2:4064367:3BCA1A4:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:07 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4802'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '198'), ('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', 'F8E7:18B612:2AA2F2C:274A775:68CB0C03')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Wed, 17 Sep 2025 19:29:08 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4801'), ('X-RateLimit-Reset', '1758138197'), ('X-RateLimit-Used', '199'), ('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', 'EBFE:2B329B:3F91647:3AFB136:68CB0C04')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFiles.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,32 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F3AF:2F13CF:89DF3B3:80C53F8:68CC1152')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04: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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F283:3701AC:8AB5A2D:81E0074:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F781:CFEED:31D9E5E:2E996AE:68CC1153')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FPaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -0,0 +1,43 @@\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits?sha=dependabot%2Fgithub_actions%2Factions%2Fsetup-python-6&per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:04 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/\"c7c48d3fe81f524c3e7106b2afe2f33337b25428e2a700312d5a259cf67886bd\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4979'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '21'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E8A4:3945A0:1D9600A:1B96D95:68CC1154')]\n+[{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}]},{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"node_id\":\"C_kwDOADYVqtoAKDRhMzUzZjczMDBmZTVmZWEwY2NlMmE1MDE5MDI0OWMzZjMzMmU1M2Q\",\"commit\":{\"author\":{\"name\":\"Enrico Minack\",\"email\":\"github@enrico.minack.dev\",\"date\":\"2025-09-02T17:45:08Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-02T17:45:08Z\"},\"message\":\"Merge changelog updates from v2.8 release branch (#3367)\",\"tree\":{\"sha\":\"a66d48ddbdb9d28b5410361039cd42813df86261\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/a66d48ddbdb9d28b5410361039cd42813df86261\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoty0kCRC1aQ7uu5UhlAAA270QAIAbuBjWkiGfpElKU3aaT4v+\\nC/d0pckDHQvvAkiJSVKPJIwaciwLnxhdsRjGOi9XV60azecchor94KXjyWQEuYnE\\nrZ2YfH92CHvwv0NOO33BZJN3To01u4qRbWHYsM2JA0nAM98xGu9MJw45GaW9uZ7c\\nwjeK1r+H1LgIAVtPkWO/sZfUhhbo0ETV25lrRuIv7jd8oXlUXq73iLMbWqteqXLc\\n5S+OtWg9q+GpSfs2L3qFJ+U4ytiI7VmuvlHRf2F+2jT/kq8QkH/T6jT0vaINsTdS\\nyxw1lpdp7nOY4UZpQok1J81Us1IgV3enClkptSvPf7Z+1uUHRV8Rk35RIUpeJMkS\\nzysDlsNEOTd09GAH9OYoYpqO7cPVFRyBlkyOpNT60x1U1nPjFWf+T2SfC8QtTrfn\\nwycFkqFEtDci1aHwyjfn0KtqRz9UCEcHciOJ257aLt/QEX6qgI1BNTD+YwwphL8c\\n69s+FM+V84mHQLbi+pYzONncouJpB1Y+C/wTJSVu3VV/tiNWAOxSEa6Pmi/7aBPD\\ngu+ktVLO6bwdV92D/eQgznhGTJHdVx1GjsiN65y3toqQXDswR4SvjSewRPEAgIDv\\ngv4MlL3U8r3P8nvil8zADn6aJCeON6cmfvAwnMfOISsjbTi/WEZrPcGlqDYSgbvK\\n65+UHR4T8yP852DzuI2l\\n=9++W\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree a66d48ddbdb9d28b5410361039cd42813df86261\\nparent f5f9756a1dd52a53820cc54927abb34725377987\\nauthor Enrico Minack 1756835108 +0200\\ncommitter GitHub 1756835108 +0200\\n\\nMerge changelog updates from v2.8 release branch (#3367)\\n\\n\",\"verified_at\":\"2025-09-02T17:45:08Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d/comments\",\"author\":{\"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\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"f5f9756a1dd52a53820cc54927abb34725377987\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987\"}]}]\n+\n+https\n+GET\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4978'), ('X-RateLimit-Reset', '1758204708'), ('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', 'EC60:3945A0:1D9630C:1B9705B:68CC1154')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=2\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:05 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/\"bcc46aa8ecb086b0a450a78abec1a7586ba7417a5f234cb5647bc573c31c078e\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"prev\", ; rel=\"first\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1758204708'), ('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', 'F025:30FA66:875AEE8:7E47B98:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"4e7df934422c0c3b03b9c1c661df997709e465f3\",\"filename\":\".github/workflows/lint.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Flint.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Flint.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -25,7 +25,7 @@ jobs:\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v5\\n- - uses: actions/setup-python@v5\\n+ - uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.x\\\"\\n \"},{\"sha\":\"d5d87ec917087ca92ef1da6ef547cb2464eb9492\",\"filename\":\".github/workflows/openapi.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fopenapi.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fopenapi.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -39,7 +39,7 @@ jobs:\\n git config --local user.name \\\"${{ github.actor }}\\\"\\n git config --local user.email \\\"github-action-${{ github.actor }}@users.noreply.github.com\\\"\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}\n+\n+https\n+GET\n+api.github.com\n+None\n+/repositories/3544490/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5?per_page=2&page=1\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'}\n+None\n+200\n+[('Date', 'Thu, 18 Sep 2025 14:04:06 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/\"67a8d41139212187f9223a2c4485cf22fcc782cd866f75bf145bdd893b3afcd9\"'), ('Last-Modified', 'Mon, 08 Sep 2025 06:01:04 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel=\"next\", ; rel=\"last\"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4976'), ('X-RateLimit-Reset', '1758204708'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EF77:4B476:2F35E91:2C0FAD5:68CC1155')]\n+{\"sha\":\"3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"node_id\":\"C_kwDOADYVqtoAKDMyNTNhY2FhYmQ4NmRlMTJiNzNkMGEyNGM5OGViOWMxM2QxOTg3YjU\",\"commit\":{\"author\":{\"name\":\"dependabot[bot]\",\"email\":\"49699333+dependabot[bot]@users.noreply.github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"committer\":{\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date\":\"2025-09-08T06:01:04Z\"},\"message\":\"Bump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"tree\":{\"sha\":\"aba22fc2dfab898cd919434b22781a68854388a8\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/trees/aba22fc2dfab898cd919434b22781a68854388a8\"},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJovnEgCRC1aQ7uu5UhlAAAYbYQAIRFHW4qrevgEOlOzzGzVxNC\\nglwtze0CGcptJLA/ZG2sL2HrE8SqNCZpmDf+pNUiEy13ESPfnUuIyI60RmXPCNB7\\n1xm7z6ejZVLftzz1TcNcF3kQ5MXltPvNjjUnF2uLqkynh+GcP2ceBEflglzZ6Hjj\\nSr67OeLDaJBqRHuKX6utH8+4U5Fhz1X2Vy+TDReVjW2y9RjgPws1YDxZ7bP6IDM6\\nzDIyeBbDIYob1Uble9uzd7uz2iXheAUertgavXQO514o7m9tWzHuHX8laCF47jVm\\n0e7M1SywGIoCdhjesqbKo9rmFTLM/eqrJdkys5Y1iZpPpojc+CZuv00hNNqqapU3\\nts+gRN3xo3ri0N5aQlYqEB4dUV1LN3wOCMwx5hPx+WkewB+OWr2YffK7a9HBwIE/\\nRKuHMUCNb4uAGSb2s5KNT5gsblcYqEGX8FeGNT9m4mEwPOAyq3owIxVQMB6oWHhN\\nSOdPRlodDGvxaFHO4595+ta8E/004trVJwBFLnTwauu4xhQzYcPPfamwVAH2J27I\\nqrlMIUciHuWtgZSkz0uI8j9TSVy94RsBAF2uKXp9P0mcwl090PaSiKVJM+SzShaN\\nom7R7i7xZGbr4ptoye5GmtUdlnATvENy2VoGX2uvfrZ73OuLrj+Lr+NbYxYvCLAT\\nssWlqiNPECaJ+RQUhLDP\\n=S9eo\\n-----END PGP SIGNATURE-----\\n\",\"payload\":\"tree aba22fc2dfab898cd919434b22781a68854388a8\\nparent 4a353f7300fe5fea0cce2a50190249c3f332e53d\\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1757311264 +0000\\ncommitter GitHub 1757311264 +0000\\n\\nBump actions/setup-python from 5 to 6\\n\\nBumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\\n- [Release notes](https://github.com/actions/setup-python/releases)\\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\\n\\n---\\nupdated-dependencies:\\n- dependency-name: actions/setup-python\\n dependency-version: '6'\\n dependency-type: direct:production\\n update-type: version-update:semver-major\\n...\\n\\nSigned-off-by: dependabot[bot] \",\"verified_at\":\"2025-09-08T06:01:05Z\"}},\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"comments_url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/3253acaabd86de12b73d0a24c98eb9c13d1987b5/comments\",\"author\":{\"login\":\"dependabot[bot]\",\"id\":49699333,\"node_id\":\"MDM6Qm90NDk2OTkzMzM=\",\"avatar_url\":\"https://avatars.githubusercontent.com/in/29110?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/dependabot%5Bbot%5D\",\"html_url\":\"https://github.com/apps/dependabot\",\"followers_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/dependabot%5Bbot%5D/received_events\",\"type\":\"Bot\",\"user_view_type\":\"public\",\"site_admin\":false},\"committer\":{\"login\":\"web-flow\",\"id\":19864447,\"node_id\":\"MDQ6VXNlcjE5ODY0NDQ3\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/19864447?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/web-flow\",\"html_url\":\"https://github.com/web-flow\",\"followers_url\":\"https://api.github.com/users/web-flow/followers\",\"following_url\":\"https://api.github.com/users/web-flow/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/web-flow/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/web-flow/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/web-flow/subscriptions\",\"organizations_url\":\"https://api.github.com/users/web-flow/orgs\",\"repos_url\":\"https://api.github.com/users/web-flow/repos\",\"events_url\":\"https://api.github.com/users/web-flow/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/web-flow/received_events\",\"type\":\"User\",\"user_view_type\":\"public\",\"site_admin\":false},\"parents\":[{\"sha\":\"4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/commits/4a353f7300fe5fea0cce2a50190249c3f332e53d\",\"html_url\":\"https://github.com/PyGithub/PyGithub/commit/4a353f7300fe5fea0cce2a50190249c3f332e53d\"}],\"stats\":{\"total\":14,\"additions\":7,\"deletions\":7},\"files\":[{\"sha\":\"25eb73a226fe2e06b214ed971c5468780866f667\",\"filename\":\".github/workflows/_build-pkg.yml\",\"status\":\"modified\",\"additions\":1,\"deletions\":1,\"changes\":2,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2F_build-pkg.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2F_build-pkg.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -15,7 +15,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: '3.x'\\n \"},{\"sha\":\"6a78e47ca957558dfb14e7bc2109498e1404db68\",\"filename\":\".github/workflows/ci.yml\",\"status\":\"modified\",\"additions\":4,\"deletions\":4,\"changes\":8,\"blob_url\":\"https://github.com/PyGithub/PyGithub/blob/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"raw_url\":\"https://github.com/PyGithub/PyGithub/raw/3253acaabd86de12b73d0a24c98eb9c13d1987b5/.github%2Fworkflows%2Fci.yml\",\"contents_url\":\"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=3253acaabd86de12b73d0a24c98eb9c13d1987b5\",\"patch\":\"@@ -33,7 +33,7 @@ jobs:\\n steps:\\n - uses: actions/checkout@v5\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"${{ matrix.python-version }}\\\"\\n - name: Install tox\\n@@ -82,7 +82,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -132,7 +132,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\\n@@ -194,7 +194,7 @@ jobs:\\n ref: ${{ github.event.pull_request.base.sha }}\\n path: base\\n - name: Set up Python\\n- uses: actions/setup-python@v5\\n+ uses: actions/setup-python@v6\\n with:\\n python-version: \\\"3.12\\\"\\n - name: Set up dependencies\"}]}"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:15 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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4949'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '51'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F329:296877:313988A:2BAAE5A:69626096')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:15 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/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4948'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '52'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FA4A:3B9D0A:3294DDE:2CFCDB0:69626097')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -2400,11 +2400,8 @@ def get_commit(self, sha: str) -> Commit:\n :rtype: :class:`github.Commit.Commit`\n \"\"\"\n assert isinstance(sha, str), sha\n- sha = urllib.parse.quote(sha, safe=\"\")\n+ sha = urllib.parse.quote(sha)\n url = f\"{self.url}/commits/{sha}\"\n- # the files property uses pagination, set per-page if it is not the default value\n- if self._requester.per_page != Consts.DEFAULT_PER_PAGE:\n- url = f\"{url}?per_page={self._requester.per_page}\"\n return github.Commit.Commit(self._requester, url=url)\n \n def get_commits(\n@@ -2449,14 +2446,7 @@ def get_commits(\n url_parameters[\"author\"] = author.login\n else:\n url_parameters[\"author\"] = author\n- transformer = PaginatedList.add_per_page_to_url_transformer(self._requester.per_page)\n- return PaginatedList(\n- github.Commit.Commit,\n- self._requester,\n- f\"{self.url}/commits\",\n- url_parameters,\n- attributesTransformer=transformer,\n- )\n+ return PaginatedList(github.Commit.Commit, self._requester, f\"{self.url}/commits\", url_parameters)\n \n def get_contents(self, path: str, ref: Opt[str] = NotSet) -> list[ContentFile] | ContentFile:\n \"\"\""},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -31,6 +31,8 @@\n from typing import Any\n from unittest import mock\n \n+from GithubObject import CompletableGithubObjectWithPaginatedProperty\n+\n import github.Repository\n import github.RepositoryDiscussion\n \n@@ -241,6 +243,27 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n \n+ def testSetPerPageIfNotSet(self):\n+ set_per_page = CompletableGithubObjectWithPaginatedProperty.set_per_page_if_not_set\n+ self.assertIsNone(set_per_page(None, 123))\n+ self.assertEqual(set_per_page(\"/path/to/resource\", 123), \"/path/to/resource?per_page=123\")\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource\", 123), \"https://host/path/to/resource?per_page=123\"\n+ )\n+ self.assertEqual(\n+ set_per_page(\"https://host/path/to/resource?param=one¶m=2\", 123),\n+ \"https://host/path/to/resource?param=one¶m=2&per_page=123\",\n+ )\n+\n+ for url in [\n+ \"/path/to/resource\",\n+ \"https://host/path/to/resource\",\n+ \"https://host/path/to/resource?param=one¶m=2\",\n+ ]:\n+ # add per_page to url\n+ url = f\"{url}{'&' if '?' in url else '?'}per_page=42\"\n+ self.assertEqual(set_per_page(url, 123), url)\n+\n \n class TestingClass(gho.NonCompletableGithubObject):\n def _initAttributes(self) -> None:"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:15 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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4947'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '53'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F61D:2CAD27:34CB8FA:2F3CC19:69626097')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -435,26 +435,6 @@ def get_page(self, page: int) -> list[T]:\n data = data[self.__list_item]\n return [self.__contentClass(self.__requester, headers, self._transformAttributes(element)) for element in data]\n \n- # Some `GithubObject` classes contain a property that is subject to pagination, e.g. Commit.files.\n- # Created from a `get_*s` method that return a `PaginatedList` of GithubObject instances, that property will\n- # be empty, and the instances are incomplete `CompletableGithubObject`s. Getting the paginated property\n- # will first complete the `GithubObject`.\n- # The url used for completing the object has to contain the `per_page` parameter.\n- # This attribute transformer can be used to inject the `per_page` parameter into the objects\n- # while iterating over the `PaginatedList`.\n- @staticmethod\n- def add_per_page_to_url_transformer(per_page: int) -> Callable[[dict[str, Any]], dict[str, Any]]:\n- def func(attributes: dict[str, Any]) -> dict[str, Any]:\n- if per_page != Consts.DEFAULT_PER_PAGE and \"url\" in attributes:\n- url = attributes[\"url\"]\n- params = Requester.get_parameters_of_url(url)\n- params[\"per_page\"] = [str(per_page)]\n- url = Requester.add_parameters_to_url(url, params)\n- attributes[\"url\"] = url\n- return attributes\n-\n- return func\n-\n @classmethod\n def override_attributes(cls, overrides: dict[str, Any]) -> Callable[[dict[str, Any]], dict[str, Any]]:\n def attributes_transformer(element: dict[str, Any]) -> dict[str, Any]:"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FPullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequest.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -708,17 +708,7 @@ def get_commits(self) -> PaginatedList[Commit]:\n \"\"\"\n :calls: `GET /repos/{owner}/{repo}/pulls/{pull_number}/commits `_\n \"\"\"\n- # issue #3372: Commits created here are incomplete. Getting their files will first complete the object before\n- # files are being fetched. That completing request has to contain the per-page for the first page of files.\n- # Set per-page here if it is not the default.\n- transformer = PaginatedList.add_per_page_to_url_transformer(self._requester.per_page)\n- return PaginatedList(\n- github.Commit.Commit,\n- self._requester,\n- f\"{self.url}/commits\",\n- None,\n- attributesTransformer=transformer,\n- )\n+ return PaginatedList(github.Commit.Commit, self._requester, f\"{self.url}/commits\", None)\n \n def get_files(self) -> PaginatedList[File]:\n \"\"\""}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Sat, 10 Jan 2026 14:22:16 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4946'), ('X-RateLimit-Reset', '1768057925'), ('X-RateLimit-Used', '54'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F8A4:3A95B:36D90F5:315D69B:69626097')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"https://github.com/PyGithub/PyGithub/commit/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"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","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"https://github.com/PyGithub/PyGithub/commit/3e0b47d5431bde32657758f115b7ed2f99a32155"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -62,7 +62,7 @@\n import github.NamedUser\n import github.PaginatedList\n import github.Repository\n-from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_optional\n+from github.GithubObject import Attribute, CompletableGithubObjectWithPaginatedProperty, NotSet, Opt, is_optional\n from github.PaginatedList import PaginatedList\n \n if TYPE_CHECKING:\n@@ -80,7 +80,7 @@\n from github.Repository import Repository\n \n \n-class Commit(CompletableGithubObject):\n+class Commit(CompletableGithubObjectWithPaginatedProperty):\n \"\"\"\n This class represents Commits.\n "},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","patch":"@@ -649,6 +649,48 @@ def update(self, additional_headers: dict[str, Any] | None = None) -> bool:\n return True\n \n \n+class CompletableGithubObjectWithPaginatedProperty(CompletableGithubObject):\n+ \"\"\"\n+ A CompletableGithubObject that has a property that is subject to pagination.\n+\n+ An instance created from a Requester with a non-default value for `per_page` must have the\n+ `per_page` value in the URL in order for the paginated property to use the `per_page` value.\n+\n+ \"\"\"\n+\n+ def __init__(\n+ self,\n+ requester: Requester,\n+ headers: dict[str, str | int] | None = None,\n+ attributes: dict[str, Any] | None = None,\n+ completed: bool | None = None,\n+ *,\n+ url: str | None = None,\n+ accept: str | None = None,\n+ ):\n+ if requester.per_page != Consts.DEFAULT_PER_PAGE:\n+ # add per_page to the URL in the attributes\n+ if attributes is not None and \"url\" in attributes:\n+ attributes[\"url\"] = self.set_per_page_if_not_set(attributes[\"url\"], requester.per_page)\n+ # add per_page to request URL if instance is incomplete\n+ if completed is None or completed is False:\n+ url = self.set_per_page_if_not_set(url, requester.per_page)\n+ super().__init__(requester, headers, attributes, completed, url=url, accept=accept)\n+\n+ @staticmethod\n+ def set_per_page_if_not_set(url: str | None, per_page: int) -> str | None:\n+ if url is None:\n+ return url\n+\n+ from .Requester import Requester\n+\n+ params = Requester.get_parameters_of_url(url)\n+ if \"per_page\" not in params:\n+ params[\"per_page\"] = [str(per_page)]\n+ return Requester.add_parameters_to_url(url, params)\n+ return url\n+\n+\n Param = ParamSpec(\"Param\")\n RetType = TypeVar(\"RetType\")\n "}]} diff --git a/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt new file mode 100644 index 0000000000..3b773e3e91 --- /dev/null +++ b/tests/ReplayData/CompletableGithubObjectWithPaginatedProperty.testRepoComparisonCommitsFilesWithPerPage.txt @@ -0,0 +1,120 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d6cc9f2b01cadb135712356eaaec4706d378bef67551a0d22ce62fe8dad8fab9"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4884'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '116'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F58B:2503F5:15326C4:132CDB1:695FAC59')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]},{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?per_page=3&page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"ce86232e94f9ff861e4fe2e2aa8b1869a7c76ae5ad018694532a0c50fcde9863"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4883'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '117'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FBD8:24CAFF:14E0B19:12F43AC:695FAC5A')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}]}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4882'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '118'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F210:18034E:14A4376:12A287A:695FAC5A')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4881'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '119'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE41:223DB9:1514E46:1315B1B:695FAC5A')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4880'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '120'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'ED3F:3A1BC1:14949E6:1290E73:695FAC5B')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:43 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"60b4a587fa622fe254e0f944cd94e5a0e04f8632c24ee41a07ef62f8653003d9"'), ('Last-Modified', 'Thu, 08 Jan 2026 11:05:32 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4879'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '121'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FBDD:3A1BC1:1494CF3:1291148:695FAC5B')] +{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"…","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"…","keys_url":"…","collaborators_url":"…","teams_url":"…","hooks_url":"…","issue_events_url":"…","events_url":"…","assignees_url":"…","branches_url":"…","tags_url":"…","blobs_url":"…","git_tags_url":"…","git_refs_url":"…","trees_url":"…","statuses_url":"…","languages_url":"…","stargazers_url":"…","contributors_url":"…","subscribers_url":"…","subscription_url":"…","commits_url":"…","git_commits_url":"…","comments_url":"…","issue_comment_url":"…","contents_url":"…","compare_url":"…","merges_url":"…","archive_url":"…","downloads_url":"…","issues_url":"…","pulls_url":"…","milestones_url":"…","notifications_url":"…","labels_url":"…","releases_url":"…","deployments_url":"…","created_at":"2012-02-25T12:53:47Z","updated_at":"2026-01-08T11:05:32Z","pushed_at":"2026-01-07T11:28:45Z","git_url":"…","ssh_url":"…","clone_url":"…","svn_url":"…","homepage":"https://pygithub.readthedocs.io/","size":19658,"stargazers_count":7636,"watchers_count":7636,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1872,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":365,"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":1872,"open_issues":365,"watchers":7636,"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":"…","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"Organization","user_view_type":"public","site_admin":false},"network_count":1872,"subscribers_count":110} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"d6cc9f2b01cadb135712356eaaec4706d378bef67551a0d22ce62fe8dad8fab9"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4878'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '122'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'EEE1:2C798C:14BB88F:12C1EDF:695FAC5C')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","node_id":"C_kwDOADYVqtoAKGM0YjNiYjE3YzhmY2ViMzA3MDVlZmJhMzQ1YzkyYzBjNzU3NmQ1M2E","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-16T19:18:44Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:54:32Z"},"message":"Test commit files with per-page","tree":{"sha":"228b2ea55c26a1a58e77209f20ecd0713909f945","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/228b2ea55c26a1a58e77209f20ecd0713909f945"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…"}]},{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","node_id":"C_kwDOADYVqtoAKDQ0MWVlZWRmY2NkYmRhMDZlZjBlZDUwMDlhMzljODdmMWQzNzIxZmY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-17T19:33:55Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:22Z"},"message":"Set per-page when getting Commit files","tree":{"sha":"372019e00164e193c50c93ba67054e59ff9ee272","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/372019e00164e193c50c93ba67054e59ff9ee272"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"c4b3bb17c8fceb30705efba345c92c0c7576d53a","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/c4b3bb17c8fceb30705efba345c92c0c7576d53a","html_url":"…"}]},{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","node_id":"C_kwDOADYVqtoAKDNlMGI0N2Q1NDMxYmRlMzI2NTc3NThmMTE1YjdlZDJmOTlhMzIxNTU","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T14:12:47Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:56:24Z"},"message":"Refactor out transformer and apply to Repository.get_commits","tree":{"sha":"6e860b26620518622118f90b9efd4543a065a0a7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/6e860b26620518622118f90b9efd4543a065a0a7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"441eeedfccdbda06ef0ed5009a39c87f1d3721ff","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/441eeedfccdbda06ef0ed5009a39c87f1d3721ff","html_url":"…"}]}],"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":9,"deletions":5,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"6736be478d1b9a95780e6c08d400767055c4855c","filename":"github/Requester.py","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"8de74bb6b8b295f19a76ba3e0b328908699619d7","filename":"tests/PaginatedList.py","status":"modified","additions":111,"deletions":0,"changes":111,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bc742a6b06185456ba9e05e1398f8d0f63df0af7","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFiles.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"7e3e3cae1f9d286c79695f7260047586a5b2a21b","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithPullCommitsFilesReversed.txt","status":"added","additions":54,"deletions":0,"changes":54,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"536896a26bc210567dd8b0d3ddf4fde148a884d0","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFiles.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"bd90f5e8d71bd19f50d0133c7ad7e2472af96b73","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitFilesReversed.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"3e159bba83be7033d59b98dfd6e24e0b8cbec004","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFiles.txt","status":"added","additions":32,"deletions":0,"changes":32,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ee22bfe6670a1592f381594adc1e0cd61fd03ca8","filename":"tests/ReplayData/PaginatedList.testCustomPerPageWithRepoCommitsFilesReversed.txt","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?per_page=3&page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:44 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"ce86232e94f9ff861e4fe2e2aa8b1869a7c76ae5ad018694532a0c50fcde9863"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4877'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '123'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FE69:326B84:14434BB:124B583:695FAC5C')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/19e1c5032397a95c58fe25760723ffc24cbe0ec8...4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","permalink_url":"…","diff_url":"…","patch_url":"…","base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"merge_base_commit":{"sha":"19e1c5032397a95c58fe25760723ffc24cbe0ec8","node_id":"C_kwDOADYVqtoAKDE5ZTFjNTAzMjM5N2E5NWM1OGZlMjU3NjA3MjNmZmMyNGNiZTBlYzg","commit":{"author":{"name":"Denis Blanchette","email":"dblanchette@coveo.com","date":"2026-01-06T19:31:20Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-01-06T19:31:20Z"},"message":"Add `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"0677c50efa6888560d97d1148cbc231ba82faef7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/0677c50efa6888560d97d1148cbc231ba82faef7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJpXWMYCRC1aQ7uu5UhlAAAgXgQADntk6iUg9d2bDQc7PsDeaYK\nyeL0ja1x60S90kMBfLEUO8VrI1HFkBqiwPqgDU8bTiu0gkmGCxQR3u52yItX4ey4\nbSafnYrH8TvsnMQBGh1jxpG0VE9BM4X6OTlZ5yjpQf5vjQxitxCNTLbRJTu6/i9J\n/3oSGCcYhmr5QzjfmtMUAD4gAJklAFyy0K1BwLT3m41o+98ikgYb9jn6x4/2EMHG\nOcajKXgVx6ZNcGu9vq1CyfQTzx+J6EwLUDCQt+haCU5ZrCPnEHBqmb/eLMBpnjvy\nBHnVskWmqlhONEchIxTsksQkjw/Snr7ThKxPg/R0vwWfyxU8MiI5v9/UO1gXvpo3\nZIeOSPZcxiazbKFqZYfmSWXVA38K/V6WZAvdPHz6U3RrR5TTAzPQdSl1wRcmUiYT\ndn/mgMNgIWORyfaGLf5YJBZ8EvHmUbre33XF1y06W2orIYNTw9wHChbcOftsbx3G\ncp4IPVUE7ug+HOg4Zh7Mb31EcHP4U1lWpiHFk3CDuJ/fSDf9ZIhlb35HFFkN6fuy\nYs/ZOoOs26j/wQXpvYq0YzDVFmlo5pzMHmV8CQL4HSWa3MLpa3sp0++X0jkBjYAe\njDXZk5dORSU/uT/0N92B5o9NUBUmuJTd8o41t55TKZzF//spkg1I773MEhl5Omkz\nbKUhnpIzPQZ4Plhwrlfd\n=O96K\n-----END PGP SIGNATURE-----\n","payload":"tree 0677c50efa6888560d97d1148cbc231ba82faef7\nparent 646190988f3dd18e790969868b9ffe3c71acf254\nauthor Denis Blanchette 1767727880 -0500\ncommitter GitHub 1767727880 +0000\n\nAdd `throw` option to `Workflow.create_dispatch` to raise exceptions (#2966)\n\nWhen using Workflow.create_dispatch(), we only get a boolean response\neven though the GitHub API returns detailed error messages.\n\nThis adds an option to the method to throw exceptions with the error\ndata when it fails.\n\nWe've been having issues with creating workflow dispatch with\nmissing/too many arguments.\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2026-01-06T19:31:36Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/19e1c5032397a95c58fe25760723ffc24cbe0ec8","html_url":"…","comments_url":"…","author":{"login":"dblanchette","id":5759247,"node_id":"MDQ6VXNlcjU3NTkyNDc=","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/dblanchette","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"646190988f3dd18e790969868b9ffe3c71acf254","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/646190988f3dd18e790969868b9ffe3c71acf254","html_url":"…"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}]}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=1&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08: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/"c800733684f1ecd83e659606d39cfe329f42c51dfaee844d53b712500a0b3542"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4876'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '124'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'FD86:2C798C:14BC0B2:12C265E:695FAC5D')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"f4dde9e9affb2364de64f01b6011ab3a6f2054fb","filename":"github/Commit.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"ab879f9c41d82ec1ee695cd9c539268eb35215ba","filename":"github/GithubObject.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=2&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08: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/"eb6016ca7e16e43f83d53be4e25112cd7b9e29810f37ead46d6e061f65e61b7a"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4875'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '125'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'E899:3A1BC1:1495AC4:1291DBC:695FAC5D')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5ed74aa11f429a7b7d079a6ab0c4343cf17f3390","filename":"github/PaginatedList.py","status":"modified","additions":0,"deletions":20,"changes":20,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"47f0846ea60932b327b7701483f2321806d15c45","filename":"github/PullRequest.py","status":"modified","additions":1,"deletions":11,"changes":12,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86?page=3&per_page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Thu, 08 Jan 2026 13:08:46 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"879805a0f276468d840f418c28a40b0b8eb716bdc71d0823eb3f6896adcdf3f7"'), ('Last-Modified', 'Wed, 07 Jan 2026 10:58:52 GMT'), ('github-authentication-token-expiration', '2026-02-06 07:42:23 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4874'), ('X-RateLimit-Reset', '1767880692'), ('X-RateLimit-Used', '126'), ('X-RateLimit-Resource', 'core'), ('X-GitHub-Request-Id', 'F82D:18034E:14A5B60:12A3DFB:695FAC5D')] +{"sha":"4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","node_id":"C_kwDOADYVqtoAKDRiZjA3YTJmNTEyM2Y3OGZjNjc1OWJjMmFkZTBjNzQxNTRjMWJhODY","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-18T15:00:19Z"},"committer":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2026-01-07T10:58:52Z"},"message":"Refactor out logic into CompletableGithubObjectWithPaginatedProperty class","tree":{"sha":"5a56a86efb11b9e5da47cd4da9e39161d3fab4e5","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/5a56a86efb11b9e5da47cd4da9e39161d3fab4e5"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4bf07a2f5123f78fc6759bc2ade0c74154c1ba86","html_url":"…","comments_url":"…","author":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"EnricoMi","id":44700269,"node_id":"MDQ6VXNlcjQ0NzAwMjY5","avatar_url":"…","gravatar_id":"","url":"https://api.github.com/users/EnricoMi","html_url":"…","followers_url":"…","following_url":"…","gists_url":"…","starred_url":"…","subscriptions_url":"…","organizations_url":"…","repos_url":"…","events_url":"…","received_events_url":"…","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3e0b47d5431bde32657758f115b7ed2f99a32155","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3e0b47d5431bde32657758f115b7ed2f99a32155","html_url":"…"}],"stats":{"total":115,"additions":70,"deletions":45},"files":[{"sha":"5765aed0c5945e27654405854fdd303a584fd8e7","filename":"github/Repository.py","status":"modified","additions":2,"deletions":12,"changes":14,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"},{"sha":"14fc9280863021adaea074232ef77d04bf23e51c","filename":"tests/GithubObject.py","status":"modified","additions":23,"deletions":0,"changes":23,"blob_url":"…","raw_url":"…","contents_url":"…","patch":"…"}]} diff --git a/tests/ReplayData/EnterpriseAdmin.testGetConsumedLicenses.txt b/tests/ReplayData/EnterpriseAdmin.testGetConsumedLicenses.txt index 049ba22117..e9858c5401 100644 --- a/tests/ReplayData/EnterpriseAdmin.testGetConsumedLicenses.txt +++ b/tests/ReplayData/EnterpriseAdmin.testGetConsumedLicenses.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/enterprises/beaver-group/consumed-licenses +/enterprises/beaver-group/consumed-licenses?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseGetUsers.txt b/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseGetUsers.txt new file mode 100644 index 0000000000..c54d12b891 --- /dev/null +++ b/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseGetUsers.txt @@ -0,0 +1,32 @@ +https +GET +api.github.com +None +/enterprises/beaver-group/consumed-licenses?page=1&per_page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 27 Jul 2023 05:18: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/"cec25a870aded5f7c26c9e549d31f9b91d887121b0f77b72446fe2f4a8eaf6d2"'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'admin:enterprise, manage_billing:enterprise, read:enterprise'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4829'), ('X-RateLimit-Reset', '1690436729'), ('X-RateLimit-Used', '171'), ('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', 'F8E3:4B9F:2EB3A7:310B95:64C1FE38')] +{"total_seats_consumed":102,"total_seats_purchased":103,"users":[{"github_com_login":"beaver-user001","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user001","github_com_member_roles":["beaver-admin-dev:Owner","beaver-external:Owner","beaver-general:Owner","beaver-training:Owner","beaver:Owner"],"github_com_enterprise_roles":["Owner","Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user@beaver.co.jp","total_user_accounts":1}]} + +https +GET +api.github.com +None +/enterprises/beaver-group/consumed-licenses?page=1&per_page=100 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 27 Jul 2023 05:18: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/"4ef4c3608e49b9c67c3c8a20c4379a15b998aae0cd83cf8d654de0862baff233"'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'admin:enterprise, manage_billing:enterprise, read:enterprise'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last", ; rel="first"'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4827'), ('X-RateLimit-Reset', '1690436729'), ('X-RateLimit-Used', '173'), ('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', '3612:2A2F:2E4F58:30A766:64C1FE39')] +{"total_seats_consumed":102,"total_seats_purchased":103,"users":[{"github_com_login":"beaver-user001","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user001","github_com_member_roles":["beaver-admin-dev:Owner","beaver-external:Owner","beaver-general:Owner","beaver-training:Owner","beaver:Owner"],"github_com_enterprise_roles":["Owner","Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user002","github_com_name":"beaver-user002","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user002","github_com_member_roles":[],"github_com_enterprise_roles":["Pending outside collaborator invitation"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user003","github_com_name":"beaver-user003","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user003","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user003@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user004","github_com_name":"beaver-user004","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user004","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user005","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user005","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user006","github_com_name":"beaver-user006","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user006","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user007","github_com_name":"beaver-user007","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user007","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user008","github_com_name":"beaver-user008","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user008","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user009","github_com_name":"beaver-user009","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user009","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user010","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user010","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user011","github_com_name":"beaver-user011","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user011","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator","Pending outside collaborator invitation"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user012","github_com_name":"beaver-user012","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user012","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user013","github_com_name":"beaver-user013","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user013","github_com_member_roles":["beaver-admin-dev:Owner","beaver-external:Owner","beaver-general:Owner","beaver-training:Owner","beaver:Owner"],"github_com_enterprise_roles":["Owner","Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user013@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user014","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user014","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user015","github_com_name":"beaver-user015","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user015","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user016","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user016","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user016@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user017","github_com_name":"beaver-user017","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user017","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user018","github_com_name":"beaver-user018","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user018","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user019","github_com_name":"beaver-user019","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user019","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user020","github_com_name":"beaver-user020","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user020","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user020@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user021","github_com_name":"beaver-user021","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user021","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user022","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user022","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user022@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user023","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user023","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user024","github_com_name":"beaver-user024","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user024","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user025","github_com_name":"beaver-user025","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user025","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user026","github_com_name":"beaver-user026","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user026","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user027","github_com_name":"beaver-user027","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user027","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user027@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user028","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user028","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user029","github_com_name":"beaver-user029","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user029","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user029@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user030","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user030","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user031","github_com_name":"beaver-user031","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user031","github_com_member_roles":[],"github_com_enterprise_roles":[],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user031@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user032","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user032","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user032@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user033","github_com_name":"beaver-user033","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user033","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user034","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user034","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user035","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user035","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user036","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user036","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user036@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user037","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user037","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user038","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user038","github_com_member_roles":["beaver-external:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user039","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user039","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user040","github_com_name":"beaver-user040","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user040","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user041","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user041","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user042","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user042","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user042@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user043","github_com_name":"beaver-user043","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user043","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user044","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user044","github_com_member_roles":[],"github_com_enterprise_roles":[],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user044@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user045","github_com_name":"beaver-user045","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user045","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user046","github_com_name":"beaver-user046","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user046","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user047","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user047","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user047@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user048","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user048","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user049","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user049","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user049@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user050","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user050","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user050@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user051","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user051","github_com_member_roles":["beaver-external:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member","Pending invitation"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":["beaver-general"],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user052","github_com_name":"beaver-user052","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user052","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user053","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user053","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user054","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user054","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user055","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user055","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user056","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user056","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user057","github_com_name":"beaver-user057","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user057","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user057@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user058","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user058","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user058@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user059","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user059","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user060","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user060","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user060@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user061","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user061","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user062","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user062","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user063","github_com_name":"beaver-user063","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":true,"license_type":"Visual Studio subscription","github_com_profile":"https://github.com/beaver-user063","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":"Matched to Cloud","visual_studio_subscription_email":"beaver-user063@beaver.co.jp","total_user_accounts":1},{"github_com_login":"beaver-user064","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user064","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user065","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user065","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user066","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user066","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user067","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user067","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user068","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user068","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user069","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user069","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user070","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user070","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user071","github_com_name":"beaver-user071","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user071","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user072","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user072","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user073","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user073","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user074","github_com_name":"beaver-user074","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user074","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user075","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user075","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user076","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user076","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user077","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user077","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user078","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user078","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user079","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user079","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user080","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user080","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user081","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user081","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user082","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user082","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user083","github_com_name":"beaver-user083","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user083","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user084","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user084","github_com_member_roles":[],"github_com_enterprise_roles":["Outside collaborator"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user085","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user085","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user086","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user086","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user087","github_com_name":"beaver-user087","enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user087","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user088","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user088","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user089","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user089","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user090","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user090","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user091","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user091","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user092","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user092","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user093","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user093","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user094","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user094","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user095","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user095","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user096","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user096","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user097","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user097","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user098","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user098","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user099","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user099","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user100","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user100","github_com_member_roles":["beaver-external:Member","beaver-general:Member","beaver-training:Member"],"github_com_enterprise_roles":["Member"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1}]} + +https +GET +api.github.com +None +/enterprises/beaver-group/consumed-licenses?page=2&per_page=100 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 27 Jul 2023 05:18: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/"1d436b78f7cd5021a418b048a8958845726638e088319edfa2898c2ae23c1ce1"'), ('X-OAuth-Scopes', 'admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, repo, user, write:discussion'), ('X-Accepted-OAuth-Scopes', 'admin:enterprise, manage_billing:enterprise, read:enterprise'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4825'), ('X-RateLimit-Reset', '1690436729'), ('X-RateLimit-Used', '175'), ('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', '36DD:03FA:2DE97B:304197:64C1FE3A')] +{"total_seats_consumed":102,"total_seats_purchased":103,"users":[{"github_com_login":"beaver-user101","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user101","github_com_member_roles":[],"github_com_enterprise_roles":["Pending outside collaborator invitation"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":true,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1},{"github_com_login":"beaver-user102","github_com_name":null,"enterprise_server_user_ids":[],"github_com_user":true,"enterprise_server_user":false,"visual_studio_subscription_user":false,"license_type":"Enterprise","github_com_profile":"https://github.com/beaver-user102","github_com_member_roles":[],"github_com_enterprise_roles":["Pending outside collaborator invitation"],"github_com_verified_domain_emails":[],"github_com_saml_name_id":null,"github_com_orgs_with_pending_invites":[],"github_com_two_factor_auth":false,"enterprise_server_primary_emails":[],"visual_studio_license_status":null,"visual_studio_subscription_email":null,"total_user_accounts":1}]} diff --git a/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseUsers.txt b/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseUsers.txt index 354f904e9c..4780611136 100644 --- a/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseUsers.txt +++ b/tests/ReplayData/EnterpriseAdmin.testGetEnterpriseUsers.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/enterprises/beaver-group/consumed-licenses +/enterprises/beaver-group/consumed-licenses?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt b/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt index 0f78a8891e..373e723b17 100644 --- a/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt +++ b/tests/ReplayData/ExposeAllAttributes.testAllClasses.txt @@ -57,7 +57,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a +/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 @@ -161,7 +161,7 @@ None None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4882'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes'), ('x-github-request-id', '8ca72976-9b88-4917-8fd7-1aa29db18369'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, Accept-Encoding'), ('content-length', '5443'), ('server', 'GitHub.com'), ('last-modified', 'Fri, 06 Sep 2013 12:51:22 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '"654d1a29abe3a61b096e8bffbc61c162"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Fri, 06 Sep 2013 15:05:21 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1378482241')] -{"url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188/labels{/name}","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188/comments","events_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188/events","html_url":"https://github.com/jacquev6/PyGithub/issues/188","id":17736533,"number":188,"title":"Getting the status of GitHub","user":{"login":"ruxandraburtica","id":797922,"avatar_url":"https://2.gravatar.com/avatar/5703c5907fc67b679be40fd307b07733?d=https%3A%2F%2Fidenticons.github.com%2F470a720db37e19afad67c34e30ffcd85.png","gravatar_id":"5703c5907fc67b679be40fd307b07733","url":"https://api.github.com/users/ruxandraburtica","html_url":"https://github.com/ruxandraburtica","followers_url":"https://api.github.com/users/ruxandraburtica/followers","following_url":"https://api.github.com/users/ruxandraburtica/following{/other_user}","gists_url":"https://api.github.com/users/ruxandraburtica/gists{/gist_id}","starred_url":"https://api.github.com/users/ruxandraburtica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruxandraburtica/subscriptions","organizations_url":"https://api.github.com/users/ruxandraburtica/orgs","repos_url":"https://api.github.com/users/ruxandraburtica/repos","events_url":"https://api.github.com/users/ruxandraburtica/events{/privacy}","received_events_url":"https://api.github.com/users/ruxandraburtica/received_events","type":"User"},"labels":[{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Functionalities","name":"Functionalities","color":"e102d8"},{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Requested+by+user","name":"Requested by user","color":"e10c02"}],"state":"closed","assignee":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"milestone":{"url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/31","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/31/labels","id":402388,"number":31,"title":"Version 1.19.0","description":"","creator":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"open_issues":0,"closed_issues":3,"state":"open","created_at":"2013-08-15T05:54:47Z","updated_at":"2013-09-06T09:42:02Z","due_on":null},"comments":2,"created_at":"2013-08-07T08:57:49Z","updated_at":"2013-09-06T09:11:57Z","closed_at":"2013-09-06T09:11:57Z","pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"Maybe I haven't found it, but it would be very useful to have methods for checking the status of the GitHub API (https://status.github.com/api)","closed_by":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"}} +{"url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188/labels{/name}","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188/comments","events_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/188/events","html_url":"https://github.com/jacquev6/PyGithub/issues/188","id":17736533,"number":188,"title":"Getting the status of GitHub","user":{"login":"ruxandraburtica","id":797922,"avatar_url":"https://2.gravatar.com/avatar/5703c5907fc67b679be40fd307b07733?d=https%3A%2F%2Fidenticons.github.com%2F470a720db37e19afad67c34e30ffcd85.png","gravatar_id":"5703c5907fc67b679be40fd307b07733","url":"https://api.github.com/users/ruxandraburtica","html_url":"https://github.com/ruxandraburtica","followers_url":"https://api.github.com/users/ruxandraburtica/followers","following_url":"https://api.github.com/users/ruxandraburtica/following{/other_user}","gists_url":"https://api.github.com/users/ruxandraburtica/gists{/gist_id}","starred_url":"https://api.github.com/users/ruxandraburtica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruxandraburtica/subscriptions","organizations_url":"https://api.github.com/users/ruxandraburtica/orgs","repos_url":"https://api.github.com/users/ruxandraburtica/repos","events_url":"https://api.github.com/users/ruxandraburtica/events{/privacy}","received_events_url":"https://api.github.com/users/ruxandraburtica/received_events","type":"User"},"labels":[{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Functionalities","name":"Functionalities","color":"e102d8"},{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Requested+by+user","name":"Requested by user","color":"e10c02"}],"state":"closed","assignees":[{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"}],"milestone":{"url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/31","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/31/labels","id":402388,"number":31,"title":"Version 1.19.0","description":"","creator":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"},"open_issues":0,"closed_issues":3,"state":"open","created_at":"2013-08-15T05:54:47Z","updated_at":"2013-09-06T09:42:02Z","due_on":null},"comments":2,"created_at":"2013-08-07T08:57:49Z","updated_at":"2013-09-06T09:11:57Z","closed_at":"2013-09-06T09:11:57Z","pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"Maybe I haven't found it, but it would be very useful to have methods for checking the status of the GitHub API (https://status.github.com/api)","closed_by":{"login":"jacquev6","id":327146,"avatar_url":"https://0.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https%3A%2F%2Fidenticons.github.com%2Ffadfb5f7088ef66579d198a3c9a4935e.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User"}} https GET @@ -299,7 +299,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/compare/master...develop?page=1&per_page=250 +/repos/jacquev6/PyGithub/compare/master...develop?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 @@ -354,7 +354,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a +/repos/jacquev6/PyGithub/commits/1292bf0e22c796e91cc3d6e24b544aece8c21f2a?page=1 {'If-None-Match': '"91582e2dc24ad5461e61062c01b32969"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'token private_token_removed', 'If-Modified-Since': 'Wed, 09 May 2012 16:22:33 GMT'} None 304 @@ -376,7 +376,7 @@ https GET api.github.com None -/repos/jacquev6/PyGithub/compare/master...develop +/repos/jacquev6/PyGithub/compare/master...develop?page=1 {'If-None-Match': '"ff2ab76c56b865233dfb98f5804276b6"', 'User-Agent': 'PyGithub/Python', 'Authorization': 'token private_token_removed', 'If-Modified-Since': 'Fri, 06 Sep 2013 09:04:41 GMT'} None 304 diff --git a/tests/ReplayData/GitCommitVerification.setUp.txt b/tests/ReplayData/GitCommitVerification.setUp.txt index 63d4b3a69f..02a575762a 100644 --- a/tests/ReplayData/GitCommitVerification.setUp.txt +++ b/tests/ReplayData/GitCommitVerification.setUp.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/801d64a4c5c0fcb63f695e0f6799117e76e5fe67 +/repos/PyGithub/PyGithub/commits/801d64a4c5c0fcb63f695e0f6799117e76e5fe67?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/Issue.testEditResetAssignee.txt b/tests/ReplayData/Issue.testEditResetAssignees.txt similarity index 99% rename from tests/ReplayData/Issue.testEditResetAssignee.txt rename to tests/ReplayData/Issue.testEditResetAssignees.txt index 60894b01bb..3dab3fab2d 100644 --- a/tests/ReplayData/Issue.testEditResetAssignee.txt +++ b/tests/ReplayData/Issue.testEditResetAssignees.txt @@ -4,7 +4,7 @@ api.github.com None /repos/PyGithub/PyGithub/issues/28 {'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -{"assignee": ""} +{"assignees": []} 200 [('status', '200 OK'), ('content-length', '1853'), ('x-ratelimit-limit', '5000'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-remaining', '4980'), ('server', 'nginx'), ('connection', 'keep-alive'), ('etag', '"6947b498e9fd9f792130d6c80982b949"'), ('cache-control', 'max-age=0, private, must-revalidate'), ('date', 'Tue, 11 Sep 2012 18:47:24 GMT'), ('x-github-media-type', 'github.beta; format=json'), ('content-type', 'application/json; charset=utf-8')] {"body":"Body edited by PyGithub","closed_at":"2012-05-26T14:59:33Z","milestone":{"due_on":"2012-03-13T07:00:00Z","description":"","created_at":"2012-03-08T12:22:10Z","closed_issues":3,"title":"Version 0.4","open_issues":0,"state":"closed","creator":{"login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","id":327146},"number":1,"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/1","id":93546},"labels":[{"color":"e10c02","name":"Bug","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/Bug"},{"color":"02e10c","name":"Question","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/Question"}],"user":{"login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","id":327146},"pull_request":{"html_url":null,"patch_url":null,"diff_url":null},"created_at":"2012-05-19T10:38:23Z","comments":0,"closed_by":{"login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","url":"https://api.github.com/users/jacquev6","id":327146},"title":"Issue created by PyGithub","html_url":"https://github.com/PyGithub/PyGithub/issues/28","assignee":null,"state":"closed","number":28,"updated_at":"2012-09-11T18:47:24Z","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","id":4653757} diff --git a/tests/ReplayData/Issue.testEditWithAllParameters.txt b/tests/ReplayData/Issue.testEditWithAllParameters.txt index 65dceebc07..5d1d19ef53 100644 --- a/tests/ReplayData/Issue.testEditWithAllParameters.txt +++ b/tests/ReplayData/Issue.testEditWithAllParameters.txt @@ -26,7 +26,7 @@ api.github.com None /repos/PyGithub/PyGithub/issues/28 {'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -{"body": "Body edited by PyGithub", "title": "Title edited by PyGithub", "labels": ["Bug"], "assignee": "jacquev6", "assignees": ["jacquev6"], "state": "open", "milestone": 2} +{"body": "Body edited by PyGithub", "title": "Title edited by PyGithub", "labels": ["Bug"], "assignees": ["jacquev6"], "state": "closed", "state_reason": "completed", "milestone": 2} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4992'), ('content-length', '2034'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"98bbbf2b2187bf5cdd9aead53ecc2b97"'), ('date', 'Sat, 19 May 2012 10:42:26 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"assignee":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"assignees":[{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146}],"updated_at":"2012-05-19T10:42:25Z","body":"Body edited by PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","comments":0,"number":28,"title":"Title edited by PyGithub","pull_request":{"diff_url":null,"patch_url":null,"html_url":null},"closed_at":null,"labels":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/labels/Bug","name":"Bug","color":"e10c02"}],"closed_by":null,"html_url":"https://github.com/PyGithub/PyGithub/issues/28","created_at":"2012-05-19T10:38:23Z","state":"open","user":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"id":4653757,"milestone":{"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/2","due_on":null,"closed_issues":1,"creator":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"number":2,"open_issues":11,"title":"Version 1.0: coherent public interface","created_at":"2012-03-08T12:22:28Z","state":"open","description":"Heavy rewrite to have:\r\n* a fully coherent public interface\r\n* usable stack-traces in case of exception\r\n* more explicit exceptions\r\n* more readable code (for library exploration, auto-completion in IDEs, etc.)\r\n\r\nSee working branch https://github.com/PyGithub/PyGithub/tree/topic/RewriteWithGeneratedCode","id":93547}} +{"assignee":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"assignees":[{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146}],"updated_at":"2012-05-19T10:42:25Z","body":"Body edited by PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","comments":0,"number":28,"title":"Title edited by PyGithub","pull_request":{"diff_url":null,"patch_url":null,"html_url":null},"closed_at":null,"labels":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/labels/Bug","name":"Bug","color":"e10c02"}],"closed_by":null,"html_url":"https://github.com/PyGithub/PyGithub/issues/28","created_at":"2012-05-19T10:38:23Z","state":"closed","user":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"id":4653757,"milestone":{"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/2","due_on":null,"closed_issues":1,"creator":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","id":327146},"number":2,"open_issues":11,"title":"Version 1.0: coherent public interface","created_at":"2012-03-08T12:22:28Z","state":"open","description":"Heavy rewrite to have:\r\n* a fully coherent public interface\r\n* usable stack-traces in case of exception\r\n* more explicit exceptions\r\n* more readable code (for library exploration, auto-completion in IDEs, etc.)\r\n\r\nSee working branch https://github.com/PyGithub/PyGithub/tree/topic/RewriteWithGeneratedCode","id":93547}} diff --git a/tests/ReplayData/Issue214.setUp.txt b/tests/ReplayData/Issue214.setUp.txt index ba9abec49e..40982354bf 100644 --- a/tests/ReplayData/Issue214.setUp.txt +++ b/tests/ReplayData/Issue214.setUp.txt @@ -29,4 +29,4 @@ None None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4766'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'A99159CE:6DAB:78E783D:52AF94DB'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('content-length', '1621'), ('server', 'GitHub.com'), ('last-modified', 'Mon, 16 Dec 2013 23:51:58 GMT'), ('x-ratelimit-limit', '5000'), ('etag', '"10591bd2c625813e49751bcca25b7c61"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Tue, 17 Dec 2013 00:03:39 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1387240227')] -{"url":"https://api.github.com/repos/farrd/PyGithub/issues/1","labels_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/comments","events_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/events","html_url":"https://github.com/farrd/PyGithub/issues/1","id":24389294,"number":1,"title":"Test Issue","user":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"labels":[],"state":"open","assignee":null,"milestone":null,"comments":0,"created_at":"2013-12-16T23:36:11Z","updated_at":"2013-12-16T23:51:58Z","closed_at":null,"pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"","closed_by":null} +{"url":"https://api.github.com/repos/farrd/PyGithub/issues/1","labels_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/comments","events_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/events","html_url":"https://github.com/farrd/PyGithub/issues/1","id":24389294,"number":1,"title":"Test Issue","user":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"labels":[],"state":"open","assignees":[],"milestone":null,"comments":0,"created_at":"2013-12-16T23:36:11Z","updated_at":"2013-12-16T23:51:58Z","closed_at":null,"pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"","closed_by":null} diff --git a/tests/ReplayData/Issue214.testEditIssue.txt b/tests/ReplayData/Issue214.testEditIssue.txt index 00ab5eccca..ceae8bbaa9 100644 --- a/tests/ReplayData/Issue214.testEditIssue.txt +++ b/tests/ReplayData/Issue214.testEditIssue.txt @@ -4,10 +4,10 @@ api.github.com None /repos/farrd/PyGithub/issues/1 {'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -{"assignee": "farrd"} +{"assignees": ["farrd"]} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4824'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'A99159CE:043C:7377930:52AF921D'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('content-length', '2575'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('etag', '"fa6d38417e4f455619cdfe179b7b1e40"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Mon, 16 Dec 2013 23:51:58 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1387240227')] -{"url":"https://api.github.com/repos/farrd/PyGithub/issues/1","labels_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/comments","events_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/events","html_url":"https://github.com/farrd/PyGithub/issues/1","id":24389294,"number":1,"title":"Test Issue","user":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"labels":[],"state":"open","assignee":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"milestone":null,"comments":0,"created_at":"2013-12-16T23:36:11Z","updated_at":"2013-12-16T23:51:58Z","closed_at":null,"pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"","closed_by":null} +{"url":"https://api.github.com/repos/farrd/PyGithub/issues/1","labels_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/comments","events_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/events","html_url":"https://github.com/farrd/PyGithub/issues/1","id":24389294,"number":1,"title":"Test Issue","user":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"labels":[],"state":"open","assignees":[{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2013-12-16T23:36:11Z","updated_at":"2013-12-16T23:51:58Z","closed_at":null,"pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"","closed_by":null} https PATCH @@ -15,7 +15,7 @@ api.github.com None /repos/farrd/PyGithub/issues/1 {'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -{"assignee": ""} +{"assignees": []} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4823'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'A99159CE:043C:7377A01:52AF921E'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('content-length', '1621'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('etag', '"f6bb6e7859e5f62cdc99f6fc6cbe0c09"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Mon, 16 Dec 2013 23:51:58 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1387240227')] -{"url":"https://api.github.com/repos/farrd/PyGithub/issues/1","labels_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/comments","events_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/events","html_url":"https://github.com/farrd/PyGithub/issues/1","id":24389294,"number":1,"title":"Test Issue","user":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"labels":[],"state":"open","assignee":null,"milestone":null,"comments":0,"created_at":"2013-12-16T23:36:11Z","updated_at":"2013-12-16T23:51:58Z","closed_at":null,"pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"","closed_by":null} +{"url":"https://api.github.com/repos/farrd/PyGithub/issues/1","labels_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/comments","events_url":"https://api.github.com/repos/farrd/PyGithub/issues/1/events","html_url":"https://github.com/farrd/PyGithub/issues/1","id":24389294,"number":1,"title":"Test Issue","user":{"login":"farrd","id":1387834,"avatar_url":"https://gravatar.com/avatar/3281acd8cd12337bfba7577736ae663e?d=https%3A%2F%2Fidenticons.github.com%2Fe57fcb2ce01df0e0a8305b6fff8070d8.png&r=x","gravatar_id":"3281acd8cd12337bfba7577736ae663e","url":"https://api.github.com/users/farrd","html_url":"https://github.com/farrd","followers_url":"https://api.github.com/users/farrd/followers","following_url":"https://api.github.com/users/farrd/following{/other_user}","gists_url":"https://api.github.com/users/farrd/gists{/gist_id}","starred_url":"https://api.github.com/users/farrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/farrd/subscriptions","organizations_url":"https://api.github.com/users/farrd/orgs","repos_url":"https://api.github.com/users/farrd/repos","events_url":"https://api.github.com/users/farrd/events{/privacy}","received_events_url":"https://api.github.com/users/farrd/received_events","type":"User","site_admin":false},"labels":[],"state":"open","assignees":[],"milestone":null,"comments":0,"created_at":"2013-12-16T23:36:11Z","updated_at":"2013-12-16T23:51:58Z","closed_at":null,"pull_request":{"html_url":null,"diff_url":null,"patch_url":null},"body":"","closed_by":null} diff --git a/tests/ReplayData/OrganizationCodeScanAlert.setUp.txt b/tests/ReplayData/OrganizationCodeScanAlert.setUp.txt new file mode 100644 index 0000000000..b41c19d328 --- /dev/null +++ b/tests/ReplayData/OrganizationCodeScanAlert.setUp.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 18:16:27 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/"f282d5c3dc6b4bd9c8edaf8cff5b7a15d70611ca9561bc08c67b3bf190cf273f"'), ('Last-Modified', 'Tue, 29 Nov 2022 19:44:55 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:org, read:org, repo, user, write:org'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1756319783'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'D73B:2560D4:4620D3E:47B0EC9:68AF4B79')] +{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","url":"https://api.github.com/orgs/github","repos_url":"https://api.github.com/orgs/github/repos","events_url":"https://api.github.com/orgs/github/events","hooks_url":"https://api.github.com/orgs/github/hooks","issues_url":"https://api.github.com/orgs/github/issues","members_url":"https://api.github.com/orgs/github/members{/member}","public_members_url":"https://api.github.com/orgs/github/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","description":"How people build software.","name":"GitHub","company":null,"blog":"https://github.com/about","location":"San Francisco, CA","email":null,"twitter_username":null,"is_verified":true,"has_organization_projects":true,"has_repository_projects":true,"public_repos":522,"public_gists":0,"followers":58458,"following":0,"html_url":"https://github.com/github","created_at":"2008-05-11T04:37:31Z","updated_at":"2022-11-29T19:44:55Z","archived_at":null,"type":"Organization"} diff --git a/tests/ReplayData/OrganizationCodeScanAlert.testGetAlertsWithArguments.txt b/tests/ReplayData/OrganizationCodeScanAlert.testGetAlertsWithArguments.txt new file mode 100644 index 0000000000..014c19370e --- /dev/null +++ b/tests/ReplayData/OrganizationCodeScanAlert.testGetAlertsWithArguments.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/code-scanning/alerts?tool_name=CodeQL&ref=refs%2Fheads%2Fmain&sort=created&direction=asc&state=open&severity=error +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 17:44:15 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1756319783'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '8337:158A54:2B157EF:2C0629F:68AF43EF')] +[{"number":4,"created_at":"2020-02-13T12:29:18Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4","html_url":"https://github.com/octocat/hello-world/code-scanning/4","state":"open","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"js/zipslip","severity":"error","tags":["security","external/cwe/cwe-022"],"description":"Arbitrary file write during zip extraction","name":"js/zipslip"},"tool":{"name":"CodeQL","guid":null,"version":"2.4.0"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql-analysis.yml:CodeQL-Build","category":".github/workflows/codeql-analysis.yml:CodeQL-Build","environment":"{}","state":"open","commit_sha":"39406e42cb832f683daa691dd652a8dc36ee8930","message":{"text":"This path depends on a user-provided value."},"location":{"path":"spec-main/api-session-spec.ts","start_line":917,"end_line":917,"start_column":7,"end_column":18},"classifications":["test"]},"instances_url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4/instances","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"Thisyourfirstrepo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"}},{"number":3,"created_at":"2020-02-13T12:29:18Z","updated_at":"2025-07-23T07:04:24Z","url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/3","html_url":"https://github.com/octocat/hello-world/code-scanning/3","state":"dismissed","dismissed_by":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"dismissed_at":"2020-02-14T12:29:18Z","dismissed_reason":"falsepositive","dismissed_comment":"Thisalertisnotactuallycorrect,becausethere'sasanitizerincludedinthelibrary.","rule":{"id":"js/zipslip","severity":"error","tags":["security","external/cwe/cwe-022"],"description":"Arbitrary file write during zip extraction","name":"js/zipslip"},"tool":{"name":"CodeQL","guid":null,"version":"2.4.0"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql-analysis.yml:CodeQL-Build","category":".github/workflows/codeql-analysis.yml:CodeQL-Build","environment":"{}","state":"open","commit_sha":"39406e42cb832f683daa691dd652a8dc36ee8930","message":{"text":"This path depends on a user-provided value."},"location":{"path":"lib/ab12-gen.js","start_line":917,"end_line":917,"start_column":7,"end_column":18},"classifications":[]},"instances_url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/3/instances","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"Thisyourfirstrepo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"}}] diff --git a/tests/ReplayData/OrganizationCodeScanAlert.testMultipleAlerts.txt b/tests/ReplayData/OrganizationCodeScanAlert.testMultipleAlerts.txt new file mode 100644 index 0000000000..60a507bd22 --- /dev/null +++ b/tests/ReplayData/OrganizationCodeScanAlert.testMultipleAlerts.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/code-scanning/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 17:44:15 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1756319783'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '8337:158A54:2B157EF:2C0629F:68AF43EF')] +[{"number":4,"created_at":"2020-02-13T12:29:18Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4","html_url":"https://github.com/octocat/hello-world/code-scanning/4","state":"open","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"js/zipslip","severity":"error","tags":["security","external/cwe/cwe-022"],"description":"Arbitrary file write during zip extraction","name":"js/zipslip"},"tool":{"name":"CodeQL","guid":null,"version":"2.4.0"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql-analysis.yml:CodeQL-Build","category":".github/workflows/codeql-analysis.yml:CodeQL-Build","environment":"{}","state":"open","commit_sha":"39406e42cb832f683daa691dd652a8dc36ee8930","message":{"text":"This path depends on a user-provided value."},"location":{"path":"spec-main/api-session-spec.ts","start_line":917,"end_line":917,"start_column":7,"end_column":18},"classifications":["test"]},"instances_url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4/instances","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"Thisyourfirstrepo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"}},{"number":3,"created_at":"2020-02-13T12:29:18Z","updated_at":"2025-07-23T07:04:24Z","url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/3","html_url":"https://github.com/octocat/hello-world/code-scanning/3","state":"dismissed","dismissed_by":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"dismissed_at":"2020-02-14T12:29:18Z","dismissed_reason":"falsepositive","dismissed_comment":"Thisalertisnotactuallycorrect,becausethere'sasanitizerincludedinthelibrary.","rule":{"id":"js/zipslip","severity":"error","tags":["security","external/cwe/cwe-022"],"description":"Arbitrary file write during zip extraction","name":"js/zipslip"},"tool":{"name":"CodeQL","guid":null,"version":"2.4.0"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql-analysis.yml:CodeQL-Build","category":".github/workflows/codeql-analysis.yml:CodeQL-Build","environment":"{}","state":"open","commit_sha":"39406e42cb832f683daa691dd652a8dc36ee8930","message":{"text":"This path depends on a user-provided value."},"location":{"path":"lib/ab12-gen.js","start_line":917,"end_line":917,"start_column":7,"end_column":18},"classifications":[]},"instances_url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/3/instances","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"Thisyourfirstrepo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"}}] diff --git a/tests/ReplayData/OrganizationCodeScanAlert.testRepr.txt b/tests/ReplayData/OrganizationCodeScanAlert.testRepr.txt new file mode 100644 index 0000000000..60a507bd22 --- /dev/null +++ b/tests/ReplayData/OrganizationCodeScanAlert.testRepr.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/code-scanning/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 17:44:15 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1756319783'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '8337:158A54:2B157EF:2C0629F:68AF43EF')] +[{"number":4,"created_at":"2020-02-13T12:29:18Z","updated_at":"2025-08-25T16:03:10Z","url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4","html_url":"https://github.com/octocat/hello-world/code-scanning/4","state":"open","dismissed_by":null,"dismissed_at":null,"dismissed_reason":null,"dismissed_comment":null,"rule":{"id":"js/zipslip","severity":"error","tags":["security","external/cwe/cwe-022"],"description":"Arbitrary file write during zip extraction","name":"js/zipslip"},"tool":{"name":"CodeQL","guid":null,"version":"2.4.0"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql-analysis.yml:CodeQL-Build","category":".github/workflows/codeql-analysis.yml:CodeQL-Build","environment":"{}","state":"open","commit_sha":"39406e42cb832f683daa691dd652a8dc36ee8930","message":{"text":"This path depends on a user-provided value."},"location":{"path":"spec-main/api-session-spec.ts","start_line":917,"end_line":917,"start_column":7,"end_column":18},"classifications":["test"]},"instances_url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/4/instances","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"Thisyourfirstrepo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"}},{"number":3,"created_at":"2020-02-13T12:29:18Z","updated_at":"2025-07-23T07:04:24Z","url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/3","html_url":"https://github.com/octocat/hello-world/code-scanning/3","state":"dismissed","dismissed_by":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"dismissed_at":"2020-02-14T12:29:18Z","dismissed_reason":"falsepositive","dismissed_comment":"Thisalertisnotactuallycorrect,becausethere'sasanitizerincludedinthelibrary.","rule":{"id":"js/zipslip","severity":"error","tags":["security","external/cwe/cwe-022"],"description":"Arbitrary file write during zip extraction","name":"js/zipslip"},"tool":{"name":"CodeQL","guid":null,"version":"2.4.0"},"most_recent_instance":{"ref":"refs/heads/main","analysis_key":".github/workflows/codeql-analysis.yml:CodeQL-Build","category":".github/workflows/codeql-analysis.yml:CodeQL-Build","environment":"{}","state":"open","commit_sha":"39406e42cb832f683daa691dd652a8dc36ee8930","message":{"text":"This path depends on a user-provided value."},"location":{"path":"lib/ab12-gen.js","start_line":917,"end_line":917,"start_column":7,"end_column":18},"classifications":[]},"instances_url":"https://api.github.com/repos/octocat/hello-world/code-scanning/alerts/3/instances","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"Thisyourfirstrepo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"}}] diff --git a/tests/ReplayData/OrganizationDependabotAlert.setUp.txt b/tests/ReplayData/OrganizationDependabotAlert.setUp.txt new file mode 100644 index 0000000000..da0fc69990 --- /dev/null +++ b/tests/ReplayData/OrganizationDependabotAlert.setUp.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 23:20:59 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/"3ee3de7043a5f044d4caf829844f7d3739ce7dfb5a0715e613ac439451e487f0"'), ('Last-Modified', 'Tue, 29 Nov 2022 19:44:55 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:org, read:org, repo, user, write:org'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4990'), ('X-RateLimit-Reset', '1756337425'), ('X-RateLimit-Used', '10'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EF7F:34E79D:770D84:79A755:68AF92DA')] +{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","url":"https://api.github.com/orgs/github","repos_url":"https://api.github.com/orgs/github/repos","events_url":"https://api.github.com/orgs/github/events","hooks_url":"https://api.github.com/orgs/github/hooks","issues_url":"https://api.github.com/orgs/github/issues","members_url":"https://api.github.com/orgs/github/members{/member}","public_members_url":"https://api.github.com/orgs/github/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","description":"How people build software.","name":"GitHub","company":null,"blog":"https://github.com/about","location":"San Francisco, CA","email":null,"twitter_username":null,"is_verified":true,"has_organization_projects":true,"has_repository_projects":true,"public_repos":522,"public_gists":0,"followers":58472,"following":0,"html_url":"https://github.com/github","created_at":"2008-05-11T04:37:31Z","updated_at":"2022-11-29T19:44:55Z","archived_at":null,"type":"Organization"} diff --git a/tests/ReplayData/OrganizationDependabotAlert.testGetAlertsWithAllArguments.txt b/tests/ReplayData/OrganizationDependabotAlert.testGetAlertsWithAllArguments.txt new file mode 100644 index 0000000000..a8d604889c --- /dev/null +++ b/tests/ReplayData/OrganizationDependabotAlert.testGetAlertsWithAllArguments.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/dependabot/alerts?ecosystem=pip&package=ansible&scope=runtime&sort=created&direction=asc&state=open&severity=medium +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 22:30:26 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 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', '1756337425'), ('X-RateLimit-Used', '3'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E3BF:231313:420118:43680C:68AF8701')] +[{"number":1,"state":"open","dependency":{"package":{"ecosystem":"pip","name":"ansible"},"manifest_path":"path/to/requirements.txt","scope":"runtime"},"security_advisory":{"ghsa_id":"GHSA-8f4m-hccc-8qph","cve_id":"CVE-2021-20191","summary":"Insertion of Sensitive Information into Log File in ansible","description":"A flaw was found in ansible. Credentials, such as secrets, are being disclosed in console log by default and not protected by no_log feature when using those modules. An attacker can take advantage of this information to steal those credentials. The highest threat from this vulnerability is to data confidentiality.","vulnerabilities":[{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":">= 2.9.0, < 2.9.18","first_patched_version":{"identifier":"2.9.18"}},{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":"< 2.8.19","first_patched_version":{"identifier":"2.8.19"}},{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":">= 2.10.0, < 2.10.7","first_patched_version":{"identifier":"2.10.7"}}],"severity":"medium","cvss":{"vector_string":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":5.5},"cvss_severities":{"cvss_v3":{"vector_string":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":5.5},"cvss_v4":{"vector_string":"CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":8.5}},"cwes":[{"cwe_id":"CWE-532","name":"Insertion of Sensitive Information into Log File"}],"identifiers":[{"type":"GHSA","value":"GHSA-8f4m-hccc-8qph"},{"type":"CVE","value":"CVE-2021-20191"}],"references":[{"url":"https://nvd.nist.gov/vuln/detail/CVE-2021-20191"},{"url":"https://access.redhat.com/security/cve/cve-2021-20191"},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=1916813"}],"published_at":"2021-06-01T17:38:00Z","updated_at":"2021-08-12T23:06:00Z","withdrawn_at":null},"security_vulnerability":{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":"< 2.8.19","first_patched_version":{"identifier":"2.8.19"}},"url":"https://api.github.com/repos/octo-org/hello-world/dependabot/alerts/1","html_url":"https://github.com/octo-org/hello-world/security/dependabot/1","created_at":"2022-06-14T15:21:52Z","updated_at":"2022-06-14T15:21:52Z","dismissed_at":null,"dismissed_by":null,"dismissed_reason":null,"dismissed_comment":null,"fixed_at":null,"repository":{"id":664700648,"node_id":"MDEwOlJlcG9zaXRvcnk2NjQ3MDA2NDg=","name":"hello-world","full_name":"octo-org/hello-world","owner":{"login":"octo-org","id":6811672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=","avatar_url":"https://avatars3.githubusercontent.com/u/6811672?v=4","gravatar_id":"","url":"https://api.github.com/users/octo-org","html_url":"https://github.com/octo-org","followers_url":"https://api.github.com/users/octo-org/followers","following_url":"https://api.github.com/users/octo-org/following{/other_user}","gists_url":"https://api.github.com/users/octo-org/gists{/gist_id}","starred_url":"https://api.github.com/users/octo-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octo-org/subscriptions","organizations_url":"https://api.github.com/users/octo-org/orgs","repos_url":"https://api.github.com/users/octo-org/repos","events_url":"https://api.github.com/users/octo-org/events{/privacy}","received_events_url":"https://api.github.com/users/octo-org/received_events","type":"Organization","site_admin":false},"private":true,"html_url":"https://github.com/octo-org/hello-world","description":null,"fork":false,"url":"https://api.github.com/repos/octo-org/hello-world","archive_url":"https://api.github.com/repos/octo-org/hello-world/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octo-org/hello-world/assignees{/user}","blobs_url":"https://api.github.com/repos/octo-org/hello-world/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octo-org/hello-world/branches{/branch}","collaborators_url":"https://api.github.com/repos/octo-org/hello-world/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octo-org/hello-world/comments{/number}","commits_url":"https://api.github.com/repos/octo-org/hello-world/commits{/sha}","compare_url":"https://api.github.com/repos/octo-org/hello-world/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octo-org/hello-world/contents/{+path}","contributors_url":"https://api.github.com/repos/octo-org/hello-world/contributors","deployments_url":"https://api.github.com/repos/octo-org/hello-world/deployments","downloads_url":"https://api.github.com/repos/octo-org/hello-world/downloads","events_url":"https://api.github.com/repos/octo-org/hello-world/events","forks_url":"https://api.github.com/repos/octo-org/hello-world/forks","git_commits_url":"https://api.github.com/repos/octo-org/hello-world/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octo-org/hello-world/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octo-org/hello-world/git/tags{/sha}","hooks_url":"https://api.github.com/repos/octo-org/hello-world/hooks","issue_comment_url":"https://api.github.com/repos/octo-org/hello-world/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octo-org/hello-world/issues/events{/number}","issues_url":"https://api.github.com/repos/octo-org/hello-world/issues{/number}","keys_url":"https://api.github.com/repos/octo-org/hello-world/keys{/key_id}","labels_url":"https://api.github.com/repos/octo-org/hello-world/labels{/name}","languages_url":"https://api.github.com/repos/octo-org/hello-world/languages","merges_url":"https://api.github.com/repos/octo-org/hello-world/merges","milestones_url":"https://api.github.com/repos/octo-org/hello-world/milestones{/number}","notifications_url":"https://api.github.com/repos/octo-org/hello-world/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octo-org/hello-world/pulls{/number}","releases_url":"https://api.github.com/repos/octo-org/hello-world/releases{/id}","stargazers_url":"https://api.github.com/repos/octo-org/hello-world/stargazers","statuses_url":"https://api.github.com/repos/octo-org/hello-world/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octo-org/hello-world/subscribers","subscription_url":"https://api.github.com/repos/octo-org/hello-world/subscription","tags_url":"https://api.github.com/repos/octo-org/hello-world/tags","teams_url":"https://api.github.com/repos/octo-org/hello-world/teams","trees_url":"https://api.github.com/repos/octo-org/hello-world/git/trees{/sha}"}}] diff --git a/tests/ReplayData/OrganizationDependabotAlert.testMultipleAlerts.txt b/tests/ReplayData/OrganizationDependabotAlert.testMultipleAlerts.txt new file mode 100644 index 0000000000..e8caf0473f --- /dev/null +++ b/tests/ReplayData/OrganizationDependabotAlert.testMultipleAlerts.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/dependabot/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 23:20:59 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4989'), ('X-RateLimit-Reset', '1756337425'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EF7F:34E79D:770FCB:79A9A8:68AF92DB')] +[{"number":2,"state":"dismissed","dependency":{"package":{"ecosystem":"pip","name":"django"},"manifest_path":"path/to/requirements.txt","scope":"runtime"},"security_advisory":{"ghsa_id":"GHSA-rf4j-j272-fj86","cve_id":"CVE-2018-6188","summary":"Django allows remote attackers to obtain potentially sensitive information by leveraging data exposure from the confirm_login_allowed() method, as demonstrated by discovering whether a user account is inactive","description":"django.contrib.auth.forms.AuthenticationForm in Django 2.0 before 2.0.2, and 1.11.8 and 1.11.9, allows remote attackers to obtain potentially sensitive information by leveraging data exposure from the confirm_login_allowed() method, as demonstrated by discovering whether a user account is inactive.","vulnerabilities":[{"package":{"ecosystem":"pip","name":"django"},"severity":"high","vulnerable_version_range":">= 2.0.0, < 2.0.2","first_patched_version":{"identifier":"2.0.2"}},{"package":{"ecosystem":"pip","name":"django"},"severity":"high","vulnerable_version_range":">= 1.11.8, < 1.11.10","first_patched_version":{"identifier":"1.11.10"}}],"severity":"high","cvss":{"vector_string":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","score":7.5},"cvss_severities":{"cvss_v3":{"vector_string":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","score":7.5},"cvss_v4":{"vector_string":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N","score":8.7}},"epss":[{"percentage":0.00045,"percentile":"0.16001e0"}],"cwes":[{"cwe_id":"CWE-200","name":"Exposure of Sensitive Information to an Unauthorized Actor"}],"identifiers":[{"type":"GHSA","value":"GHSA-rf4j-j272-fj86"},{"type":"CVE","value":"CVE-2018-6188"}],"references":[{"url":"https://nvd.nist.gov/vuln/detail/CVE-2018-6188"},{"url":"https://github.com/advisories/GHSA-rf4j-j272-fj86"},{"url":"https://usn.ubuntu.com/3559-1/"},{"url":"https://www.djangoproject.com/weblog/2018/feb/01/security-releases/"},{"url":"http://www.securitytracker.com/id/1040422"}],"published_at":"2018-10-03T21:13:54Z","updated_at":"2022-04-26T18:35:37Z","withdrawn_at":null},"security_vulnerability":{"package":{"ecosystem":"pip","name":"django"},"severity":"high","vulnerable_version_range":">= 2.0.0, < 2.0.2","first_patched_version":{"identifier":"2.0.2"}},"url":"https://api.github.com/repos/octo-org/octo-repo/dependabot/alerts/2","html_url":"https://github.com/octo-org/octo-repo/security/dependabot/2","created_at":"2022-06-15T07:43:03Z","updated_at":"2022-08-23T14:29:47Z","dismissed_at":"2022-08-23T14:29:47Z","dismissed_by":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"dismissed_reason":"tolerable_risk","dismissed_comment":"This alert is accurate but we use a sanitizer.","fixed_at":null,"repository":{"id":217723378,"node_id":"MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=","name":"octo-repo","full_name":"octo-org/octo-repo","owner":{"login":"octo-org","id":6811672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=","avatar_url":"https://avatars3.githubusercontent.com/u/6811672?v=4","gravatar_id":"","url":"https://api.github.com/users/octo-org","html_url":"https://github.com/octo-org","followers_url":"https://api.github.com/users/octo-org/followers","following_url":"https://api.github.com/users/octo-org/following{/other_user}","gists_url":"https://api.github.com/users/octo-org/gists{/gist_id}","starred_url":"https://api.github.com/users/octo-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octo-org/subscriptions","organizations_url":"https://api.github.com/users/octo-org/orgs","repos_url":"https://api.github.com/users/octo-org/repos","events_url":"https://api.github.com/users/octo-org/events{/privacy}","received_events_url":"https://api.github.com/users/octo-org/received_events","type":"Organization","site_admin":false},"private":true,"html_url":"https://github.com/octo-org/octo-repo","description":null,"fork":false,"url":"https://api.github.com/repos/octo-org/octo-repo","archive_url":"https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octo-org/octo-repo/assignees{/user}","blobs_url":"https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octo-org/octo-repo/branches{/branch}","collaborators_url":"https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octo-org/octo-repo/comments{/number}","commits_url":"https://api.github.com/repos/octo-org/octo-repo/commits{/sha}","compare_url":"https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octo-org/octo-repo/contents/{+path}","contributors_url":"https://api.github.com/repos/octo-org/octo-repo/contributors","deployments_url":"https://api.github.com/repos/octo-org/octo-repo/deployments","downloads_url":"https://api.github.com/repos/octo-org/octo-repo/downloads","events_url":"https://api.github.com/repos/octo-org/octo-repo/events","forks_url":"https://api.github.com/repos/octo-org/octo-repo/forks","git_commits_url":"https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}","hooks_url":"https://api.github.com/repos/octo-org/octo-repo/hooks","issue_comment_url":"https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}","issues_url":"https://api.github.com/repos/octo-org/octo-repo/issues{/number}","keys_url":"https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}","labels_url":"https://api.github.com/repos/octo-org/octo-repo/labels{/name}","languages_url":"https://api.github.com/repos/octo-org/octo-repo/languages","merges_url":"https://api.github.com/repos/octo-org/octo-repo/merges","milestones_url":"https://api.github.com/repos/octo-org/octo-repo/milestones{/number}","notifications_url":"https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octo-org/octo-repo/pulls{/number}","releases_url":"https://api.github.com/repos/octo-org/octo-repo/releases{/id}","stargazers_url":"https://api.github.com/repos/octo-org/octo-repo/stargazers","statuses_url":"https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octo-org/octo-repo/subscribers","subscription_url":"https://api.github.com/repos/octo-org/octo-repo/subscription","tags_url":"https://api.github.com/repos/octo-org/octo-repo/tags","teams_url":"https://api.github.com/repos/octo-org/octo-repo/teams","trees_url":"https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}"}},{"number":1,"state":"open","dependency":{"package":{"ecosystem":"pip","name":"ansible"},"manifest_path":"path/to/requirements.txt","scope":"runtime"},"security_advisory":{"ghsa_id":"GHSA-8f4m-hccc-8qph","cve_id":"CVE-2021-20191","summary":"Insertion of Sensitive Information into Log File in ansible","description":"A flaw was found in ansible. Credentials, such as secrets, are being disclosed in console log by default and not protected by no_log feature when using those modules. An attacker can take advantage of this information to steal those credentials. The highest threat from this vulnerability is to data confidentiality.","vulnerabilities":[{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":">= 2.9.0, < 2.9.18","first_patched_version":{"identifier":"2.9.18"}},{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":"< 2.8.19","first_patched_version":{"identifier":"2.8.19"}},{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":">= 2.10.0, < 2.10.7","first_patched_version":{"identifier":"2.10.7"}}],"severity":"medium","cvss":{"vector_string":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":5.5},"cvss_severities":{"cvss_v3":{"vector_string":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":5.5},"cvss_v4":{"vector_string":"CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":8.5}},"cwes":[{"cwe_id":"CWE-532","name":"Insertion of Sensitive Information into Log File"}],"identifiers":[{"type":"GHSA","value":"GHSA-8f4m-hccc-8qph"},{"type":"CVE","value":"CVE-2021-20191"}],"references":[{"url":"https://nvd.nist.gov/vuln/detail/CVE-2021-20191"},{"url":"https://access.redhat.com/security/cve/cve-2021-20191"},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=1916813"}],"published_at":"2021-06-01T17:38:00Z","updated_at":"2021-08-12T23:06:00Z","withdrawn_at":null},"security_vulnerability":{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":"< 2.8.19","first_patched_version":{"identifier":"2.8.19"}},"url":"https://api.github.com/repos/octo-org/hello-world/dependabot/alerts/1","html_url":"https://github.com/octo-org/hello-world/security/dependabot/1","created_at":"2022-06-14T15:21:52Z","updated_at":"2022-06-14T15:21:52Z","dismissed_at":null,"dismissed_by":null,"dismissed_reason":null,"dismissed_comment":null,"fixed_at":null,"repository":{"id":664700648,"node_id":"MDEwOlJlcG9zaXRvcnk2NjQ3MDA2NDg=","name":"hello-world","full_name":"octo-org/hello-world","owner":{"login":"octo-org","id":6811672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=","avatar_url":"https://avatars3.githubusercontent.com/u/6811672?v=4","gravatar_id":"","url":"https://api.github.com/users/octo-org","html_url":"https://github.com/octo-org","followers_url":"https://api.github.com/users/octo-org/followers","following_url":"https://api.github.com/users/octo-org/following{/other_user}","gists_url":"https://api.github.com/users/octo-org/gists{/gist_id}","starred_url":"https://api.github.com/users/octo-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octo-org/subscriptions","organizations_url":"https://api.github.com/users/octo-org/orgs","repos_url":"https://api.github.com/users/octo-org/repos","events_url":"https://api.github.com/users/octo-org/events{/privacy}","received_events_url":"https://api.github.com/users/octo-org/received_events","type":"Organization","site_admin":false},"private":true,"html_url":"https://github.com/octo-org/hello-world","description":null,"fork":false,"url":"https://api.github.com/repos/octo-org/hello-world","archive_url":"https://api.github.com/repos/octo-org/hello-world/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octo-org/hello-world/assignees{/user}","blobs_url":"https://api.github.com/repos/octo-org/hello-world/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octo-org/hello-world/branches{/branch}","collaborators_url":"https://api.github.com/repos/octo-org/hello-world/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octo-org/hello-world/comments{/number}","commits_url":"https://api.github.com/repos/octo-org/hello-world/commits{/sha}","compare_url":"https://api.github.com/repos/octo-org/hello-world/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octo-org/hello-world/contents/{+path}","contributors_url":"https://api.github.com/repos/octo-org/hello-world/contributors","deployments_url":"https://api.github.com/repos/octo-org/hello-world/deployments","downloads_url":"https://api.github.com/repos/octo-org/hello-world/downloads","events_url":"https://api.github.com/repos/octo-org/hello-world/events","forks_url":"https://api.github.com/repos/octo-org/hello-world/forks","git_commits_url":"https://api.github.com/repos/octo-org/hello-world/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octo-org/hello-world/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octo-org/hello-world/git/tags{/sha}","hooks_url":"https://api.github.com/repos/octo-org/hello-world/hooks","issue_comment_url":"https://api.github.com/repos/octo-org/hello-world/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octo-org/hello-world/issues/events{/number}","issues_url":"https://api.github.com/repos/octo-org/hello-world/issues{/number}","keys_url":"https://api.github.com/repos/octo-org/hello-world/keys{/key_id}","labels_url":"https://api.github.com/repos/octo-org/hello-world/labels{/name}","languages_url":"https://api.github.com/repos/octo-org/hello-world/languages","merges_url":"https://api.github.com/repos/octo-org/hello-world/merges","milestones_url":"https://api.github.com/repos/octo-org/hello-world/milestones{/number}","notifications_url":"https://api.github.com/repos/octo-org/hello-world/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octo-org/hello-world/pulls{/number}","releases_url":"https://api.github.com/repos/octo-org/hello-world/releases{/id}","stargazers_url":"https://api.github.com/repos/octo-org/hello-world/stargazers","statuses_url":"https://api.github.com/repos/octo-org/hello-world/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octo-org/hello-world/subscribers","subscription_url":"https://api.github.com/repos/octo-org/hello-world/subscription","tags_url":"https://api.github.com/repos/octo-org/hello-world/tags","teams_url":"https://api.github.com/repos/octo-org/hello-world/teams","trees_url":"https://api.github.com/repos/octo-org/hello-world/git/trees{/sha}"}}] diff --git a/tests/ReplayData/OrganizationDependabotAlert.testRepr.txt b/tests/ReplayData/OrganizationDependabotAlert.testRepr.txt new file mode 100644 index 0000000000..9e0358995a --- /dev/null +++ b/tests/ReplayData/OrganizationDependabotAlert.testRepr.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/dependabot/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 22:30:29 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1756337425'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E3BF:231313:420F70:43769C:68AF8704')] +[{"number":2,"state":"dismissed","dependency":{"package":{"ecosystem":"pip","name":"django"},"manifest_path":"path/to/requirements.txt","scope":"runtime"},"security_advisory":{"ghsa_id":"GHSA-rf4j-j272-fj86","cve_id":"CVE-2018-6188","summary":"Django allows remote attackers to obtain potentially sensitive information by leveraging data exposure from the confirm_login_allowed() method, as demonstrated by discovering whether a user account is inactive","description":"django.contrib.auth.forms.AuthenticationForm in Django 2.0 before 2.0.2, and 1.11.8 and 1.11.9, allows remote attackers to obtain potentially sensitive information by leveraging data exposure from the confirm_login_allowed() method, as demonstrated by discovering whether a user account is inactive.","vulnerabilities":[{"package":{"ecosystem":"pip","name":"django"},"severity":"high","vulnerable_version_range":">= 2.0.0, < 2.0.2","first_patched_version":{"identifier":"2.0.2"}},{"package":{"ecosystem":"pip","name":"django"},"severity":"high","vulnerable_version_range":">= 1.11.8, < 1.11.10","first_patched_version":{"identifier":"1.11.10"}}],"severity":"high","cvss":{"vector_string":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","score":7.5},"cvss_severities":{"cvss_v3":{"vector_string":"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","score":7.5},"cvss_v4":{"vector_string":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N","score":8.7}},"epss":[{"percentage":0.00045,"percentile":"0.16001e0"}],"cwes":[{"cwe_id":"CWE-200","name":"Exposure of Sensitive Information to an Unauthorized Actor"}],"identifiers":[{"type":"GHSA","value":"GHSA-rf4j-j272-fj86"},{"type":"CVE","value":"CVE-2018-6188"}],"references":[{"url":"https://nvd.nist.gov/vuln/detail/CVE-2018-6188"},{"url":"https://github.com/advisories/GHSA-rf4j-j272-fj86"},{"url":"https://usn.ubuntu.com/3559-1/"},{"url":"https://www.djangoproject.com/weblog/2018/feb/01/security-releases/"},{"url":"http://www.securitytracker.com/id/1040422"}],"published_at":"2018-10-03T21:13:54Z","updated_at":"2022-04-26T18:35:37Z","withdrawn_at":null},"security_vulnerability":{"package":{"ecosystem":"pip","name":"django"},"severity":"high","vulnerable_version_range":">= 2.0.0, < 2.0.2","first_patched_version":{"identifier":"2.0.2"}},"url":"https://api.github.com/repos/octo-org/octo-repo/dependabot/alerts/2","html_url":"https://github.com/octo-org/octo-repo/security/dependabot/2","created_at":"2022-06-15T07:43:03Z","updated_at":"2022-08-23T14:29:47Z","dismissed_at":"2022-08-23T14:29:47Z","dismissed_by":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"dismissed_reason":"tolerable_risk","dismissed_comment":"This alert is accurate but we use a sanitizer.","fixed_at":null,"repository":{"id":217723378,"node_id":"MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=","name":"octo-repo","full_name":"octo-org/octo-repo","owner":{"login":"octo-org","id":6811672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=","avatar_url":"https://avatars3.githubusercontent.com/u/6811672?v=4","gravatar_id":"","url":"https://api.github.com/users/octo-org","html_url":"https://github.com/octo-org","followers_url":"https://api.github.com/users/octo-org/followers","following_url":"https://api.github.com/users/octo-org/following{/other_user}","gists_url":"https://api.github.com/users/octo-org/gists{/gist_id}","starred_url":"https://api.github.com/users/octo-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octo-org/subscriptions","organizations_url":"https://api.github.com/users/octo-org/orgs","repos_url":"https://api.github.com/users/octo-org/repos","events_url":"https://api.github.com/users/octo-org/events{/privacy}","received_events_url":"https://api.github.com/users/octo-org/received_events","type":"Organization","site_admin":false},"private":true,"html_url":"https://github.com/octo-org/octo-repo","description":null,"fork":false,"url":"https://api.github.com/repos/octo-org/octo-repo","archive_url":"https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octo-org/octo-repo/assignees{/user}","blobs_url":"https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octo-org/octo-repo/branches{/branch}","collaborators_url":"https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octo-org/octo-repo/comments{/number}","commits_url":"https://api.github.com/repos/octo-org/octo-repo/commits{/sha}","compare_url":"https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octo-org/octo-repo/contents/{+path}","contributors_url":"https://api.github.com/repos/octo-org/octo-repo/contributors","deployments_url":"https://api.github.com/repos/octo-org/octo-repo/deployments","downloads_url":"https://api.github.com/repos/octo-org/octo-repo/downloads","events_url":"https://api.github.com/repos/octo-org/octo-repo/events","forks_url":"https://api.github.com/repos/octo-org/octo-repo/forks","git_commits_url":"https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}","hooks_url":"https://api.github.com/repos/octo-org/octo-repo/hooks","issue_comment_url":"https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}","issues_url":"https://api.github.com/repos/octo-org/octo-repo/issues{/number}","keys_url":"https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}","labels_url":"https://api.github.com/repos/octo-org/octo-repo/labels{/name}","languages_url":"https://api.github.com/repos/octo-org/octo-repo/languages","merges_url":"https://api.github.com/repos/octo-org/octo-repo/merges","milestones_url":"https://api.github.com/repos/octo-org/octo-repo/milestones{/number}","notifications_url":"https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octo-org/octo-repo/pulls{/number}","releases_url":"https://api.github.com/repos/octo-org/octo-repo/releases{/id}","stargazers_url":"https://api.github.com/repos/octo-org/octo-repo/stargazers","statuses_url":"https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octo-org/octo-repo/subscribers","subscription_url":"https://api.github.com/repos/octo-org/octo-repo/subscription","tags_url":"https://api.github.com/repos/octo-org/octo-repo/tags","teams_url":"https://api.github.com/repos/octo-org/octo-repo/teams","trees_url":"https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}"}},{"number":1,"state":"open","dependency":{"package":{"ecosystem":"pip","name":"ansible"},"manifest_path":"path/to/requirements.txt","scope":"runtime"},"security_advisory":{"ghsa_id":"GHSA-8f4m-hccc-8qph","cve_id":"CVE-2021-20191","summary":"Insertion of Sensitive Information into Log File in ansible","description":"A flaw was found in ansible. Credentials, such as secrets, are being disclosed in console log by default and not protected by no_log feature when using those modules. An attacker can take advantage of this information to steal those credentials. The highest threat from this vulnerability is to data confidentiality.","vulnerabilities":[{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":">= 2.9.0, < 2.9.18","first_patched_version":{"identifier":"2.9.18"}},{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":"< 2.8.19","first_patched_version":{"identifier":"2.8.19"}},{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":">= 2.10.0, < 2.10.7","first_patched_version":{"identifier":"2.10.7"}}],"severity":"medium","cvss":{"vector_string":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":5.5},"cvss_severities":{"cvss_v3":{"vector_string":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":5.5},"cvss_v4":{"vector_string":"CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":8.5}},"cwes":[{"cwe_id":"CWE-532","name":"Insertion of Sensitive Information into Log File"}],"identifiers":[{"type":"GHSA","value":"GHSA-8f4m-hccc-8qph"},{"type":"CVE","value":"CVE-2021-20191"}],"references":[{"url":"https://nvd.nist.gov/vuln/detail/CVE-2021-20191"},{"url":"https://access.redhat.com/security/cve/cve-2021-20191"},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=1916813"}],"published_at":"2021-06-01T17:38:00Z","updated_at":"2021-08-12T23:06:00Z","withdrawn_at":null},"security_vulnerability":{"package":{"ecosystem":"pip","name":"ansible"},"severity":"medium","vulnerable_version_range":"< 2.8.19","first_patched_version":{"identifier":"2.8.19"}},"url":"https://api.github.com/repos/octo-org/hello-world/dependabot/alerts/1","html_url":"https://github.com/octo-org/hello-world/security/dependabot/1","created_at":"2022-06-14T15:21:52Z","updated_at":"2022-06-14T15:21:52Z","dismissed_at":null,"dismissed_by":null,"dismissed_reason":null,"dismissed_comment":null,"fixed_at":null,"repository":{"id":664700648,"node_id":"MDEwOlJlcG9zaXRvcnk2NjQ3MDA2NDg=","name":"hello-world","full_name":"octo-org/hello-world","owner":{"login":"octo-org","id":6811672,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=","avatar_url":"https://avatars3.githubusercontent.com/u/6811672?v=4","gravatar_id":"","url":"https://api.github.com/users/octo-org","html_url":"https://github.com/octo-org","followers_url":"https://api.github.com/users/octo-org/followers","following_url":"https://api.github.com/users/octo-org/following{/other_user}","gists_url":"https://api.github.com/users/octo-org/gists{/gist_id}","starred_url":"https://api.github.com/users/octo-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octo-org/subscriptions","organizations_url":"https://api.github.com/users/octo-org/orgs","repos_url":"https://api.github.com/users/octo-org/repos","events_url":"https://api.github.com/users/octo-org/events{/privacy}","received_events_url":"https://api.github.com/users/octo-org/received_events","type":"Organization","site_admin":false},"private":true,"html_url":"https://github.com/octo-org/hello-world","description":null,"fork":false,"url":"https://api.github.com/repos/octo-org/hello-world","archive_url":"https://api.github.com/repos/octo-org/hello-world/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octo-org/hello-world/assignees{/user}","blobs_url":"https://api.github.com/repos/octo-org/hello-world/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octo-org/hello-world/branches{/branch}","collaborators_url":"https://api.github.com/repos/octo-org/hello-world/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octo-org/hello-world/comments{/number}","commits_url":"https://api.github.com/repos/octo-org/hello-world/commits{/sha}","compare_url":"https://api.github.com/repos/octo-org/hello-world/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octo-org/hello-world/contents/{+path}","contributors_url":"https://api.github.com/repos/octo-org/hello-world/contributors","deployments_url":"https://api.github.com/repos/octo-org/hello-world/deployments","downloads_url":"https://api.github.com/repos/octo-org/hello-world/downloads","events_url":"https://api.github.com/repos/octo-org/hello-world/events","forks_url":"https://api.github.com/repos/octo-org/hello-world/forks","git_commits_url":"https://api.github.com/repos/octo-org/hello-world/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octo-org/hello-world/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octo-org/hello-world/git/tags{/sha}","hooks_url":"https://api.github.com/repos/octo-org/hello-world/hooks","issue_comment_url":"https://api.github.com/repos/octo-org/hello-world/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octo-org/hello-world/issues/events{/number}","issues_url":"https://api.github.com/repos/octo-org/hello-world/issues{/number}","keys_url":"https://api.github.com/repos/octo-org/hello-world/keys{/key_id}","labels_url":"https://api.github.com/repos/octo-org/hello-world/labels{/name}","languages_url":"https://api.github.com/repos/octo-org/hello-world/languages","merges_url":"https://api.github.com/repos/octo-org/hello-world/merges","milestones_url":"https://api.github.com/repos/octo-org/hello-world/milestones{/number}","notifications_url":"https://api.github.com/repos/octo-org/hello-world/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octo-org/hello-world/pulls{/number}","releases_url":"https://api.github.com/repos/octo-org/hello-world/releases{/id}","stargazers_url":"https://api.github.com/repos/octo-org/hello-world/stargazers","statuses_url":"https://api.github.com/repos/octo-org/hello-world/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octo-org/hello-world/subscribers","subscription_url":"https://api.github.com/repos/octo-org/hello-world/subscription","tags_url":"https://api.github.com/repos/octo-org/hello-world/tags","teams_url":"https://api.github.com/repos/octo-org/hello-world/teams","trees_url":"https://api.github.com/repos/octo-org/hello-world/git/trees{/sha}"}}] diff --git a/tests/ReplayData/OrganizationSecretScanAlert.setUp.txt b/tests/ReplayData/OrganizationSecretScanAlert.setUp.txt new file mode 100644 index 0000000000..ccac54ee79 --- /dev/null +++ b/tests/ReplayData/OrganizationSecretScanAlert.setUp.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 18:44:22 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"32e1811a40b7dc766e8e1acb9f3920effb9eeed8858f62afd258dcc018661501"'), ('Last-Modified', 'Tue, 29 Nov 2022 19:44:55 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'admin:org, read:org, repo, user, write:org'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1756323580'), ('X-RateLimit-Used', '7'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'C47B:1774B5:2FD02B8:30D47CC:68AF5205')] +{"login":"github","id":9919,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk5MTk=","url":"https://api.github.com/orgs/github","repos_url":"https://api.github.com/orgs/github/repos","events_url":"https://api.github.com/orgs/github/events","hooks_url":"https://api.github.com/orgs/github/hooks","issues_url":"https://api.github.com/orgs/github/issues","members_url":"https://api.github.com/orgs/github/members{/member}","public_members_url":"https://api.github.com/orgs/github/public_members{/member}","avatar_url":"https://avatars.githubusercontent.com/u/9919?v=4","description":"How people build software.","name":"GitHub","company":null,"blog":"https://github.com/about","location":"San Francisco, CA","email":null,"twitter_username":null,"is_verified":true,"has_organization_projects":true,"has_repository_projects":true,"public_repos":522,"public_gists":0,"followers":58459,"following":0,"html_url":"https://github.com/github","created_at":"2008-05-11T04:37:31Z","updated_at":"2022-11-29T19:44:55Z","archived_at":null,"type":"Organization"} diff --git a/tests/ReplayData/OrganizationSecretScanAlert.testGetAlertsWithAllArguments.txt b/tests/ReplayData/OrganizationSecretScanAlert.testGetAlertsWithAllArguments.txt new file mode 100644 index 0000000000..1bc348d02d --- /dev/null +++ b/tests/ReplayData/OrganizationSecretScanAlert.testGetAlertsWithAllArguments.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/secret-scanning/alerts?state=resolved&secret_type=adafruit_io_key&resolution=false_positive&sort=created&direction=asc&validity=inactive&is_publicly_leaked=False&is_multi_repo=False&hide_secret=True +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 18:44:22 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1756323580'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'C47B:1774B5:2FD05D4:30D4B06:68AF5206')] +[{"number":2,"created_at":"2020-11-06T18:48:51Z","url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/2","html_url":"https://github.com/owner/private-repo/security/secret-scanning/2","locations_url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/2/locations","state":"resolved","resolution":"false_positive","resolved_at":"2020-11-07T02:47:13Z","resolved_by":{"login":"monalisa","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/2?","gravatar_id":"","url":"https://api.github.com/users/monalisa","html_url":"https://github.com/monalisa","followers_url":"https://api.github.com/users/monalisa/followers","following_url":"https://api.github.com/users/monalisa/following{/other_user}","gists_url":"https://api.github.com/users/monalisa/gists{/gist_id}","starred_url":"https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monalisa/subscriptions","organizations_url":"https://api.github.com/users/monalisa/orgs","repos_url":"https://api.github.com/users/monalisa/repos","events_url":"https://api.github.com/users/monalisa/events{/privacy}","received_events_url":"https://api.github.com/users/monalisa/received_events","type":"User","site_admin":true},"secret_type":"adafruit_io_key","secret_type_display_name":"Adafruit IO Key","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"This your first repo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"},"push_protection_bypassed_by":{"login":"monalisa","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/2?","gravatar_id":"","url":"https://api.github.com/users/monalisa","html_url":"https://github.com/monalisa","followers_url":"https://api.github.com/users/monalisa/followers","following_url":"https://api.github.com/users/monalisa/following{/other_user}","gists_url":"https://api.github.com/users/monalisa/gists{/gist_id}","starred_url":"https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monalisa/subscriptions","organizations_url":"https://api.github.com/users/monalisa/orgs","repos_url":"https://api.github.com/users/monalisa/repos","events_url":"https://api.github.com/users/monalisa/events{/privacy}","received_events_url":"https://api.github.com/users/monalisa/received_events","type":"User","site_admin":true},"push_protection_bypassed":true,"push_protection_bypassed_at":"2020-11-06T21:48:51Z","push_protection_bypass_request_reviewer":{"login":"octocat","id":3,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/3?","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":true},"push_protection_bypass_request_reviewer_comment":"Example response","push_protection_bypass_request_comment":"Example comment","push_protection_bypass_request_html_url":"https://github.com/owner/repo/secret_scanning_exemptions/1","resolution_comment":"Example comment","validity":"active","publicly_leaked":false,"multi_repo":false,"is_base64_encoded":false,"first_location_detected":{"issue_title_url":"https://api.github.com/repos/octocat/Hello-World/issues/1347"},"has_more_locations":true}] diff --git a/tests/ReplayData/OrganizationSecretScanAlert.testMultipleAlerts.txt b/tests/ReplayData/OrganizationSecretScanAlert.testMultipleAlerts.txt new file mode 100644 index 0000000000..216877599f --- /dev/null +++ b/tests/ReplayData/OrganizationSecretScanAlert.testMultipleAlerts.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/secret-scanning/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 18:39:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 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', '1756323580'), ('X-RateLimit-Used', '3'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '2FE9:39DB23:48282B5:49C3759:68AF50ED')] +[{"number":2,"created_at":"2020-11-06T18:48:51Z","url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/2","html_url":"https://github.com/owner/private-repo/security/secret-scanning/2","locations_url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/2/locations","state":"resolved","resolution":"false_positive","resolved_at":"2020-11-07T02:47:13Z","resolved_by":{"login":"monalisa","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/2?","gravatar_id":"","url":"https://api.github.com/users/monalisa","html_url":"https://github.com/monalisa","followers_url":"https://api.github.com/users/monalisa/followers","following_url":"https://api.github.com/users/monalisa/following{/other_user}","gists_url":"https://api.github.com/users/monalisa/gists{/gist_id}","starred_url":"https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monalisa/subscriptions","organizations_url":"https://api.github.com/users/monalisa/orgs","repos_url":"https://api.github.com/users/monalisa/repos","events_url":"https://api.github.com/users/monalisa/events{/privacy}","received_events_url":"https://api.github.com/users/monalisa/received_events","type":"User","site_admin":true},"secret_type":"adafruit_io_key","secret_type_display_name":"Adafruit IO Key","secret":"aio_XXXXXXXXXXXXXXXXXXXXXXXXXXXX","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"This your first repo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"},"push_protection_bypassed_by":{"login":"monalisa","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/2?","gravatar_id":"","url":"https://api.github.com/users/monalisa","html_url":"https://github.com/monalisa","followers_url":"https://api.github.com/users/monalisa/followers","following_url":"https://api.github.com/users/monalisa/following{/other_user}","gists_url":"https://api.github.com/users/monalisa/gists{/gist_id}","starred_url":"https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monalisa/subscriptions","organizations_url":"https://api.github.com/users/monalisa/orgs","repos_url":"https://api.github.com/users/monalisa/repos","events_url":"https://api.github.com/users/monalisa/events{/privacy}","received_events_url":"https://api.github.com/users/monalisa/received_events","type":"User","site_admin":true},"push_protection_bypassed":true,"push_protection_bypassed_at":"2020-11-06T21:48:51Z","push_protection_bypass_request_reviewer":{"login":"octocat","id":3,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/3?","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":true},"push_protection_bypass_request_reviewer_comment":"Example response","push_protection_bypass_request_comment":"Example comment","push_protection_bypass_request_html_url":"https://github.com/owner/repo/secret_scanning_exemptions/1","resolution_comment":"Example comment","validity":"active","publicly_leaked":false,"multi_repo":false,"is_base64_encoded":false,"first_location_detected":{"issue_title_url":"https://api.github.com/repos/octocat/Hello-World/issues/1347"},"has_more_locations":true},{"number":1,"created_at":"2020-11-06T18:18:30Z","url":"https://api.github.com/repos/owner/repo/secret-scanning/alerts/1","html_url":"https://github.com/owner/repo/security/secret-scanning/1","locations_url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/1/locations","state":"open","resolution":null,"resolved_at":null,"resolved_by":null,"secret_type":"mailchimp_api_key","secret_type_display_name":"Mailchimp API Key","secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"This your first repo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"},"push_protection_bypassed_by":null,"push_protection_bypassed":false,"push_protection_bypassed_at":null,"push_protection_bypass_request_reviewer":null,"push_protection_bypass_request_reviewer_comment":null,"push_protection_bypass_request_comment":null,"push_protection_bypass_request_html_url":null,"resolution_comment":null,"validity":"unknown","publicly_leaked":false,"multi_repo":false,"is_base64_encoded":false,"first_location_detected":{"path":"/example/secrets.txt","start_line":1,"end_line":1,"start_column":1,"end_column":64,"blob_sha":"af5626b4a114abcb82d63db7c8082c3c4756e51b","blob_url":"https://api.github.com/repos/octocat/hello-world/git/blobs/af5626b4a114abcb82d63db7c8082c3c4756e51b","commit_sha":"f14d7debf9775f957cf4f1e8176da0786431f72b","commit_url":"https://api.github.com/repos/octocat/hello-world/git/commits/f14d7debf9775f957cf4f1e8176da0786431f72b"},"has_more_locations":false}] diff --git a/tests/ReplayData/OrganizationSecretScanAlert.testRepr.txt b/tests/ReplayData/OrganizationSecretScanAlert.testRepr.txt new file mode 100644 index 0000000000..8b85bba3bf --- /dev/null +++ b/tests/ReplayData/OrganizationSecretScanAlert.testRepr.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/orgs/github/secret-scanning/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 27 Aug 2025 18:39:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1756323580'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '3F39:1230:492CCC:4CDC57:68AF50EE')] +[{"number":2,"created_at":"2020-11-06T18:48:51Z","url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/2","html_url":"https://github.com/owner/private-repo/security/secret-scanning/2","locations_url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/2/locations","state":"resolved","resolution":"false_positive","resolved_at":"2020-11-07T02:47:13Z","resolved_by":{"login":"monalisa","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/2?","gravatar_id":"","url":"https://api.github.com/users/monalisa","html_url":"https://github.com/monalisa","followers_url":"https://api.github.com/users/monalisa/followers","following_url":"https://api.github.com/users/monalisa/following{/other_user}","gists_url":"https://api.github.com/users/monalisa/gists{/gist_id}","starred_url":"https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monalisa/subscriptions","organizations_url":"https://api.github.com/users/monalisa/orgs","repos_url":"https://api.github.com/users/monalisa/repos","events_url":"https://api.github.com/users/monalisa/events{/privacy}","received_events_url":"https://api.github.com/users/monalisa/received_events","type":"User","site_admin":true},"secret_type":"adafruit_io_key","secret_type_display_name":"Adafruit IO Key","secret":"aio_XXXXXXXXXXXXXXXXXXXXXXXXXXXX","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"This your first repo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"},"push_protection_bypassed_by":{"login":"monalisa","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/2?","gravatar_id":"","url":"https://api.github.com/users/monalisa","html_url":"https://github.com/monalisa","followers_url":"https://api.github.com/users/monalisa/followers","following_url":"https://api.github.com/users/monalisa/following{/other_user}","gists_url":"https://api.github.com/users/monalisa/gists{/gist_id}","starred_url":"https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monalisa/subscriptions","organizations_url":"https://api.github.com/users/monalisa/orgs","repos_url":"https://api.github.com/users/monalisa/repos","events_url":"https://api.github.com/users/monalisa/events{/privacy}","received_events_url":"https://api.github.com/users/monalisa/received_events","type":"User","site_admin":true},"push_protection_bypassed":true,"push_protection_bypassed_at":"2020-11-06T21:48:51Z","push_protection_bypass_request_reviewer":{"login":"octocat","id":3,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://alambic.github.com/avatars/u/3?","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":true},"push_protection_bypass_request_reviewer_comment":"Example response","push_protection_bypass_request_comment":"Example comment","push_protection_bypass_request_html_url":"https://github.com/owner/repo/secret_scanning_exemptions/1","resolution_comment":"Example comment","validity":"active","publicly_leaked":false,"multi_repo":false,"is_base64_encoded":false,"first_location_detected":{"issue_title_url":"https://api.github.com/repos/octocat/Hello-World/issues/1347"},"has_more_locations":true},{"number":1,"created_at":"2020-11-06T18:18:30Z","url":"https://api.github.com/repos/owner/repo/secret-scanning/alerts/1","html_url":"https://github.com/owner/repo/security/secret-scanning/1","locations_url":"https://api.github.com/repos/owner/private-repo/secret-scanning/alerts/1/locations","state":"open","resolution":null,"resolved_at":null,"resolved_by":null,"secret_type":"mailchimp_api_key","secret_type_display_name":"Mailchimp API Key","secret":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2","repository":{"id":1296269,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk2MjY5","name":"Hello-World","full_name":"octocat/Hello-World","owner":{"login":"octocat","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/octocat/Hello-World","description":"This your first repo!","fork":false,"url":"https://api.github.com/repos/octocat/Hello-World","archive_url":"https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/octocat/Hello-World/assignees{/user}","blobs_url":"https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}","branches_url":"https://api.github.com/repos/octocat/Hello-World/branches{/branch}","collaborators_url":"https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/octocat/Hello-World/comments{/number}","commits_url":"https://api.github.com/repos/octocat/Hello-World/commits{/sha}","compare_url":"https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}","contents_url":"https://api.github.com/repos/octocat/Hello-World/contents/{+path}","contributors_url":"https://api.github.com/repos/octocat/Hello-World/contributors","deployments_url":"https://api.github.com/repos/octocat/Hello-World/deployments","downloads_url":"https://api.github.com/repos/octocat/Hello-World/downloads","events_url":"https://api.github.com/repos/octocat/Hello-World/events","forks_url":"https://api.github.com/repos/octocat/Hello-World/forks","git_commits_url":"https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}","issue_comment_url":"https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}","issue_events_url":"https://api.github.com/repos/octocat/Hello-World/issues/events{/number}","issues_url":"https://api.github.com/repos/octocat/Hello-World/issues{/number}","keys_url":"https://api.github.com/repos/octocat/Hello-World/keys{/key_id}","labels_url":"https://api.github.com/repos/octocat/Hello-World/labels{/name}","languages_url":"https://api.github.com/repos/octocat/Hello-World/languages","merges_url":"https://api.github.com/repos/octocat/Hello-World/merges","milestones_url":"https://api.github.com/repos/octocat/Hello-World/milestones{/number}","notifications_url":"https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}","pulls_url":"https://api.github.com/repos/octocat/Hello-World/pulls{/number}","releases_url":"https://api.github.com/repos/octocat/Hello-World/releases{/id}","stargazers_url":"https://api.github.com/repos/octocat/Hello-World/stargazers","statuses_url":"https://api.github.com/repos/octocat/Hello-World/statuses/{sha}","subscribers_url":"https://api.github.com/repos/octocat/Hello-World/subscribers","subscription_url":"https://api.github.com/repos/octocat/Hello-World/subscription","tags_url":"https://api.github.com/repos/octocat/Hello-World/tags","teams_url":"https://api.github.com/repos/octocat/Hello-World/teams","trees_url":"https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}","hooks_url":"https://api.github.com/repos/octocat/Hello-World/hooks"},"push_protection_bypassed_by":null,"push_protection_bypassed":false,"push_protection_bypassed_at":null,"push_protection_bypass_request_reviewer":null,"push_protection_bypass_request_reviewer_comment":null,"push_protection_bypass_request_comment":null,"push_protection_bypass_request_html_url":null,"resolution_comment":null,"validity":"unknown","publicly_leaked":false,"multi_repo":false,"is_base64_encoded":false,"first_location_detected":{"path":"/example/secrets.txt","start_line":1,"end_line":1,"start_column":1,"end_column":64,"blob_sha":"af5626b4a114abcb82d63db7c8082c3c4756e51b","blob_url":"https://api.github.com/repos/octocat/hello-world/git/blobs/af5626b4a114abcb82d63db7c8082c3c4756e51b","commit_sha":"f14d7debf9775f957cf4f1e8176da0786431f72b","commit_url":"https://api.github.com/repos/octocat/hello-world/git/commits/f14d7debf9775f957cf4f1e8176da0786431f72b"},"has_more_locations":false}] diff --git a/tests/ReplayData/PaginatedList.setUp.txt b/tests/ReplayData/PaginatedList.setUp.txt index 31014babba..c087cbaf5b 100644 --- a/tests/ReplayData/PaginatedList.setUp.txt +++ b/tests/ReplayData/PaginatedList.setUp.txt @@ -24,7 +24,7 @@ https GET api.github.com None -/enterprises/beaver-group/consumed-licenses +/enterprises/beaver-group/consumed-licenses?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PaginatedList.testCustomPerPageReversedIterationSinglePage.txt b/tests/ReplayData/PaginatedList.testCustomPerPageReversedIterationSinglePage.txt new file mode 100644 index 0000000000..906bc0acd0 --- /dev/null +++ b/tests/ReplayData/PaginatedList.testCustomPerPageReversedIterationSinglePage.txt @@ -0,0 +1,43 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 29 Sep 2025 14:47:49 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/"dbbf737c89f42313edc81a4322fcda167f925ce164808a453d64e0fc0038056f"'), ('Last-Modified', 'Mon, 29 Sep 2025 13:36:37 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4977'), ('X-RateLimit-Reset', '1759159508'), ('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', '9AF8:39DBF6:979B249:8D08185:68DA9C14')] +{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2025-09-29T13:36:37Z","pushed_at":"2025-09-26T09:48:05Z","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":20677,"stargazers_count":7541,"watchers_count":7541,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1858,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":361,"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":1858,"open_issues":361,"watchers":7541,"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","user_view_type":"public","site_admin":false},"network_count":1858,"subscribers_count":114} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues/3372 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 29 Sep 2025 14:47:50 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"81e39cfb02ad04e2f9a4f258a9fae2f5219b30151bc0b0b15ca959014997226d"'), ('Last-Modified', 'Wed, 17 Sep 2025 19:49:40 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('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', '4976'), ('X-RateLimit-Reset', '1759159508'), ('X-RateLimit-Used', '24'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '9AFA:C624B:C8DADA9:BA3E425:68DA9C15')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3372","id":3398817538,"node_id":"I_kwDOADYVqs7KldcC","number":3372,"title":"Commit.files does not respect requester.per_page (in forward mode)","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2025-09-09T14:51:27Z","updated_at":"2025-09-17T19:49:40Z","closed_at":null,"author_association":"CONTRIBUTOR","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"Minimal example:\n\n```\nimport logging\nfrom github import Github, Auth\ngh = Github(auth=Auth.Token($token), per_page=100)\ngh.requester._logger.setLevel(logging.DEBUG)\nrepo = gh.get_repo(\"iarspider-cmssw/cmssw\")\nissue = repo.get_issue(38)\npr = repo.get_pull(38)\ncommits = pr.get_commits()\ncommit = commits[0]\nfiles = list(commit.files)\nprint(len(files))\nfiles = list(reversed(commit.files))\nprint(len(files))\n```\n\nRunning this script and filtering the output with `grep '^GET' | awk '{print $1,$2}'`, I get this output:\n\n```\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/pulls/38/commits?per_page=100\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=2\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=3\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=4\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=5\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=6\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=16\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=15\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=14\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=13\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=12\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=11\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=10\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=9\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=8\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=7\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=6\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=5\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=4\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=3\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=2\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=1\n```\n\nNotice that forward iteration ignores per_page, but reverse respects it.\n\nThe [endpoint](https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#get-a-commit) supports `per_page` parameter. ","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/timeline","performed_via_github_app":null,"state_reason":null} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues/3372/comments?per_page=4 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 29 Sep 2025 14:47:53 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/"39a41542f4756e0b92e04fb4a1d80003cd8150bfacc47196f4668ce5c7c41150"'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4975'), ('X-RateLimit-Reset', '1759159508'), ('X-RateLimit-Used', '25'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '9B02:39DBF6:979CA90:8D09846:68DA9C17')] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3291867079","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3291867079","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3291867079,"node_id":"IC_kwDOADYVqs7ENefH","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2025-09-15T12:15:13Z","updated_at":"2025-09-15T12:15:44Z","body":"Did a bit of debugging. \n\nSo, when you query [List Commits on a Pull Request](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-commits-on-a-pull-request) endpoint, the returned `Commit` objects' `url` attribute does not have `per_page` parameter set - see, e.g. [link](https://api.github.com/repos/iarspider-cmssw/cmssw/pulls/38/commits?per_page=100). \n\nPyGithub uses that `link` to get other pages.\n\nMy [initial attempt]((https://github.com/PyGithub/PyGithub/pull/3371)) to fix this should work, but I'm confused why the test fails - namely, why it expects `per_page=1` if `setPerPage` is not called in `tests/Commit.py`?","author_association":"CONTRIBUTOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3291867079/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/3300047905","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3300047905","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3300047905,"node_id":"IC_kwDOADYVqs7Esrwh","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","user_view_type":"public","site_admin":false},"created_at":"2025-09-16T19:22:02Z","updated_at":"2025-09-16T19:53:20Z","body":"I could reproduce this with your code above. The problem only occurs with commits having more than 300 files. The call\n\n GET /repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75\n\nshould already have the `?per_page=100` to limit the number of files retrieved for the commit. Then, the pagination should work as expected. I will look into this.","author_association":"COLLABORATOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3300047905/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":1,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3301970697","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3301970697","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3301970697,"node_id":"IC_kwDOADYVqs7E0BMJ","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2025-09-17T08:44:18Z","updated_at":"2025-09-17T08:44:18Z","body":"@EnricoMi the link to my fix disappeared while I was writing the comment: https://github.com/PyGithub/PyGithub/pull/3371 . This breaks a single test (`Commit.testAttributes`), I will also try to figure out why","author_association":"CONTRIBUTOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3301970697/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/3304363431","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3304363431","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3304363431,"node_id":"IC_kwDOADYVqs7E9JWn","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","user_view_type":"public","site_admin":false},"created_at":"2025-09-17T19:49:40Z","updated_at":"2025-09-17T19:49:40Z","body":"Fix available in #3377. This adds the `per_page` parameter if that is not the default when fetching the commit (and hence the first page of files).","author_association":"COLLABORATOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3304363431/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":1,"rocket":0,"eyes":0},"performed_via_github_app":null}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues/3372/comments?per_page=4 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 29 Sep 2025 14:47:54 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/"39a41542f4756e0b92e04fb4a1d80003cd8150bfacc47196f4668ce5c7c41150"'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'issues=read; pull_requests=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4974'), ('X-RateLimit-Reset', '1759159508'), ('X-RateLimit-Used', '26'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '95F2:1D453F:BE8086F:B052EC3:68DA9C1A')] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3291867079","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3291867079","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3291867079,"node_id":"IC_kwDOADYVqs7ENefH","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2025-09-15T12:15:13Z","updated_at":"2025-09-15T12:15:44Z","body":"Did a bit of debugging. \n\nSo, when you query [List Commits on a Pull Request](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-commits-on-a-pull-request) endpoint, the returned `Commit` objects' `url` attribute does not have `per_page` parameter set - see, e.g. [link](https://api.github.com/repos/iarspider-cmssw/cmssw/pulls/38/commits?per_page=100). \n\nPyGithub uses that `link` to get other pages.\n\nMy [initial attempt]((https://github.com/PyGithub/PyGithub/pull/3371)) to fix this should work, but I'm confused why the test fails - namely, why it expects `per_page=1` if `setPerPage` is not called in `tests/Commit.py`?","author_association":"CONTRIBUTOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3291867079/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/3300047905","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3300047905","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3300047905,"node_id":"IC_kwDOADYVqs7Esrwh","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","user_view_type":"public","site_admin":false},"created_at":"2025-09-16T19:22:02Z","updated_at":"2025-09-16T19:53:20Z","body":"I could reproduce this with your code above. The problem only occurs with commits having more than 300 files. The call\n\n GET /repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75\n\nshould already have the `?per_page=100` to limit the number of files retrieved for the commit. Then, the pagination should work as expected. I will look into this.","author_association":"COLLABORATOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3300047905/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":1,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3301970697","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3301970697","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3301970697,"node_id":"IC_kwDOADYVqs7E0BMJ","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2025-09-17T08:44:18Z","updated_at":"2025-09-17T08:44:18Z","body":"@EnricoMi the link to my fix disappeared while I was writing the comment: https://github.com/PyGithub/PyGithub/pull/3371 . This breaks a single test (`Commit.testAttributes`), I will also try to figure out why","author_association":"CONTRIBUTOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3301970697/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/3304363431","html_url":"https://github.com/PyGithub/PyGithub/issues/3372#issuecomment-3304363431","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","id":3304363431,"node_id":"IC_kwDOADYVqs7E9JWn","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","user_view_type":"public","site_admin":false},"created_at":"2025-09-17T19:49:40Z","updated_at":"2025-09-17T19:49:40Z","body":"Fix available in #3377. This adds the `per_page` parameter if that is not the default when fetching the commit (and hence the first page of files).","author_association":"COLLABORATOR","reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments/3304363431/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":1,"rocket":0,"eyes":0},"performed_via_github_app":null}] diff --git a/tests/ReplayData/PaginatedList.testReversedWithFirstPage.txt b/tests/ReplayData/PaginatedList.testReversedWithFirstPage.txt new file mode 100644 index 0000000000..6167b18e15 --- /dev/null +++ b/tests/ReplayData/PaginatedList.testReversedWithFirstPage.txt @@ -0,0 +1,43 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 12:40:31 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/"3abfee8249f9103269d3c489cbd2681770ecd0c882748d94e12a6d2972613972"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1759927422'), ('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', 'F773:B479C:23E6F40:21A7BDB:68E65BBF')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"f821990c6fbc8180f26382685c9fb6025eae4ae9","filename":"github/GeneratedReleaseNotes.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/github%2FGeneratedReleaseNotes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/github%2FGeneratedReleaseNotes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGeneratedReleaseNotes.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,43 @@\n+from __future__ import annotations\n+\n+from typing import Any\n+\n+from github.GithubObject import (\n+ Attribute,\n+ NonCompletableGithubObject,\n+ NotSet,\n+)\n+\n+\n+class GeneratedReleaseNotes(NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents the release notes generated by the release/generate-notes REST API endpoint.\n+\n+ The reference can be found here:\n+ https://docs.github.com/en/rest/releases/releases#generate-release-notes-content-for-a-release\n+\n+ The OpenAPI schema can be found at\n+ - /components/schemas/release-notes-content\n+\n+ \"\"\"\n+\n+ def _initAttributes(self) -> None:\n+ self._body: Attribute[str] = NotSet\n+ self._name: Attribute[str] = NotSet\n+\n+ def __repr__(self) -> str:\n+ return self.get__repr__({\"name\": self._name.value, \"body\": self._body.value})\n+\n+ @property\n+ def body(self) -> str:\n+ return self._body.value\n+\n+ @property\n+ def name(self) -> str:\n+ return self._name.value\n+\n+ def _useAttributes(self, attributes: dict[str, Any]) -> None:\n+ if \"body\" in attributes:\n+ self._body = self._makeStringAttribute(attributes[\"body\"])\n+ if \"name\" in attributes:\n+ self._name = self._makeStringAttribute(attributes[\"name\"])"},{"sha":"88f60f546ebc64d1f448327f25b92ca814fb964a","filename":"github/Repository.py","status":"modified","additions":38,"deletions":0,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -248,6 +248,7 @@\n import github.WorkflowRun\n from github import Consts\n from github.Environment import Environment\n+from github.GeneratedReleaseNotes import GeneratedReleaseNotes\n from github.GithubObject import (\n Attribute,\n CompletableGithubObject,\n@@ -1549,6 +1550,43 @@ def create_git_release(\n headers, data = self._requester.requestJsonAndCheck(\"POST\", f\"{self.url}/releases\", input=post_parameters)\n return github.GitRelease.GitRelease(self._requester, headers, data, completed=True)\n \n+ def generate_release_notes(\n+ self,\n+ tag_name: str,\n+ previous_tag_name: Opt[str] = NotSet,\n+ target_commitish: Opt[str] = NotSet,\n+ configuration_file_path: Opt[str] = NotSet,\n+ ) -> GeneratedReleaseNotes:\n+ \"\"\"\n+ :calls: `POST /repos/{owner}/{repo}/releases/generate-notes `\n+ :param tag_name: The tag name for the release. This can be an existing tag or a new one.\n+ :param previous_tag_name: The name of the previous tag to use as the starting point for the release notes. Use to manually specify the range for the set of changes considered as part this release.\n+ :param target_commitish: Specifies the commitish value that will be the target for the release's tag. Required if the supplied tag_name does not reference an existing tag. Ignored if the tag_name already exists.\n+ :param configuration_file_path: Specifies a path to a file in the repository containing configuration settings used for generating the release notes. If unspecified, the configuration file located in the repository at '.github/release.yml' or '.github/release.yaml' will be used. If that is not present, the default configuration will be used.\n+ :rytpe: :class:`GeneratedReleaseNotes`\n+ \"\"\"\n+ assert isinstance(tag_name, str), tag_name\n+ assert isinstance(previous_tag_name, str) or is_optional(previous_tag_name, str), previous_tag_name\n+ assert isinstance(target_commitish, str) or is_optional(target_commitish, str), target_commitish\n+ assert isinstance(configuration_file_path, str) or is_optional(\n+ configuration_file_path, str\n+ ), configuration_file_path\n+\n+ post_parameters = NotSet.remove_unset_items(\n+ {\n+ \"tag_name\": tag_name,\n+ \"previous_tag_name\": previous_tag_name,\n+ \"target_commitish\": target_commitish,\n+ \"configuration_file_path\": configuration_file_path,\n+ }\n+ )\n+\n+ headers, data = self._requester.requestJsonAndCheck(\n+ \"POST\", f\"{self.url}/releases/generate-notes\", input=post_parameters\n+ )\n+\n+ return GeneratedReleaseNotes(self._requester, headers, data)\n+\n def create_git_tag(\n self,\n tag: str,"},{"sha":"ea6623890081c67fe3dbae69d7caf013e58afb75","filename":"pyproject.toml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/pyproject.toml","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/pyproject.toml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/pyproject.toml?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -82,7 +82,7 @@ quiet-level = 3\n # https://github.com/codespell-project/codespell/issues/2839#issuecomment-1731601603\n # also adding links until they ignored by its: nature\n # https://github.com/codespell-project/codespell/issues/2243#issuecomment-1732019960\n-ignore-words-list = \"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,chang,manuel\"\n+ignore-words-list = \"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,chang,manuel,commitish\"\n \n [tool.ruff]\n line-length = 120"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 12:40:31 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/"548f7ba97dcae9b38721fd41fb367a82e90bd221fa220b9c0c5655c07a274f22"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1759927422'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'FB74:1FB8AC:26E7CD9:2488FD7:68E65BBF')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"cf33e804ef4c854486b356fb130bef6c2f0ea5d6","filename":"tests/test_release_notes.yml","status":"added","additions":13,"deletions":0,"changes":13,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2Ftest_release_notes.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2Ftest_release_notes.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2Ftest_release_notes.yml?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,13 @@\n+# This file is needed for generating release notes for the Repository::testGenerateReleaseNotesWithAllArguments test\n+# See https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes\n+\n+# This is used to generate the ReplayData as used by Repository::testGenerateReleaseNotesWithAllArguments.\n+# If you need to regenerate this ReplayData files, you will need to copy this yaml file\n+# into the `.github` directory on the main branch of your forked repository.\n+# The GitHub API expects to see this file in the `.github` directory when generating release notes.\n+\n+changelog:\n+ categories:\n+ - title: Features\n+ labels:\n+ - '*'"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 12:40:32 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/"6ba1dd93c9bbf4f0036fad1cf68de4926be6bc0c92d622f3585c89c4a7b640dc"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4994'), ('X-RateLimit-Reset', '1759927422'), ('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', 'FBB7:2C202C:2529E6A:22E93B2:68E65BBF')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"71c53ad1b6acb3291b60a42493c295f6f6a398d9","filename":"tests/ReplayData/Repository.testGenerateReleaseNotes.txt","status":"added","additions":10,"deletions":0,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotes.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotes.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FRepository.testGenerateReleaseNotes.txt?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,10 @@\n+https\n+POST\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/releases/generate-notes\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}\n+{\"tag_name\": \"vX.Y.Z-by-PyGithub-acctest\"}\n+200\n+[('Date', 'Sun, 18 Aug 2024 23:56: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/\"f05115701836368bcab805d829f1453234af1eea7b25bf97c3effa382838f562\"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-11-14 21:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1724025644'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('X-GitHub-Request-Id', '86EA:313F29:56B6E84:A55D123:66C28A3C'), ('Server', 'github.com')]\n+{\"name\":\"vX.Y.Z-by-PyGithub-acctest\",\"body\":\"**Full Changelog**: https://github.com/PyGithub/PyGithub/commits/vX.Y.Z-by-PyGithub-acctest\"}"},{"sha":"405365135a982d3e906c465c23056cd03e18b0b4","filename":"tests/ReplayData/Repository.testGenerateReleaseNotesWithAllArguments.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotesWithAllArguments.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotesWithAllArguments.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FRepository.testGenerateReleaseNotesWithAllArguments.txt?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,21 @@\n+https\n+POST\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/releases\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}\n+{\"tag_name\": \"vX.Y.Z-by-PyGithub-acctest-previous\", \"draft\": false, \"prerelease\": false, \"generate_release_notes\": false, \"name\": \"vX.Y.Z: PyGithub acctest\", \"body\": \"This release is created by PyGithub\", \"make_latest\": \"true\"}\n+201\n+[('Date', 'Mon, 19 Aug 2024 00:34:07 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '1900'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', '\"060006433f9b7748cbf7198d4f0d820482591704be702c1169dd21489da95c5d\"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-11-14 21:03:22 UTC'), ('Location', 'https://api.github.com/repos/PyGithub/PyGithub/releases/170779796'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4965'), ('X-RateLimit-Reset', '1724029435'), ('X-RateLimit-Used', '35'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('X-GitHub-Request-Id', 'D6C0:2B9908:1D4A719:37A4849:66C292FE'), ('Server', 'github.com')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases/170779796\",\"assets_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases/170779796/assets\",\"upload_url\":\"https://uploads.github.com/repos/PyGithub/PyGithub/releases/170779796/assets{?name,label}\",\"html_url\":\"https://github.com/PyGithub/PyGithub/releases/tag/vX.Y.Z-by-PyGithub-acctest-previous\",\"id\":170779796,\"author\":{\"login\":\"PyGithub\",\"id\":96152357,\"node_id\":\"U_kgDOBbsrJQ\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/96152357?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\":\"User\",\"site_admin\":false},\"node_id\":\"RE_kwDOMlKsTM4KLeSU\",\"tag_name\":\"vX.Y.Z-by-PyGithub-acctest-previous\",\"target_commitish\":\"main\",\"name\":\"vX.Y.Z: PyGithub acctest\",\"draft\":false,\"prerelease\":false,\"created_at\":\"2024-08-19T00:25:59Z\",\"published_at\":\"2024-08-19T00:34:06Z\",\"assets\":[],\"tarball_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tarball/vX.Y.Z-by-PyGithub-acctest-previous\",\"zipball_url\":\"https://api.github.com/repos/PyGithub/PyGithub/zipball/vX.Y.Z-by-PyGithub-acctest-previous\",\"body\":\"This release is created by PyGithub\"}\n+\n+https\n+POST\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/releases/generate-notes\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}\n+{\"tag_name\": \"vX.Y.Z-by-PyGithub-acctest\", \"previous_tag_name\": \"vX.Y.Z-by-PyGithub-acctest-previous\", \"target_commitish\": \"main\", \"configuration_file_path\": \"tests/test_release_notes.yml\"}\n+200\n+[('Date', 'Mon, 19 Aug 2024 00:34:07 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/\"9cdecc62d8152adc4ab619d18dd9f194f4f76d5dba91ba53c92c9def3856f620\"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-11-14 21:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4964'), ('X-RateLimit-Reset', '1724029435'), ('X-RateLimit-Used', '36'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('X-GitHub-Request-Id', 'D6C4:4388A:1BF3BE3:3510B09:66C292FF'), ('Server', 'github.com')]\n+{\"name\":\"vX.Y.Z-by-PyGithub-acctest\",\"body\":\"\\n\\n\\n\\n**Full Changelog**: https://github.com/PyGithub/PyGithub/compare/vX.Y.Z-by-PyGithub-acctest-previous...vX.Y.Z-by-PyGithub-acctest\"}"},{"sha":"56f166cff6326e38855c137610cf977dc79548e6","filename":"tests/Repository.py","status":"modified","additions":26,"deletions":0,"changes":26,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRepository.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -537,6 +537,32 @@ def testCreateGitReleaseWithAllArguments(self):\n tag = [tag for tag in self.repo.get_tags() if tag.name == \"vX.Y.Z-by-PyGithub-acctest2\"].pop()\n self.assertEqual(tag.commit.sha, \"da9a285fd8b782461e56cba39ae8d2fa41ca7cdc\")\n \n+ def testGenerateReleaseNotes(self):\n+ notes = self.repo.generate_release_notes(\"vX.Y.Z-by-PyGithub-acctest\")\n+ self.assertEqual(notes.name, \"vX.Y.Z-by-PyGithub-acctest\")\n+ self.assertEqual(\n+ notes.body, \"**Full Changelog**: https://github.com/PyGithub/PyGithub/commits/vX.Y.Z-by-PyGithub-acctest\"\n+ )\n+ self.assertEqual(\n+ repr(notes),\n+ 'GeneratedReleaseNotes(name=\"vX.Y.Z-by-PyGithub-acctest\", body=\"**Full Changelog**: https://github.com/PyGithub/PyGithub/commits/vX.Y.Z-by-PyGithub-acctest\")',\n+ )\n+\n+ def testGenerateReleaseNotesWithAllArguments(self):\n+ self.repo.create_git_release(\n+ tag=\"vX.Y.Z-by-PyGithub-acctest-previous\",\n+ name=\"vX.Y.Z: PyGithub acctest\",\n+ message=\"This release is created by PyGithub\",\n+ )\n+ notes = self.repo.generate_release_notes(\n+ tag_name=\"vX.Y.Z-by-PyGithub-acctest\",\n+ previous_tag_name=\"vX.Y.Z-by-PyGithub-acctest-previous\",\n+ target_commitish=\"main\",\n+ configuration_file_path=\"tests/test_release_notes.yml\",\n+ )\n+ self.assertEqual(notes.name, \"vX.Y.Z-by-PyGithub-acctest\")\n+ self.assertIn(\"Release notes generated using configuration in tests/test_release_notes.yml at main\", notes.body)\n+\n def testCreateGitTag(self):\n tag = self.repo.create_git_tag(\n \"TaggedByPyGithub\","}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 12:40:32 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/"3abfee8249f9103269d3c489cbd2681770ecd0c882748d94e12a6d2972613972"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1759927422'), ('X-RateLimit-Used', '7'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'EB7F:3EC15F:24A06D3:2250DC5:68E65BC0')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"f821990c6fbc8180f26382685c9fb6025eae4ae9","filename":"github/GeneratedReleaseNotes.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/github%2FGeneratedReleaseNotes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/github%2FGeneratedReleaseNotes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGeneratedReleaseNotes.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,43 @@\n+from __future__ import annotations\n+\n+from typing import Any\n+\n+from github.GithubObject import (\n+ Attribute,\n+ NonCompletableGithubObject,\n+ NotSet,\n+)\n+\n+\n+class GeneratedReleaseNotes(NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents the release notes generated by the release/generate-notes REST API endpoint.\n+\n+ The reference can be found here:\n+ https://docs.github.com/en/rest/releases/releases#generate-release-notes-content-for-a-release\n+\n+ The OpenAPI schema can be found at\n+ - /components/schemas/release-notes-content\n+\n+ \"\"\"\n+\n+ def _initAttributes(self) -> None:\n+ self._body: Attribute[str] = NotSet\n+ self._name: Attribute[str] = NotSet\n+\n+ def __repr__(self) -> str:\n+ return self.get__repr__({\"name\": self._name.value, \"body\": self._body.value})\n+\n+ @property\n+ def body(self) -> str:\n+ return self._body.value\n+\n+ @property\n+ def name(self) -> str:\n+ return self._name.value\n+\n+ def _useAttributes(self, attributes: dict[str, Any]) -> None:\n+ if \"body\" in attributes:\n+ self._body = self._makeStringAttribute(attributes[\"body\"])\n+ if \"name\" in attributes:\n+ self._name = self._makeStringAttribute(attributes[\"name\"])"},{"sha":"88f60f546ebc64d1f448327f25b92ca814fb964a","filename":"github/Repository.py","status":"modified","additions":38,"deletions":0,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -248,6 +248,7 @@\n import github.WorkflowRun\n from github import Consts\n from github.Environment import Environment\n+from github.GeneratedReleaseNotes import GeneratedReleaseNotes\n from github.GithubObject import (\n Attribute,\n CompletableGithubObject,\n@@ -1549,6 +1550,43 @@ def create_git_release(\n headers, data = self._requester.requestJsonAndCheck(\"POST\", f\"{self.url}/releases\", input=post_parameters)\n return github.GitRelease.GitRelease(self._requester, headers, data, completed=True)\n \n+ def generate_release_notes(\n+ self,\n+ tag_name: str,\n+ previous_tag_name: Opt[str] = NotSet,\n+ target_commitish: Opt[str] = NotSet,\n+ configuration_file_path: Opt[str] = NotSet,\n+ ) -> GeneratedReleaseNotes:\n+ \"\"\"\n+ :calls: `POST /repos/{owner}/{repo}/releases/generate-notes `\n+ :param tag_name: The tag name for the release. This can be an existing tag or a new one.\n+ :param previous_tag_name: The name of the previous tag to use as the starting point for the release notes. Use to manually specify the range for the set of changes considered as part this release.\n+ :param target_commitish: Specifies the commitish value that will be the target for the release's tag. Required if the supplied tag_name does not reference an existing tag. Ignored if the tag_name already exists.\n+ :param configuration_file_path: Specifies a path to a file in the repository containing configuration settings used for generating the release notes. If unspecified, the configuration file located in the repository at '.github/release.yml' or '.github/release.yaml' will be used. If that is not present, the default configuration will be used.\n+ :rytpe: :class:`GeneratedReleaseNotes`\n+ \"\"\"\n+ assert isinstance(tag_name, str), tag_name\n+ assert isinstance(previous_tag_name, str) or is_optional(previous_tag_name, str), previous_tag_name\n+ assert isinstance(target_commitish, str) or is_optional(target_commitish, str), target_commitish\n+ assert isinstance(configuration_file_path, str) or is_optional(\n+ configuration_file_path, str\n+ ), configuration_file_path\n+\n+ post_parameters = NotSet.remove_unset_items(\n+ {\n+ \"tag_name\": tag_name,\n+ \"previous_tag_name\": previous_tag_name,\n+ \"target_commitish\": target_commitish,\n+ \"configuration_file_path\": configuration_file_path,\n+ }\n+ )\n+\n+ headers, data = self._requester.requestJsonAndCheck(\n+ \"POST\", f\"{self.url}/releases/generate-notes\", input=post_parameters\n+ )\n+\n+ return GeneratedReleaseNotes(self._requester, headers, data)\n+\n def create_git_tag(\n self,\n tag: str,"},{"sha":"ea6623890081c67fe3dbae69d7caf013e58afb75","filename":"pyproject.toml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/pyproject.toml","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/pyproject.toml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/pyproject.toml?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -82,7 +82,7 @@ quiet-level = 3\n # https://github.com/codespell-project/codespell/issues/2839#issuecomment-1731601603\n # also adding links until they ignored by its: nature\n # https://github.com/codespell-project/codespell/issues/2243#issuecomment-1732019960\n-ignore-words-list = \"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,chang,manuel\"\n+ignore-words-list = \"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,chang,manuel,commitish\"\n \n [tool.ruff]\n line-length = 120"}]} diff --git a/tests/ReplayData/PaginatedList.testReversedWithFirstSinglePage.txt b/tests/ReplayData/PaginatedList.testReversedWithFirstSinglePage.txt new file mode 100644 index 0000000000..4221bf6fbb --- /dev/null +++ b/tests/ReplayData/PaginatedList.testReversedWithFirstSinglePage.txt @@ -0,0 +1,21 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 10:12:04 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/"0a3f82885dbe27f5c6e3c4f875494fd94ab07ab93f9b4dd36e8208c228010b42"'), ('Last-Modified', 'Tue, 02 Sep 2025 17:30:48 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4970'), ('X-RateLimit-Reset', '1759920713'), ('X-RateLimit-Used', '30'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'FBE7:31BC9:172DF10:15C2035:68E638F3')] +{"sha":"f5f9756a1dd52a53820cc54927abb34725377987","node_id":"C_kwDOADYVqtoAKGY1Zjk3NTZhMWRkNTJhNTM4MjBjYzU0OTI3YWJiMzQ3MjUzNzc5ODc","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-02T17:30:48Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-02T17:30:48Z"},"message":"Use default type if known type is not supported (#3365)\n\nFixes #3364.","tree":{"sha":"d51a7e258bf5adfbdff698e2be0251e0ec7f13bf","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/d51a7e258bf5adfbdff698e2be0251e0ec7f13bf"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/f5f9756a1dd52a53820cc54927abb34725377987","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJotynICRC1aQ7uu5UhlAAAWnYQAIZmJFTyICIsHim25qzt/tuy\nBanCChisBqeYqSYuDkWfbWfQvnZH+AGfEA3tuDwOTijgPav1Mbg9n698Q3YjKh9R\nIJ7eWyTF6isCCjoS5T4XGCyshWV8XvlsmLmQDrCLlsn4HKCE+cAsydbqNpzatsiN\n9pdsyk/yWGkVluchyz0X/PB10f9TzauiBrH+g96LxiS1KftsSy5Cdz4gZ5BEN07s\nV9gkS8gjttk0YvZVQNzKIcgfphDh/YbfThknGxlMUyveJsGaOHnagpbuKP6nIXWD\n5MakLMf1K7AmuUhGce/cEWI637eo5XXDqYn/1EKTZulJAhbVA6h/hzc94Oi96bnQ\nyIDSjrAH25aJSkjsHGmJEkUbb2gnEEoMtN1tZ4vQk2Ki8CnORDQh4PIJtIRNhF8w\nXTerRqd3CrSyyGa00cNKohU536a4xgIPZYkFD6x21DtB+iZI9twpOzuc3OGSMf/J\nhM6Oihc0NsQ8qtTzUP7tD7QoT0HjuT7A5lJJqpU2fzN8TN3+PC5nikLx2xpkmy5I\nWwYf0LyzlcSepZLws4urI6ITlIEoEVTqXA6dr6FSxISqzonZ4HPoM42Kve7UWhXt\nuXqP0NI054zali3z9HnmLzuuxLdOLJJ9evKZ8oxCJXoUEVj42EeGN4vqQd81t+iw\nnQAit7b3UnxRgcbAksP1\n=5+n7\n-----END PGP SIGNATURE-----\n","payload":"tree d51a7e258bf5adfbdff698e2be0251e0ec7f13bf\nparent 3ccecbb99d0d0f661f19684c8882d52b60450e64\nauthor Enrico Minack 1756834248 +0200\ncommitter GitHub 1756834248 +0200\n\nUse default type if known type is not supported (#3365)\n\nFixes #3364.","verified_at":"2025-09-02T17:30:48Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987","html_url":"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3ccecbb99d0d0f661f19684c8882d52b60450e64","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3ccecbb99d0d0f661f19684c8882d52b60450e64","html_url":"https://github.com/PyGithub/PyGithub/commit/3ccecbb99d0d0f661f19684c8882d52b60450e64"}],"stats":{"total":123,"additions":119,"deletions":4},"files":[{"sha":"1e442612c22db72febe809d7afeccb56264026f4","filename":"github/GithubApp.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubApp.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -211,7 +211,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None:\n if \"owner\" in attributes: # pragma no branch\n self._owner = self._makeUnionClassAttributeFromTypeKey(\n \"type\",\n- \"Enterprise\",\n+ \"User\",\n attributes[\"owner\"],\n (github.NamedUser.NamedUser, \"User\"),\n (github.Organization.Organization, \"Organization\"),"},{"sha":"cd33008621af2ac0bedf189cf77ff6ab0250ceec","filename":"github/GithubObject.py","status":"modified","additions":15,"deletions":3,"changes":18,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -370,13 +370,23 @@ def _makeClassAttribute(self, klass: type[T_gh], value: Any) -> Attribute[T_gh]:\n )\n \n def _makeUnionClassAttributeFromTypeName(\n- self, type_name: str | None, value: Any, *class_and_names: tuple[type[T_gh], str]\n+ self, type_name: str | None, fallback_type: str | None, value: Any, *class_and_names: tuple[type[T_gh], str]\n ) -> Attribute[T_gh]:\n if value is None or type_name is None:\n return _ValuedAttribute(None) # type: ignore\n+ fallback_class = None\n for klass, name in class_and_names:\n if type_name == name:\n return self._makeClassAttribute(klass, value)\n+ if fallback_type == name:\n+ fallback_class = klass\n+ if fallback_type is not None:\n+ if fallback_class is None:\n+ # this is misconfiguration in PyGithub code, not a user's fault\n+ raise ValueError(\n+ f\"Fallback type {fallback_type} is not among classes and names: {[name for klass, name in class_and_names]}\"\n+ )\n+ return self._makeClassAttribute(fallback_class, value)\n return _BadAttribute(value, type) # type: ignore\n \n def _makeUnionClassAttributeFromTypeKey(\n@@ -388,7 +398,9 @@ def _makeUnionClassAttributeFromTypeKey(\n ) -> Attribute[T_gh]:\n if value is None or not isinstance(value, dict):\n return _ValuedAttribute(None) # type: ignore\n- return self._makeUnionClassAttributeFromTypeName(value.get(type_key, default_type), value, *class_and_names)\n+ return self._makeUnionClassAttributeFromTypeName(\n+ value.get(type_key, default_type), default_type, value, *class_and_names\n+ )\n \n def _makeUnionClassAttributeFromTypeKeyAndValueKey(\n self,\n@@ -401,7 +413,7 @@ def _makeUnionClassAttributeFromTypeKeyAndValueKey(\n if value is None or not isinstance(value, dict):\n return _ValuedAttribute(None) # type: ignore\n return self._makeUnionClassAttributeFromTypeName(\n- value.get(type_key, default_type), value.get(value_key), *class_and_names\n+ value.get(type_key, default_type), default_type, value.get(value_key), *class_and_names\n )\n \n @staticmethod"},{"sha":"173f14bad62d8eafa2ee04287e8ef278c9106d4a","filename":"tests/GithubObject.py","status":"modified","additions":103,"deletions":0,"changes":103,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -24,15 +24,21 @@\n # #\n ################################################################################\n \n+from __future__ import annotations\n+\n import unittest\n from datetime import datetime, timedelta, timezone\n+from typing import Any\n+from unittest import mock\n \n import github.Repository\n import github.RepositoryDiscussion\n \n from . import Framework\n \n gho = Framework.github.GithubObject\n+ghusr = Framework.github.NamedUser\n+ghorg = Framework.github.Organization\n \n \n class GithubObject(unittest.TestCase):\n@@ -52,6 +58,95 @@ def testApiType(self):\n self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_rest(), False)\n self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_graphql(), True)\n \n+ def testMakeUnionClassAttributeFromTypeName(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ data = {\"login\": \"login\"}\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(type_name: str | None, fallback_type: str | None = \"User\"):\n+ return obj._makeUnionClassAttributeFromTypeName(type_name, fallback_type, data, *class_and_names)\n+\n+ none = make(None)\n+ usr = make(\"User\")\n+ org = make(\"Organization\")\n+ unknown = make(\"Unknown\")\n+ bad = make(\"Unknown\", None)\n+\n+ self.assertIsInstance(none, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+ self.assertIsInstance(bad, gho._BadAttribute)\n+\n+ self.assertIsNone(none.value)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n+ def testMakeUnionClassAttributeFromTypeKey(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(data: dict[str, Any]):\n+ return obj._makeUnionClassAttributeFromTypeKey(\"type\", \"User\", data, *class_and_names)\n+\n+ default = make({\"login\": \"login\"})\n+ usr = make({\"login\": \"login\", \"type\": \"User\"})\n+ org = make({\"login\": \"login\", \"type\": \"Organization\"})\n+ unknown = make({\"login\": \"login\", \"type\": \"Unknown\"})\n+\n+ self.assertIsInstance(default, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+\n+ self.assertIsInstance(default.value, ghusr.NamedUser)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(default.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n+ def testMakeUnionClassAttributeFromTypeKeyAndValueKey(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(data: dict[str, Any]):\n+ return obj._makeUnionClassAttributeFromTypeKeyAndValueKey(\"type\", \"data\", \"User\", data, *class_and_names)\n+\n+ default = make({\"data\": {\"login\": \"login\"}})\n+ usr = make({\"data\": {\"login\": \"login\"}, \"type\": \"User\"})\n+ org = make({\"data\": {\"login\": \"login\"}, \"type\": \"Organization\"})\n+ unknown = make({\"data\": {\"login\": \"login\"}, \"type\": \"Unknown\"})\n+\n+ self.assertIsInstance(default, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+\n+ self.assertIsInstance(default.value, ghusr.NamedUser)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(default.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n def testMakeDatetimeAttribute(self):\n for value, expected in [\n (None, None),\n@@ -145,3 +240,11 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(value, e.exception.actual_value)\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n+\n+\n+class TestingClass(gho.NonCompletableGithubObject):\n+ def _initAttributes(self) -> None:\n+ pass\n+\n+ def _useAttributes(self, attributes: Any) -> None:\n+ pass"}]} + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 10:12:04 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/"0a3f82885dbe27f5c6e3c4f875494fd94ab07ab93f9b4dd36e8208c228010b42"'), ('Last-Modified', 'Tue, 02 Sep 2025 17:30:48 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4969'), ('X-RateLimit-Reset', '1759920713'), ('X-RateLimit-Used', '31'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F175:1CFE8:1769A81:15F46DD:68E638F4')] +{"sha":"f5f9756a1dd52a53820cc54927abb34725377987","node_id":"C_kwDOADYVqtoAKGY1Zjk3NTZhMWRkNTJhNTM4MjBjYzU0OTI3YWJiMzQ3MjUzNzc5ODc","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-02T17:30:48Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-02T17:30:48Z"},"message":"Use default type if known type is not supported (#3365)\n\nFixes #3364.","tree":{"sha":"d51a7e258bf5adfbdff698e2be0251e0ec7f13bf","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/d51a7e258bf5adfbdff698e2be0251e0ec7f13bf"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/f5f9756a1dd52a53820cc54927abb34725377987","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJotynICRC1aQ7uu5UhlAAAWnYQAIZmJFTyICIsHim25qzt/tuy\nBanCChisBqeYqSYuDkWfbWfQvnZH+AGfEA3tuDwOTijgPav1Mbg9n698Q3YjKh9R\nIJ7eWyTF6isCCjoS5T4XGCyshWV8XvlsmLmQDrCLlsn4HKCE+cAsydbqNpzatsiN\n9pdsyk/yWGkVluchyz0X/PB10f9TzauiBrH+g96LxiS1KftsSy5Cdz4gZ5BEN07s\nV9gkS8gjttk0YvZVQNzKIcgfphDh/YbfThknGxlMUyveJsGaOHnagpbuKP6nIXWD\n5MakLMf1K7AmuUhGce/cEWI637eo5XXDqYn/1EKTZulJAhbVA6h/hzc94Oi96bnQ\nyIDSjrAH25aJSkjsHGmJEkUbb2gnEEoMtN1tZ4vQk2Ki8CnORDQh4PIJtIRNhF8w\nXTerRqd3CrSyyGa00cNKohU536a4xgIPZYkFD6x21DtB+iZI9twpOzuc3OGSMf/J\nhM6Oihc0NsQ8qtTzUP7tD7QoT0HjuT7A5lJJqpU2fzN8TN3+PC5nikLx2xpkmy5I\nWwYf0LyzlcSepZLws4urI6ITlIEoEVTqXA6dr6FSxISqzonZ4HPoM42Kve7UWhXt\nuXqP0NI054zali3z9HnmLzuuxLdOLJJ9evKZ8oxCJXoUEVj42EeGN4vqQd81t+iw\nnQAit7b3UnxRgcbAksP1\n=5+n7\n-----END PGP SIGNATURE-----\n","payload":"tree d51a7e258bf5adfbdff698e2be0251e0ec7f13bf\nparent 3ccecbb99d0d0f661f19684c8882d52b60450e64\nauthor Enrico Minack 1756834248 +0200\ncommitter GitHub 1756834248 +0200\n\nUse default type if known type is not supported (#3365)\n\nFixes #3364.","verified_at":"2025-09-02T17:30:48Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987","html_url":"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3ccecbb99d0d0f661f19684c8882d52b60450e64","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3ccecbb99d0d0f661f19684c8882d52b60450e64","html_url":"https://github.com/PyGithub/PyGithub/commit/3ccecbb99d0d0f661f19684c8882d52b60450e64"}],"stats":{"total":123,"additions":119,"deletions":4},"files":[{"sha":"1e442612c22db72febe809d7afeccb56264026f4","filename":"github/GithubApp.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubApp.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -211,7 +211,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None:\n if \"owner\" in attributes: # pragma no branch\n self._owner = self._makeUnionClassAttributeFromTypeKey(\n \"type\",\n- \"Enterprise\",\n+ \"User\",\n attributes[\"owner\"],\n (github.NamedUser.NamedUser, \"User\"),\n (github.Organization.Organization, \"Organization\"),"},{"sha":"cd33008621af2ac0bedf189cf77ff6ab0250ceec","filename":"github/GithubObject.py","status":"modified","additions":15,"deletions":3,"changes":18,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -370,13 +370,23 @@ def _makeClassAttribute(self, klass: type[T_gh], value: Any) -> Attribute[T_gh]:\n )\n \n def _makeUnionClassAttributeFromTypeName(\n- self, type_name: str | None, value: Any, *class_and_names: tuple[type[T_gh], str]\n+ self, type_name: str | None, fallback_type: str | None, value: Any, *class_and_names: tuple[type[T_gh], str]\n ) -> Attribute[T_gh]:\n if value is None or type_name is None:\n return _ValuedAttribute(None) # type: ignore\n+ fallback_class = None\n for klass, name in class_and_names:\n if type_name == name:\n return self._makeClassAttribute(klass, value)\n+ if fallback_type == name:\n+ fallback_class = klass\n+ if fallback_type is not None:\n+ if fallback_class is None:\n+ # this is misconfiguration in PyGithub code, not a user's fault\n+ raise ValueError(\n+ f\"Fallback type {fallback_type} is not among classes and names: {[name for klass, name in class_and_names]}\"\n+ )\n+ return self._makeClassAttribute(fallback_class, value)\n return _BadAttribute(value, type) # type: ignore\n \n def _makeUnionClassAttributeFromTypeKey(\n@@ -388,7 +398,9 @@ def _makeUnionClassAttributeFromTypeKey(\n ) -> Attribute[T_gh]:\n if value is None or not isinstance(value, dict):\n return _ValuedAttribute(None) # type: ignore\n- return self._makeUnionClassAttributeFromTypeName(value.get(type_key, default_type), value, *class_and_names)\n+ return self._makeUnionClassAttributeFromTypeName(\n+ value.get(type_key, default_type), default_type, value, *class_and_names\n+ )\n \n def _makeUnionClassAttributeFromTypeKeyAndValueKey(\n self,\n@@ -401,7 +413,7 @@ def _makeUnionClassAttributeFromTypeKeyAndValueKey(\n if value is None or not isinstance(value, dict):\n return _ValuedAttribute(None) # type: ignore\n return self._makeUnionClassAttributeFromTypeName(\n- value.get(type_key, default_type), value.get(value_key), *class_and_names\n+ value.get(type_key, default_type), default_type, value.get(value_key), *class_and_names\n )\n \n @staticmethod"},{"sha":"173f14bad62d8eafa2ee04287e8ef278c9106d4a","filename":"tests/GithubObject.py","status":"modified","additions":103,"deletions":0,"changes":103,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -24,15 +24,21 @@\n # #\n ################################################################################\n \n+from __future__ import annotations\n+\n import unittest\n from datetime import datetime, timedelta, timezone\n+from typing import Any\n+from unittest import mock\n \n import github.Repository\n import github.RepositoryDiscussion\n \n from . import Framework\n \n gho = Framework.github.GithubObject\n+ghusr = Framework.github.NamedUser\n+ghorg = Framework.github.Organization\n \n \n class GithubObject(unittest.TestCase):\n@@ -52,6 +58,95 @@ def testApiType(self):\n self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_rest(), False)\n self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_graphql(), True)\n \n+ def testMakeUnionClassAttributeFromTypeName(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ data = {\"login\": \"login\"}\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(type_name: str | None, fallback_type: str | None = \"User\"):\n+ return obj._makeUnionClassAttributeFromTypeName(type_name, fallback_type, data, *class_and_names)\n+\n+ none = make(None)\n+ usr = make(\"User\")\n+ org = make(\"Organization\")\n+ unknown = make(\"Unknown\")\n+ bad = make(\"Unknown\", None)\n+\n+ self.assertIsInstance(none, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+ self.assertIsInstance(bad, gho._BadAttribute)\n+\n+ self.assertIsNone(none.value)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n+ def testMakeUnionClassAttributeFromTypeKey(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(data: dict[str, Any]):\n+ return obj._makeUnionClassAttributeFromTypeKey(\"type\", \"User\", data, *class_and_names)\n+\n+ default = make({\"login\": \"login\"})\n+ usr = make({\"login\": \"login\", \"type\": \"User\"})\n+ org = make({\"login\": \"login\", \"type\": \"Organization\"})\n+ unknown = make({\"login\": \"login\", \"type\": \"Unknown\"})\n+\n+ self.assertIsInstance(default, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+\n+ self.assertIsInstance(default.value, ghusr.NamedUser)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(default.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n+ def testMakeUnionClassAttributeFromTypeKeyAndValueKey(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(data: dict[str, Any]):\n+ return obj._makeUnionClassAttributeFromTypeKeyAndValueKey(\"type\", \"data\", \"User\", data, *class_and_names)\n+\n+ default = make({\"data\": {\"login\": \"login\"}})\n+ usr = make({\"data\": {\"login\": \"login\"}, \"type\": \"User\"})\n+ org = make({\"data\": {\"login\": \"login\"}, \"type\": \"Organization\"})\n+ unknown = make({\"data\": {\"login\": \"login\"}, \"type\": \"Unknown\"})\n+\n+ self.assertIsInstance(default, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+\n+ self.assertIsInstance(default.value, ghusr.NamedUser)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(default.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n def testMakeDatetimeAttribute(self):\n for value, expected in [\n (None, None),\n@@ -145,3 +240,11 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(value, e.exception.actual_value)\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n+\n+\n+class TestingClass(gho.NonCompletableGithubObject):\n+ def _initAttributes(self) -> None:\n+ pass\n+\n+ def _useAttributes(self, attributes: Any) -> None:\n+ pass"}]} diff --git a/tests/ReplayData/PaginatedList.testTotalCountWithDeprecationLink.txt b/tests/ReplayData/PaginatedList.testTotalCountWithDeprecationLink.txt new file mode 100644 index 0000000000..93dbc9df13 --- /dev/null +++ b/tests/ReplayData/PaginatedList.testTotalCountWithDeprecationLink.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/search/issues?q=commit%3Aexample_sha&per_page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '29'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('access-control-expose-headers', 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', '62E81E32:5370:61ACB7C:53140729'), ('access-control-allow-credentials', 'true'), ('vary', 'Accept-Encoding'), ('content-length', '2340'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '30'), ('link', '; rel="deprecation"; type="text/html"'), ('cache-control', 'no-cache'), ('date', 'Mon, 03 Mar 2014 04:38:01 GMT'), ('access-control-allow-origin', '*'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1393821541')] +{"total_count":1,"items":[{"url":"https://api.github.com/repos/octocat/Hello-World/issues/1347","labels_url":"https://api.github.com/repos/octocat/Hello-World/issues/1347/labels{/name}","comments_url":"https://api.github.com/repos/octocat/Hello-World/issues/1347/comments","events_url":"https://api.github.com/repos/octocat/Hello-World/issues/1347/events","html_url":"https://github.com/octocat/Hello-World/issues/1347","id":1347,"number":1347,"title":"Found a bug","user":{"login":"octocat","id":1,"avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"labels":[{"id":208045946,"url":"https://api.github.com/repos/octocat/Hello-World/labels/bug","name":"bug","description":"Something isn't working","color":"d73a4a","default":true}],"state":"open","locked":false,"assignee":{"login":"octocat","id":1,"avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"assignees":[{"login":"octocat","id":1,"avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/octocat/Hello-World/milestones/1","html_url":"https://github.com/octocat/Hello-World/milestone/1","labels_url":"https://api.github.com/repos/octocat/Hello-World/milestones/1/labels","id":1002604,"number":1,"state":"open","title":"v1.0","description":"Tracking milestone for version 1.0","creator":{"login":"octocat","id":1,"avatar_url":"https://github.com/images/error/octocat_happy.gif","gravatar_id":"","url":"https://api.github.com/users/octocat","html_url":"https://github.com/octocat","followers_url":"https://api.github.com/users/octocat/followers","following_url":"https://api.github.com/users/octocat/following{/other_user}","gists_url":"https://api.github.com/users/octocat/gists{/gist_id}","starred_url":"https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/octocat/subscriptions","organizations_url":"https://api.github.com/users/octocat/orgs","repos_url":"https://api.github.com/users/octocat/repos","events_url":"https://api.github.com/users/octocat/events{/privacy}","received_events_url":"https://api.github.com/users/octocat/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":8,"created_at":"2011-04-10T20:09:31Z","updated_at":"2014-03-03T18:58:10Z","closed_at":"2013-02-12T13:22:01Z","due_on":"2018-09-27T23:39:01Z"},"comments":0,"created_at":"2011-04-22T13:33:48Z","updated_at":"2011-04-22T13:33:48Z","closed_at":null,"author_association":"COLLABORATOR","body":"I'm having a problem with this.","score":1.0}]} diff --git a/tests/ReplayData/PaginatedList.testWithFirstPage.txt b/tests/ReplayData/PaginatedList.testWithFirstPage.txt new file mode 100644 index 0000000000..49d15af2b6 --- /dev/null +++ b/tests/ReplayData/PaginatedList.testWithFirstPage.txt @@ -0,0 +1,32 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 10:04:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"3abfee8249f9103269d3c489cbd2681770ecd0c882748d94e12a6d2972613972"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="next", ; rel="last"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1759920713'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F14F:ACD78:167AFD5:151F167:68E63738')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"f821990c6fbc8180f26382685c9fb6025eae4ae9","filename":"github/GeneratedReleaseNotes.py","status":"added","additions":43,"deletions":0,"changes":43,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/github%2FGeneratedReleaseNotes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/github%2FGeneratedReleaseNotes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGeneratedReleaseNotes.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,43 @@\n+from __future__ import annotations\n+\n+from typing import Any\n+\n+from github.GithubObject import (\n+ Attribute,\n+ NonCompletableGithubObject,\n+ NotSet,\n+)\n+\n+\n+class GeneratedReleaseNotes(NonCompletableGithubObject):\n+ \"\"\"\n+ This class represents the release notes generated by the release/generate-notes REST API endpoint.\n+\n+ The reference can be found here:\n+ https://docs.github.com/en/rest/releases/releases#generate-release-notes-content-for-a-release\n+\n+ The OpenAPI schema can be found at\n+ - /components/schemas/release-notes-content\n+\n+ \"\"\"\n+\n+ def _initAttributes(self) -> None:\n+ self._body: Attribute[str] = NotSet\n+ self._name: Attribute[str] = NotSet\n+\n+ def __repr__(self) -> str:\n+ return self.get__repr__({\"name\": self._name.value, \"body\": self._body.value})\n+\n+ @property\n+ def body(self) -> str:\n+ return self._body.value\n+\n+ @property\n+ def name(self) -> str:\n+ return self._name.value\n+\n+ def _useAttributes(self, attributes: dict[str, Any]) -> None:\n+ if \"body\" in attributes:\n+ self._body = self._makeStringAttribute(attributes[\"body\"])\n+ if \"name\" in attributes:\n+ self._name = self._makeStringAttribute(attributes[\"name\"])"},{"sha":"88f60f546ebc64d1f448327f25b92ca814fb964a","filename":"github/Repository.py","status":"modified","additions":38,"deletions":0,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -248,6 +248,7 @@\n import github.WorkflowRun\n from github import Consts\n from github.Environment import Environment\n+from github.GeneratedReleaseNotes import GeneratedReleaseNotes\n from github.GithubObject import (\n Attribute,\n CompletableGithubObject,\n@@ -1549,6 +1550,43 @@ def create_git_release(\n headers, data = self._requester.requestJsonAndCheck(\"POST\", f\"{self.url}/releases\", input=post_parameters)\n return github.GitRelease.GitRelease(self._requester, headers, data, completed=True)\n \n+ def generate_release_notes(\n+ self,\n+ tag_name: str,\n+ previous_tag_name: Opt[str] = NotSet,\n+ target_commitish: Opt[str] = NotSet,\n+ configuration_file_path: Opt[str] = NotSet,\n+ ) -> GeneratedReleaseNotes:\n+ \"\"\"\n+ :calls: `POST /repos/{owner}/{repo}/releases/generate-notes `\n+ :param tag_name: The tag name for the release. This can be an existing tag or a new one.\n+ :param previous_tag_name: The name of the previous tag to use as the starting point for the release notes. Use to manually specify the range for the set of changes considered as part this release.\n+ :param target_commitish: Specifies the commitish value that will be the target for the release's tag. Required if the supplied tag_name does not reference an existing tag. Ignored if the tag_name already exists.\n+ :param configuration_file_path: Specifies a path to a file in the repository containing configuration settings used for generating the release notes. If unspecified, the configuration file located in the repository at '.github/release.yml' or '.github/release.yaml' will be used. If that is not present, the default configuration will be used.\n+ :rytpe: :class:`GeneratedReleaseNotes`\n+ \"\"\"\n+ assert isinstance(tag_name, str), tag_name\n+ assert isinstance(previous_tag_name, str) or is_optional(previous_tag_name, str), previous_tag_name\n+ assert isinstance(target_commitish, str) or is_optional(target_commitish, str), target_commitish\n+ assert isinstance(configuration_file_path, str) or is_optional(\n+ configuration_file_path, str\n+ ), configuration_file_path\n+\n+ post_parameters = NotSet.remove_unset_items(\n+ {\n+ \"tag_name\": tag_name,\n+ \"previous_tag_name\": previous_tag_name,\n+ \"target_commitish\": target_commitish,\n+ \"configuration_file_path\": configuration_file_path,\n+ }\n+ )\n+\n+ headers, data = self._requester.requestJsonAndCheck(\n+ \"POST\", f\"{self.url}/releases/generate-notes\", input=post_parameters\n+ )\n+\n+ return GeneratedReleaseNotes(self._requester, headers, data)\n+\n def create_git_tag(\n self,\n tag: str,"},{"sha":"ea6623890081c67fe3dbae69d7caf013e58afb75","filename":"pyproject.toml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/pyproject.toml","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/pyproject.toml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/pyproject.toml?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -82,7 +82,7 @@ quiet-level = 3\n # https://github.com/codespell-project/codespell/issues/2839#issuecomment-1731601603\n # also adding links until they ignored by its: nature\n # https://github.com/codespell-project/codespell/issues/2243#issuecomment-1732019960\n-ignore-words-list = \"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,chang,manuel\"\n+ignore-words-list = \"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,chang,manuel,commitish\"\n \n [tool.ruff]\n line-length = 120"}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 10:04:41 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"6ba1dd93c9bbf4f0036fad1cf68de4926be6bc0c92d622f3585c89c4a7b640dc"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="next", ; rel="last", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4981'), ('X-RateLimit-Reset', '1759920713'), ('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', 'FD5A:31BC9:167CE59:151B9B5:68E63739')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"71c53ad1b6acb3291b60a42493c295f6f6a398d9","filename":"tests/ReplayData/Repository.testGenerateReleaseNotes.txt","status":"added","additions":10,"deletions":0,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotes.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotes.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FRepository.testGenerateReleaseNotes.txt?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,10 @@\n+https\n+POST\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/releases/generate-notes\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}\n+{\"tag_name\": \"vX.Y.Z-by-PyGithub-acctest\"}\n+200\n+[('Date', 'Sun, 18 Aug 2024 23:56: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/\"f05115701836368bcab805d829f1453234af1eea7b25bf97c3effa382838f562\"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-11-14 21:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4982'), ('X-RateLimit-Reset', '1724025644'), ('X-RateLimit-Used', '18'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('X-GitHub-Request-Id', '86EA:313F29:56B6E84:A55D123:66C28A3C'), ('Server', 'github.com')]\n+{\"name\":\"vX.Y.Z-by-PyGithub-acctest\",\"body\":\"**Full Changelog**: https://github.com/PyGithub/PyGithub/commits/vX.Y.Z-by-PyGithub-acctest\"}"},{"sha":"405365135a982d3e906c465c23056cd03e18b0b4","filename":"tests/ReplayData/Repository.testGenerateReleaseNotesWithAllArguments.txt","status":"added","additions":21,"deletions":0,"changes":21,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotesWithAllArguments.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FReplayData%2FRepository.testGenerateReleaseNotesWithAllArguments.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReplayData%2FRepository.testGenerateReleaseNotesWithAllArguments.txt?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,21 @@\n+https\n+POST\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/releases\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}\n+{\"tag_name\": \"vX.Y.Z-by-PyGithub-acctest-previous\", \"draft\": false, \"prerelease\": false, \"generate_release_notes\": false, \"name\": \"vX.Y.Z: PyGithub acctest\", \"body\": \"This release is created by PyGithub\", \"make_latest\": \"true\"}\n+201\n+[('Date', 'Mon, 19 Aug 2024 00:34:07 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '1900'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', '\"060006433f9b7748cbf7198d4f0d820482591704be702c1169dd21489da95c5d\"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-11-14 21:03:22 UTC'), ('Location', 'https://api.github.com/repos/PyGithub/PyGithub/releases/170779796'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4965'), ('X-RateLimit-Reset', '1724029435'), ('X-RateLimit-Used', '35'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('X-GitHub-Request-Id', 'D6C0:2B9908:1D4A719:37A4849:66C292FE'), ('Server', 'github.com')]\n+{\"url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases/170779796\",\"assets_url\":\"https://api.github.com/repos/PyGithub/PyGithub/releases/170779796/assets\",\"upload_url\":\"https://uploads.github.com/repos/PyGithub/PyGithub/releases/170779796/assets{?name,label}\",\"html_url\":\"https://github.com/PyGithub/PyGithub/releases/tag/vX.Y.Z-by-PyGithub-acctest-previous\",\"id\":170779796,\"author\":{\"login\":\"PyGithub\",\"id\":96152357,\"node_id\":\"U_kgDOBbsrJQ\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/96152357?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\":\"User\",\"site_admin\":false},\"node_id\":\"RE_kwDOMlKsTM4KLeSU\",\"tag_name\":\"vX.Y.Z-by-PyGithub-acctest-previous\",\"target_commitish\":\"main\",\"name\":\"vX.Y.Z: PyGithub acctest\",\"draft\":false,\"prerelease\":false,\"created_at\":\"2024-08-19T00:25:59Z\",\"published_at\":\"2024-08-19T00:34:06Z\",\"assets\":[],\"tarball_url\":\"https://api.github.com/repos/PyGithub/PyGithub/tarball/vX.Y.Z-by-PyGithub-acctest-previous\",\"zipball_url\":\"https://api.github.com/repos/PyGithub/PyGithub/zipball/vX.Y.Z-by-PyGithub-acctest-previous\",\"body\":\"This release is created by PyGithub\"}\n+\n+https\n+POST\n+api.github.com\n+None\n+/repos/PyGithub/PyGithub/releases/generate-notes\n+{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'}\n+{\"tag_name\": \"vX.Y.Z-by-PyGithub-acctest\", \"previous_tag_name\": \"vX.Y.Z-by-PyGithub-acctest-previous\", \"target_commitish\": \"main\", \"configuration_file_path\": \"tests/test_release_notes.yml\"}\n+200\n+[('Date', 'Mon, 19 Aug 2024 00:34:07 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/\"9cdecc62d8152adc4ab619d18dd9f194f4f76d5dba91ba53c92c9def3856f620\"'), ('X-OAuth-Scopes', 'repo'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-11-14 21:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4964'), ('X-RateLimit-Reset', '1724029435'), ('X-RateLimit-Used', '36'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', \"default-src 'none'\"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('X-GitHub-Request-Id', 'D6C4:4388A:1BF3BE3:3510B09:66C292FF'), ('Server', 'github.com')]\n+{\"name\":\"vX.Y.Z-by-PyGithub-acctest\",\"body\":\"\\n\\n\\n\\n**Full Changelog**: https://github.com/PyGithub/PyGithub/compare/vX.Y.Z-by-PyGithub-acctest-previous...vX.Y.Z-by-PyGithub-acctest\"}"},{"sha":"56f166cff6326e38855c137610cf977dc79548e6","filename":"tests/Repository.py","status":"modified","additions":26,"deletions":0,"changes":26,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRepository.py?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -537,6 +537,32 @@ def testCreateGitReleaseWithAllArguments(self):\n tag = [tag for tag in self.repo.get_tags() if tag.name == \"vX.Y.Z-by-PyGithub-acctest2\"].pop()\n self.assertEqual(tag.commit.sha, \"da9a285fd8b782461e56cba39ae8d2fa41ca7cdc\")\n \n+ def testGenerateReleaseNotes(self):\n+ notes = self.repo.generate_release_notes(\"vX.Y.Z-by-PyGithub-acctest\")\n+ self.assertEqual(notes.name, \"vX.Y.Z-by-PyGithub-acctest\")\n+ self.assertEqual(\n+ notes.body, \"**Full Changelog**: https://github.com/PyGithub/PyGithub/commits/vX.Y.Z-by-PyGithub-acctest\"\n+ )\n+ self.assertEqual(\n+ repr(notes),\n+ 'GeneratedReleaseNotes(name=\"vX.Y.Z-by-PyGithub-acctest\", body=\"**Full Changelog**: https://github.com/PyGithub/PyGithub/commits/vX.Y.Z-by-PyGithub-acctest\")',\n+ )\n+\n+ def testGenerateReleaseNotesWithAllArguments(self):\n+ self.repo.create_git_release(\n+ tag=\"vX.Y.Z-by-PyGithub-acctest-previous\",\n+ name=\"vX.Y.Z: PyGithub acctest\",\n+ message=\"This release is created by PyGithub\",\n+ )\n+ notes = self.repo.generate_release_notes(\n+ tag_name=\"vX.Y.Z-by-PyGithub-acctest\",\n+ previous_tag_name=\"vX.Y.Z-by-PyGithub-acctest-previous\",\n+ target_commitish=\"main\",\n+ configuration_file_path=\"tests/test_release_notes.yml\",\n+ )\n+ self.assertEqual(notes.name, \"vX.Y.Z-by-PyGithub-acctest\")\n+ self.assertIn(\"Release notes generated using configuration in tests/test_release_notes.yml at main\", notes.body)\n+\n def testCreateGitTag(self):\n tag = self.repo.create_git_tag(\n \"TaggedByPyGithub\","}]} + +https +GET +api.github.com +None +/repositories/3544490/commits/e359b83a04e8f34bedab0f2180169012d238a135?per_page=3&page=3 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 10:04:42 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"548f7ba97dcae9b38721fd41fb367a82e90bd221fa220b9c0c5655c07a274f22"'), ('Last-Modified', 'Thu, 28 Aug 2025 19:26:10 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="prev", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4980'), ('X-RateLimit-Reset', '1759920713'), ('X-RateLimit-Used', '20'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F7A2:438B9:156C59C:1412E75:68E63739')] +{"sha":"e359b83a04e8f34bedab0f2180169012d238a135","node_id":"C_kwDOADYVqtoAKGUzNTliODNhMDRlOGYzNGJlZGFiMGYyMTgwMTY5MDEyZDIzOGExMzU","commit":{"author":{"name":"Matt Ball","email":"96152357+mball-agathos@users.noreply.github.com","date":"2025-08-28T19:26:10Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-08-28T19:26:10Z"},"message":"Add support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","tree":{"sha":"31a6407b7b342e651500eadc61bdf5d42cf72eed","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/31a6407b7b342e651500eadc61bdf5d42cf72eed"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e359b83a04e8f34bedab0f2180169012d238a135","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJosK1jCRC1aQ7uu5UhlAAAmsoQABeT6niMpp83ZpDXpGsUqzFL\n9QJWQdwxttog7gefE5I6fgfE9z2PU1pWryhyOYVVpNEa4mAp9nvT69gOcpmFeUD6\nraCRselQPfQN+UFUcZWLhuYzq6Thq1/57XRfS4RfbTRDV2C0yy0qP9By1JlCWFmj\nqxxyWVRcLmONgbiUnhOXkLw1KDNfDiDFizh269R7yaZtYqsSZYa7o77iASPkqRLa\nDIh5nGN1Hfy9w53xi/I40jdJEjbaVB/rY7YmzCzZQs0QxNR2aiMXrVGdM9W+7MBN\nAoEOFqzLk5B9gPoK0EoCa+KKGYhp3uDgSRg1ibptkfNTSfJKsBXRwZDdIbO3kmvP\nkzkJY0j+k5FFzo+rku3gYLLTUez/AIBBxRrar2I7gCxMuK+dxTAYZLRMBFAkeNNP\nljJl0QW45iQgxZ8svbeekHyHnoAFJ1ppwFkPJ+vUxIdY0YAam4BkVEx48Vx3QAQm\ny6Ldq/bvvwCK65+ZTkjNMpjEjpTdoJcuHuzyOXp2Rw/APz87M7LB44OI3NvCJHG9\nFTpWHadum7PoRIJIWiU2z58jh7/1Ywi+iMD4PCJLGx5GC53AtPs5cxvuSl43r26W\nxf5lVQoQwHJw7x0rHtdjN5DOYcs9bn4+o2pCRo6HD0likzGh1ACBKC6/uic+QF/6\nipq9pXgShHmxsMHmMIfo\n=bspX\n-----END PGP SIGNATURE-----\n","payload":"tree 31a6407b7b342e651500eadc61bdf5d42cf72eed\nparent 4a6bba936282fc7faa3770cffa76197e67a3bc38\nauthor Matt Ball <96152357+mball-agathos@users.noreply.github.com> 1756409170 -0600\ncommitter GitHub 1756409170 +0000\n\nAdd support to generate release notes (#3022)\n\nResolves: #2794\n\nContext:\nhttps://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#generate-release-notes-content-for-a-release\n\n---------\n\nCo-authored-by: Enrico Minack ","verified_at":"2025-08-28T19:26:27Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135","html_url":"https://github.com/PyGithub/PyGithub/commit/e359b83a04e8f34bedab0f2180169012d238a135","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e359b83a04e8f34bedab0f2180169012d238a135/comments","author":{"login":"mball-agathos","id":96152357,"node_id":"U_kgDOBbsrJQ","avatar_url":"https://avatars.githubusercontent.com/u/96152357?v=4","gravatar_id":"","url":"https://api.github.com/users/mball-agathos","html_url":"https://github.com/mball-agathos","followers_url":"https://api.github.com/users/mball-agathos/followers","following_url":"https://api.github.com/users/mball-agathos/following{/other_user}","gists_url":"https://api.github.com/users/mball-agathos/gists{/gist_id}","starred_url":"https://api.github.com/users/mball-agathos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mball-agathos/subscriptions","organizations_url":"https://api.github.com/users/mball-agathos/orgs","repos_url":"https://api.github.com/users/mball-agathos/repos","events_url":"https://api.github.com/users/mball-agathos/events{/privacy}","received_events_url":"https://api.github.com/users/mball-agathos/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4a6bba936282fc7faa3770cffa76197e67a3bc38","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4a6bba936282fc7faa3770cffa76197e67a3bc38","html_url":"https://github.com/PyGithub/PyGithub/commit/4a6bba936282fc7faa3770cffa76197e67a3bc38"}],"stats":{"total":153,"additions":152,"deletions":1},"files":[{"sha":"cf33e804ef4c854486b356fb130bef6c2f0ea5d6","filename":"tests/test_release_notes.yml","status":"added","additions":13,"deletions":0,"changes":13,"blob_url":"https://github.com/PyGithub/PyGithub/blob/e359b83a04e8f34bedab0f2180169012d238a135/tests%2Ftest_release_notes.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/e359b83a04e8f34bedab0f2180169012d238a135/tests%2Ftest_release_notes.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2Ftest_release_notes.yml?ref=e359b83a04e8f34bedab0f2180169012d238a135","patch":"@@ -0,0 +1,13 @@\n+# This file is needed for generating release notes for the Repository::testGenerateReleaseNotesWithAllArguments test\n+# See https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes\n+\n+# This is used to generate the ReplayData as used by Repository::testGenerateReleaseNotesWithAllArguments.\n+# If you need to regenerate this ReplayData files, you will need to copy this yaml file\n+# into the `.github` directory on the main branch of your forked repository.\n+# The GitHub API expects to see this file in the `.github` directory when generating release notes.\n+\n+changelog:\n+ categories:\n+ - title: Features\n+ labels:\n+ - '*'"}]} diff --git a/tests/ReplayData/PaginatedList.testWithFirstSinglePage.txt b/tests/ReplayData/PaginatedList.testWithFirstSinglePage.txt new file mode 100644 index 0000000000..ca069d900e --- /dev/null +++ b/tests/ReplayData/PaginatedList.testWithFirstSinglePage.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Wed, 08 Oct 2025 10:09:49 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/"0a3f82885dbe27f5c6e3c4f875494fd94ab07ab93f9b4dd36e8208c228010b42"'), ('Last-Modified', 'Tue, 02 Sep 2025 17:30:48 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4973'), ('X-RateLimit-Reset', '1759920713'), ('X-RateLimit-Used', '27'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'F862:3CD714:1644660:14E2289:68E6386C')] +{"sha":"f5f9756a1dd52a53820cc54927abb34725377987","node_id":"C_kwDOADYVqtoAKGY1Zjk3NTZhMWRkNTJhNTM4MjBjYzU0OTI3YWJiMzQ3MjUzNzc5ODc","commit":{"author":{"name":"Enrico Minack","email":"github@enrico.minack.dev","date":"2025-09-02T17:30:48Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2025-09-02T17:30:48Z"},"message":"Use default type if known type is not supported (#3365)\n\nFixes #3364.","tree":{"sha":"d51a7e258bf5adfbdff698e2be0251e0ec7f13bf","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/d51a7e258bf5adfbdff698e2be0251e0ec7f13bf"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/f5f9756a1dd52a53820cc54927abb34725377987","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJotynICRC1aQ7uu5UhlAAAWnYQAIZmJFTyICIsHim25qzt/tuy\nBanCChisBqeYqSYuDkWfbWfQvnZH+AGfEA3tuDwOTijgPav1Mbg9n698Q3YjKh9R\nIJ7eWyTF6isCCjoS5T4XGCyshWV8XvlsmLmQDrCLlsn4HKCE+cAsydbqNpzatsiN\n9pdsyk/yWGkVluchyz0X/PB10f9TzauiBrH+g96LxiS1KftsSy5Cdz4gZ5BEN07s\nV9gkS8gjttk0YvZVQNzKIcgfphDh/YbfThknGxlMUyveJsGaOHnagpbuKP6nIXWD\n5MakLMf1K7AmuUhGce/cEWI637eo5XXDqYn/1EKTZulJAhbVA6h/hzc94Oi96bnQ\nyIDSjrAH25aJSkjsHGmJEkUbb2gnEEoMtN1tZ4vQk2Ki8CnORDQh4PIJtIRNhF8w\nXTerRqd3CrSyyGa00cNKohU536a4xgIPZYkFD6x21DtB+iZI9twpOzuc3OGSMf/J\nhM6Oihc0NsQ8qtTzUP7tD7QoT0HjuT7A5lJJqpU2fzN8TN3+PC5nikLx2xpkmy5I\nWwYf0LyzlcSepZLws4urI6ITlIEoEVTqXA6dr6FSxISqzonZ4HPoM42Kve7UWhXt\nuXqP0NI054zali3z9HnmLzuuxLdOLJJ9evKZ8oxCJXoUEVj42EeGN4vqQd81t+iw\nnQAit7b3UnxRgcbAksP1\n=5+n7\n-----END PGP SIGNATURE-----\n","payload":"tree d51a7e258bf5adfbdff698e2be0251e0ec7f13bf\nparent 3ccecbb99d0d0f661f19684c8882d52b60450e64\nauthor Enrico Minack 1756834248 +0200\ncommitter GitHub 1756834248 +0200\n\nUse default type if known type is not supported (#3365)\n\nFixes #3364.","verified_at":"2025-09-02T17:30:48Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987","html_url":"https://github.com/PyGithub/PyGithub/commit/f5f9756a1dd52a53820cc54927abb34725377987","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f5f9756a1dd52a53820cc54927abb34725377987/comments","author":{"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","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"3ccecbb99d0d0f661f19684c8882d52b60450e64","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/3ccecbb99d0d0f661f19684c8882d52b60450e64","html_url":"https://github.com/PyGithub/PyGithub/commit/3ccecbb99d0d0f661f19684c8882d52b60450e64"}],"stats":{"total":123,"additions":119,"deletions":4},"files":[{"sha":"1e442612c22db72febe809d7afeccb56264026f4","filename":"github/GithubApp.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubApp.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -211,7 +211,7 @@ def _useAttributes(self, attributes: dict[str, Any]) -> None:\n if \"owner\" in attributes: # pragma no branch\n self._owner = self._makeUnionClassAttributeFromTypeKey(\n \"type\",\n- \"Enterprise\",\n+ \"User\",\n attributes[\"owner\"],\n (github.NamedUser.NamedUser, \"User\"),\n (github.Organization.Organization, \"Organization\"),"},{"sha":"cd33008621af2ac0bedf189cf77ff6ab0250ceec","filename":"github/GithubObject.py","status":"modified","additions":15,"deletions":3,"changes":18,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -370,13 +370,23 @@ def _makeClassAttribute(self, klass: type[T_gh], value: Any) -> Attribute[T_gh]:\n )\n \n def _makeUnionClassAttributeFromTypeName(\n- self, type_name: str | None, value: Any, *class_and_names: tuple[type[T_gh], str]\n+ self, type_name: str | None, fallback_type: str | None, value: Any, *class_and_names: tuple[type[T_gh], str]\n ) -> Attribute[T_gh]:\n if value is None or type_name is None:\n return _ValuedAttribute(None) # type: ignore\n+ fallback_class = None\n for klass, name in class_and_names:\n if type_name == name:\n return self._makeClassAttribute(klass, value)\n+ if fallback_type == name:\n+ fallback_class = klass\n+ if fallback_type is not None:\n+ if fallback_class is None:\n+ # this is misconfiguration in PyGithub code, not a user's fault\n+ raise ValueError(\n+ f\"Fallback type {fallback_type} is not among classes and names: {[name for klass, name in class_and_names]}\"\n+ )\n+ return self._makeClassAttribute(fallback_class, value)\n return _BadAttribute(value, type) # type: ignore\n \n def _makeUnionClassAttributeFromTypeKey(\n@@ -388,7 +398,9 @@ def _makeUnionClassAttributeFromTypeKey(\n ) -> Attribute[T_gh]:\n if value is None or not isinstance(value, dict):\n return _ValuedAttribute(None) # type: ignore\n- return self._makeUnionClassAttributeFromTypeName(value.get(type_key, default_type), value, *class_and_names)\n+ return self._makeUnionClassAttributeFromTypeName(\n+ value.get(type_key, default_type), default_type, value, *class_and_names\n+ )\n \n def _makeUnionClassAttributeFromTypeKeyAndValueKey(\n self,\n@@ -401,7 +413,7 @@ def _makeUnionClassAttributeFromTypeKeyAndValueKey(\n if value is None or not isinstance(value, dict):\n return _ValuedAttribute(None) # type: ignore\n return self._makeUnionClassAttributeFromTypeName(\n- value.get(type_key, default_type), value.get(value_key), *class_and_names\n+ value.get(type_key, default_type), default_type, value.get(value_key), *class_and_names\n )\n \n @staticmethod"},{"sha":"173f14bad62d8eafa2ee04287e8ef278c9106d4a","filename":"tests/GithubObject.py","status":"modified","additions":103,"deletions":0,"changes":103,"blob_url":"https://github.com/PyGithub/PyGithub/blob/f5f9756a1dd52a53820cc54927abb34725377987/tests%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/f5f9756a1dd52a53820cc54927abb34725377987/tests%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubObject.py?ref=f5f9756a1dd52a53820cc54927abb34725377987","patch":"@@ -24,15 +24,21 @@\n # #\n ################################################################################\n \n+from __future__ import annotations\n+\n import unittest\n from datetime import datetime, timedelta, timezone\n+from typing import Any\n+from unittest import mock\n \n import github.Repository\n import github.RepositoryDiscussion\n \n from . import Framework\n \n gho = Framework.github.GithubObject\n+ghusr = Framework.github.NamedUser\n+ghorg = Framework.github.Organization\n \n \n class GithubObject(unittest.TestCase):\n@@ -52,6 +58,95 @@ def testApiType(self):\n self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_rest(), False)\n self.assertEqual(github.RepositoryDiscussion.RepositoryDiscussion.is_graphql(), True)\n \n+ def testMakeUnionClassAttributeFromTypeName(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ data = {\"login\": \"login\"}\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(type_name: str | None, fallback_type: str | None = \"User\"):\n+ return obj._makeUnionClassAttributeFromTypeName(type_name, fallback_type, data, *class_and_names)\n+\n+ none = make(None)\n+ usr = make(\"User\")\n+ org = make(\"Organization\")\n+ unknown = make(\"Unknown\")\n+ bad = make(\"Unknown\", None)\n+\n+ self.assertIsInstance(none, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+ self.assertIsInstance(bad, gho._BadAttribute)\n+\n+ self.assertIsNone(none.value)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n+ def testMakeUnionClassAttributeFromTypeKey(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(data: dict[str, Any]):\n+ return obj._makeUnionClassAttributeFromTypeKey(\"type\", \"User\", data, *class_and_names)\n+\n+ default = make({\"login\": \"login\"})\n+ usr = make({\"login\": \"login\", \"type\": \"User\"})\n+ org = make({\"login\": \"login\", \"type\": \"Organization\"})\n+ unknown = make({\"login\": \"login\", \"type\": \"Unknown\"})\n+\n+ self.assertIsInstance(default, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+\n+ self.assertIsInstance(default.value, ghusr.NamedUser)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(default.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n+ def testMakeUnionClassAttributeFromTypeKeyAndValueKey(self):\n+ req = mock.Mock(is_not_lazy=False)\n+ obj = TestingClass(req, {}, {})\n+\n+ class_and_names = [(ghusr.NamedUser, \"User\"), (ghorg.Organization, \"Organization\")]\n+\n+ def make(data: dict[str, Any]):\n+ return obj._makeUnionClassAttributeFromTypeKeyAndValueKey(\"type\", \"data\", \"User\", data, *class_and_names)\n+\n+ default = make({\"data\": {\"login\": \"login\"}})\n+ usr = make({\"data\": {\"login\": \"login\"}, \"type\": \"User\"})\n+ org = make({\"data\": {\"login\": \"login\"}, \"type\": \"Organization\"})\n+ unknown = make({\"data\": {\"login\": \"login\"}, \"type\": \"Unknown\"})\n+\n+ self.assertIsInstance(default, gho._ValuedAttribute)\n+ self.assertIsInstance(usr, gho._ValuedAttribute)\n+ self.assertIsInstance(org, gho._ValuedAttribute)\n+ self.assertIsInstance(unknown, gho._ValuedAttribute)\n+\n+ self.assertIsInstance(default.value, ghusr.NamedUser)\n+ self.assertIsInstance(usr.value, ghusr.NamedUser)\n+ self.assertIsInstance(org.value, ghorg.Organization)\n+ self.assertIsInstance(unknown.value, ghusr.NamedUser)\n+\n+ self.assertEqual(str(default.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(usr.value), 'NamedUser(login=\"login\")')\n+ self.assertEqual(str(org.value), 'Organization(login=\"login\")')\n+ self.assertEqual(str(unknown.value), 'NamedUser(login=\"login\")')\n+\n def testMakeDatetimeAttribute(self):\n for value, expected in [\n (None, None),\n@@ -145,3 +240,11 @@ def testMakeTimetsampAttributeBadValues(self):\n self.assertEqual(value, e.exception.actual_value)\n self.assertEqual(int, e.exception.expected_type)\n self.assertIsNone(e.exception.transformation_exception)\n+\n+\n+class TestingClass(gho.NonCompletableGithubObject):\n+ def _initAttributes(self) -> None:\n+ pass\n+\n+ def _useAttributes(self, attributes: Any) -> None:\n+ pass"}]} diff --git a/tests/ReplayData/PullRequest.testCreateComment.txt b/tests/ReplayData/PullRequest.testCreateComment.txt index ef6897231d..9fca31fdda 100644 --- a/tests/ReplayData/PullRequest.testCreateComment.txt +++ b/tests/ReplayData/PullRequest.testCreateComment.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206 +/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PullRequest.testCreateMultilineReviewComment.txt b/tests/ReplayData/PullRequest.testCreateMultilineReviewComment.txt index 473f321967..04d97825d4 100644 --- a/tests/ReplayData/PullRequest.testCreateMultilineReviewComment.txt +++ b/tests/ReplayData/PullRequest.testCreateMultilineReviewComment.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206 +/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentAsSuggestion.txt b/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentAsSuggestion.txt index b8afffb99f..8b2903d5c8 100644 --- a/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentAsSuggestion.txt +++ b/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentAsSuggestion.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206 +/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentChoosingSide.txt b/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentChoosingSide.txt index 71e3ef3fde..7d989cacc5 100644 --- a/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentChoosingSide.txt +++ b/tests/ReplayData/PullRequest.testCreateMultilineReviewCommentChoosingSide.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206 +/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PullRequest.testCreateReviewCommentInReplyTo.txt b/tests/ReplayData/PullRequest.testCreateReviewCommentInReplyTo.txt index 413913a627..86b5abd25e 100644 --- a/tests/ReplayData/PullRequest.testCreateReviewCommentInReplyTo.txt +++ b/tests/ReplayData/PullRequest.testCreateReviewCommentInReplyTo.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206 +/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PullRequest.testCreateReviewCommentSubjectType.txt b/tests/ReplayData/PullRequest.testCreateReviewCommentSubjectType.txt index 588b85bd9f..daa48620a6 100644 --- a/tests/ReplayData/PullRequest.testCreateReviewCommentSubjectType.txt +++ b/tests/ReplayData/PullRequest.testCreateReviewCommentSubjectType.txt @@ -2,7 +2,7 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206 +/repos/PyGithub/PyGithub/commits/8a4f306d4b223682dd19410d4a9150636ebe4206?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 diff --git a/tests/ReplayData/PullRequestReview.setUp.txt b/tests/ReplayData/PullRequestReview.setUp.txt index 1a48c4a7f4..98e08c3f68 100644 --- a/tests/ReplayData/PullRequestReview.setUp.txt +++ b/tests/ReplayData/PullRequestReview.setUp.txt @@ -1,25 +1,3 @@ -https -GET -api.github.com -None -/repos/PyGithub/PyGithub/pulls/538 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('content-length', '16870'), ('x-runtime-rack', '0.166874'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-oauth-scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"180a414bcab1173c542017fc5a03d2d6"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('status', '200 OK'), ('x-ratelimit-remaining', '4551'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'DDDA:9B6E:FB5A9F:127A623:5AB118CF'), ('last-modified', 'Tue, 20 Mar 2018 14:15:45 GMT'), ('date', 'Tue, 20 Mar 2018 14:21:04 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1521556163')] -{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","id":111649703,"html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","number":538,"state":"closed","locked":false,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n","created_at":"2017-03-20T21:00:37Z","updated_at":"2018-03-20T14:15:45Z","closed_at":"2017-03-25T16:52:49Z","merged_at":"2017-03-25T16:52:49Z","merge_commit_sha":"2525515b094d7425f7018eb5b66171e21c5fbc10","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jayfk","id":2930472,"avatar_url":"https://avatars2.githubusercontent.com/u/2930472?v=4","gravatar_id":"","url":"https://api.github.com/users/jayfk","html_url":"https://github.com/jayfk","followers_url":"https://api.github.com/users/jayfk/followers","following_url":"https://api.github.com/users/jayfk/following{/other_user}","gists_url":"https://api.github.com/users/jayfk/gists{/gist_id}","starred_url":"https://api.github.com/users/jayfk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayfk/subscriptions","organizations_url":"https://api.github.com/users/jayfk/orgs","repos_url":"https://api.github.com/users/jayfk/repos","events_url":"https://api.github.com/users/jayfk/events{/privacy}","received_events_url":"https://api.github.com/users/jayfk/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/b6b127d732586df5dcf0444df73621f240ca4bb2","head":{"label":"allevin:Add_Pull_Request_Reviews_Feature","ref":"Add_Pull_Request_Reviews_Feature","sha":"b6b127d732586df5dcf0444df73621f240ca4bb2","user":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"repo":{"id":85619926,"name":"PyGithub","full_name":"allevin/PyGithub","owner":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/allevin/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/allevin/PyGithub","forks_url":"https://api.github.com/repos/allevin/PyGithub/forks","keys_url":"https://api.github.com/repos/allevin/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/allevin/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/allevin/PyGithub/teams","hooks_url":"https://api.github.com/repos/allevin/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/allevin/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/allevin/PyGithub/events","assignees_url":"https://api.github.com/repos/allevin/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/allevin/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/allevin/PyGithub/tags","blobs_url":"https://api.github.com/repos/allevin/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/allevin/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/allevin/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/allevin/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/allevin/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/allevin/PyGithub/languages","stargazers_url":"https://api.github.com/repos/allevin/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/allevin/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/allevin/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/allevin/PyGithub/subscription","commits_url":"https://api.github.com/repos/allevin/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/allevin/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/allevin/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/allevin/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/allevin/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/allevin/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/allevin/PyGithub/merges","archive_url":"https://api.github.com/repos/allevin/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/allevin/PyGithub/downloads","issues_url":"https://api.github.com/repos/allevin/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/allevin/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/allevin/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/allevin/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/allevin/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/allevin/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/allevin/PyGithub/deployments","created_at":"2017-03-20T19:55:57Z","updated_at":"2017-03-20T19:56:01Z","pushed_at":"2017-03-24T20:45:25Z","git_url":"git://github.com/allevin/PyGithub.git","ssh_url":"git@github.com:allevin/PyGithub.git","clone_url":"https://github.com/allevin/PyGithub.git","svn_url":"https://github.com/allevin/PyGithub","homepage":"","size":12144,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"PyGithub:master","ref":"master","sha":"414f6e648f4da87f10bae7d01948a63dc82b80f8","user":{"login":"PyGithub","id":11288996,"avatar_url":"https://avatars0.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"repo":{"id":3544490,"name":"PyGithub","full_name":"PyGithub/PyGithub","owner":{"login":"PyGithub","id":11288996,"avatar_url":"https://avatars0.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"private":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":"2018-03-20T12:27:47Z","pushed_at":"2018-03-20T12:27:44Z","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":"http://pygithub.readthedocs.io/","size":10905,"stargazers_count":1719,"watchers_count":1719,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":590,"mirror_url":null,"archived":false,"open_issues_count":188,"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"},"forks":590,"open_issues":188,"watchers":1719,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/538"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/538"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/b6b127d732586df5dcf0444df73621f240ca4bb2"}},"author_association":"CONTRIBUTOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"jzelinskie","id":343539,"avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"comments":6,"review_comments":0,"maintainer_can_modify":false,"commits":4,"additions":372,"deletions":0,"changed_files":8} - -https -GET -api.github.com -None -/repos/PyGithub/PyGithub/commits/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('content-length', '15949'), ('x-runtime-rack', '0.069736'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-oauth-scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"061259c90f2c55f8497d7de36f6a1ba9"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('status', '200 OK'), ('x-ratelimit-remaining', '4549'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'DDDB:9B6E:FB5B95:127A740:5AB118D1'), ('last-modified', 'Mon, 20 Mar 2017 20:44:26 GMT'), ('date', 'Tue, 20 Mar 2018 14:21:05 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1521556163')] -{"sha":"2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","commit":{"author":{"name":"Aaron Levine","email":"allevin@sandia.gov","date":"2017-03-20T20:44:26Z"},"committer":{"name":"Aaron Levine","email":"allevin@sandia.gov","date":"2017-03-20T20:44:26Z"},"message":"Add Support for Pull Request Reviews feature","tree":{"sha":"d6bdfe97f73bc45f7a9bc3606f62a6f7122669c9","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/d6bdfe97f73bc45f7a9bc3606f62a6f7122669c9"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","html_url":"https://github.com/PyGithub/PyGithub/commit/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/comments","author":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"committer":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"parents":[{"sha":"414f6e648f4da87f10bae7d01948a63dc82b80f8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/414f6e648f4da87f10bae7d01948a63dc82b80f8","html_url":"https://github.com/PyGithub/PyGithub/commit/414f6e648f4da87f10bae7d01948a63dc82b80f8"}],"stats":{"total":231,"additions":231,"deletions":0},"files":[{"sha":"e051573885e484959370e8ac8a122a568d0c4439","filename":"github/PullRequest.py","status":"modified","additions":42,"deletions":0,"changes":42,"blob_url":"https://github.com/PyGithub/PyGithub/blob/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/github/PullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/github/PullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github/PullRequest.py?ref=2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","patch":"@@ -37,6 +37,8 @@\n import github.File\n import github.IssueComment\n import github.Commit\n+import github.PullRequestReview\n+import github.PullRequestReviewerRequests\n \n \n class PullRequest(github.GithubObject.CompletableGithubObject):\n@@ -495,6 +497,46 @@ def get_issue_comments(self):\n None\n )\n \n+ def get_review(self, id):\n+ \"\"\"\n+ :calls: `GET /repos/:owner/:repo/pulls/:number/reviews/:id `_\n+ :param id: integer\n+ :rtype: :class:`github.PullRequestReview.PullRequestReview`\n+ \"\"\"\n+ assert isinstance(id, (int, long)), id\n+ headers, data = self._requester.requestJsonAndCheck(\n+ \"GET\",\n+ self.url + \"/reviews/\" + str(id),\n+ headers={'Accept': 'application/vnd.github.black-cat-preview+json'}\n+ )\n+ return github.PullRequestReview.PullRequestReview(self._requester, headers, data, completed=True)\n+\n+ def get_reviews(self):\n+ \"\"\"\n+ :calls: `GET /repos/:owner/:repo/pulls/:number/reviews `_\n+ :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.PullRequestReview.PullRequestReview`\n+ \"\"\"\n+ return github.PaginatedList.PaginatedList(\n+ github.PullRequestReview.PullRequestReview,\n+ self._requester,\n+ self.url + \"/reviews\",\n+ None,\n+ headers={'Accept': 'application/vnd.github.black-cat-preview+json'}\n+ )\n+\n+ def get_review_requests(self):\n+ \"\"\"\n+ :calls: `GET /repos/:owner/:repo/pulls/:number/requested_reviewers `_\n+ :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.InspectionReviewers.InspectionReviewers`\n+ \"\"\"\n+ return github.PaginatedList.PaginatedList(\n+ github.PullRequestReviewerRequests.PullRequestReviewerRequests,\n+ self._requester,\n+ self.url + \"/requested_reviewers\",\n+ None,\n+ headers={'Accept': 'application/vnd.github.black-cat-preview+json'}\n+ )\n+ \n def is_merged(self):\n \"\"\"\n :calls: `GET /repos/:owner/:repo/pulls/:number/merge `_"},{"sha":"1c2189ee830731e17e596d8d6702972e6226e207","filename":"github/PullRequestReview.py","status":"added","additions":121,"deletions":0,"changes":121,"blob_url":"https://github.com/PyGithub/PyGithub/blob/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/github/PullRequestReview.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/github/PullRequestReview.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github/PullRequestReview.py?ref=2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","patch":"@@ -0,0 +1,121 @@\n+# -*- coding: utf-8 -*-\n+\n+# ########################## Copyrights and license ############################\n+# #\n+# Copyright 2012 Vincent Jacques #\n+# Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n+# Copyright 2013 Michael Stead #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. #\n+# http://pygithub.github.io/PyGithub/v1/index.html #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+# ##############################################################################\n+\n+import github.GithubObject\n+\n+import github.NamedUser\n+\n+\n+class PullRequestReview(github.GithubObject.CompletableGithubObject):\n+ \"\"\"\n+ This class represents Pull Request Reviews as returned for example by https://developer.github.com/v3/pulls/reviews/\n+ \"\"\"\n+\n+ def __repr__(self):\n+ return self.get__repr__({\"id\": self._id.value, \"user\": self._user.value})\n+\n+ @property\n+ def id(self):\n+ \"\"\"\n+ :type: integer\n+ \"\"\"\n+ self._completeIfNotSet(self._id)\n+ return self._id.value\n+\n+ @property\n+ def user(self):\n+ \"\"\"\n+ :type: :class:`github.NamedUser.NamedUser`\n+ \"\"\"\n+ self._completeIfNotSet(self._user)\n+ return self._user.value\n+\n+ @property\n+ def body(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ self._completeIfNotSet(self._body)\n+ return self._body.value\n+\n+ @property\n+ def commit_id(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ self._completeIfNotSet(self._commit_id)\n+ return self._commit_id.value\n+\n+ @property\n+ def state(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ self._completeIfNotSet(self._state)\n+ return self._state.value\n+\n+ @property\n+ def html_url(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ self._completeIfNotSet(self._html_url)\n+ return self._html_url.value\n+\n+ @property\n+ def pull_request_url(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ self._completeIfNotSet(self._pull_request_url)\n+ return self._pull_request_url.value\n+\n+ def _initAttributes(self):\n+ self._id = github.GithubObject.NotSet\n+ self._user = github.GithubObject.NotSet\n+ self._body = github.GithubObject.NotSet\n+ self._commit_id = github.GithubObject.NotSet\n+ self._state = github.GithubObject.NotSet\n+ self._html_url = github.GithubObject.NotSet\n+ self._pull_request_url = github.GithubObject.NotSet\n+\n+ def _useAttributes(self, attributes):\n+ if \"id\" in attributes: # pragma no branch\n+ self._id = self._makeIntAttribute(attributes[\"id\"])\n+ if \"user\" in attributes: # pragma no branch\n+ self._user = self._makeClassAttribute(github.NamedUser.NamedUser, attributes[\"user\"])\n+ if \"body\" in attributes: # pragma no branch\n+ self._body = self._makeStringAttribute(attributes[\"body\"])\n+ if \"commit_id\" in attributes: # pragma no branch\n+ self._commit_id = self._makeStringAttribute(attributes[\"commit_id\"])\n+ if \"state\" in attributes: # pragma no branch\n+ self._state = self._makeStringAttribute(attributes[\"state\"])\n+ if \"html_url\" in attributes: # pragma no branch\n+ self._html_url = self._makeStringAttribute(attributes[\"html_url\"])\n+ if \"pull_request_url\" in attributes: # pragma no branch\n+ self._pull_request_url = self._makeStringAttribute(attributes[\"pull_request_url\"])"},{"sha":"8daf5753a10c9703b174d964e39863cf518ed5f4","filename":"github/PullRequestReviewerRequests.py","status":"added","additions":68,"deletions":0,"changes":68,"blob_url":"https://github.com/PyGithub/PyGithub/blob/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/github/PullRequestReviewerRequests.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52/github/PullRequestReviewerRequests.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github/PullRequestReviewerRequests.py?ref=2f0e4e55fe87e38d26efc9aa1346f56abfbd6c52","patch":"@@ -0,0 +1,68 @@\n+# -*- coding: utf-8 -*-\n+\n+# ########################## Copyrights and license ############################\n+# #\n+# Copyright 2012 Vincent Jacques #\n+# Copyright 2012 Zearin #\n+# Copyright 2013 AKFish #\n+# Copyright 2013 Michael Stead #\n+# Copyright 2013 Vincent Jacques #\n+# #\n+# This file is part of PyGithub. #\n+# http://pygithub.github.io/PyGithub/v1/index.html #\n+# #\n+# PyGithub is free software: you can redistribute it and/or modify it under #\n+# the terms of the GNU Lesser General Public License as published by the Free #\n+# Software Foundation, either version 3 of the License, or (at your option) #\n+# any later version. #\n+# #\n+# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #\n+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #\n+# details. #\n+# #\n+# You should have received a copy of the GNU Lesser General Public License #\n+# along with PyGithub. If not, see . #\n+# #\n+# ##############################################################################\n+\n+import github.GithubObject\n+\n+import github.NamedUser\n+\n+\n+class PullRequestReviewerRequests(github.GithubObject.CompletableGithubObject):\n+ \"\"\"\n+ This class represents Pull Request Reviewer Requests as returned for example by https://developer.github.com/v3/pulls/review_requests/\n+ \"\"\"\n+\n+ def __repr__(self):\n+ return self.get__repr__({\"id\": self._id.value, \"login\": self._login.value})\n+\n+ @property\n+ def login(self):\n+ \"\"\"\n+ :type: string\n+ \"\"\"\n+ self._completeIfNotSet(self._login)\n+ return self._login.value\n+\n+ @property\n+ def id(self):\n+ \"\"\"\n+ :type: integer\n+ \"\"\"\n+ self._completeIfNotSet(self._id)\n+ return self._id.value\n+\n+ def _initAttributes(self):\n+ self._login = github.GithubObject.NotSet\n+ self._id = github.GithubObject.NotSet\n+# self._url = github.GithubObject.NotSet\n+# self._html_url = github.GithubObject.NotSet\n+\n+ def _useAttributes(self, attributes):\n+ if \"login\" in attributes: # pragma no branch\n+ self._login = self._makeStringAttribute(attributes[\"login\"])\n+ if \"id\" in attributes: # pragma no branch\n+ self._id = self._makeIntAttribute(attributes[\"id\"])"}]} - https POST api.github.com diff --git a/tests/ReplayData/PullRequestReview.testDoesNotModifyPullRequest.txt b/tests/ReplayData/PullRequestReview.testDoesNotModifyPullRequest.txt new file mode 100644 index 0000000000..261cf39f6e --- /dev/null +++ b/tests/ReplayData/PullRequestReview.testDoesNotModifyPullRequest.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/pulls/538 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('content-length', '16870'), ('x-runtime-rack', '0.166874'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-oauth-scopes', 'admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('x-accepted-oauth-scopes', ''), ('etag', '"180a414bcab1173c542017fc5a03d2d6"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('referrer-policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('status', '200 OK'), ('x-ratelimit-remaining', '4551'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', 'DDDA:9B6E:FB5A9F:127A623:5AB118CF'), ('last-modified', 'Tue, 20 Mar 2018 14:15:45 GMT'), ('date', 'Tue, 20 Mar 2018 14:21:04 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1521556163')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538","id":111649703,"html_url":"https://github.com/PyGithub/PyGithub/pull/538","diff_url":"https://github.com/PyGithub/PyGithub/pull/538.diff","patch_url":"https://github.com/PyGithub/PyGithub/pull/538.patch","issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538","number":538,"state":"closed","locked":false,"title":"Add Support for Pull Request Reviews feature","user":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"body":"Adding support to Pull Request class to access new Github API features [Pull Request reviews](https://developer.github.com/v3/pulls/reviews/) and [Pull Request Reviewer Requests](https://developer.github.com/v3/pulls/review_requests/)\r\n\r\nThe API's is still in beta. \r\n\r\nI approached this by providing a minimal set of routines to access the list of reviews or a specific review. Also access to get a list of Reviewer requests. \r\n\r\nBecause the API is still early in Beta, I choose not to implement the create/delete/edit features, but the infrastructure should be in place for future improvements.\r\n\r\n","created_at":"2017-03-20T21:00:37Z","updated_at":"2018-03-20T14:15:45Z","closed_at":"2017-03-25T16:52:49Z","merged_at":"2017-03-25T16:52:49Z","merge_commit_sha":"2525515b094d7425f7018eb5b66171e21c5fbc10","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jayfk","id":2930472,"avatar_url":"https://avatars2.githubusercontent.com/u/2930472?v=4","gravatar_id":"","url":"https://api.github.com/users/jayfk","html_url":"https://github.com/jayfk","followers_url":"https://api.github.com/users/jayfk/followers","following_url":"https://api.github.com/users/jayfk/following{/other_user}","gists_url":"https://api.github.com/users/jayfk/gists{/gist_id}","starred_url":"https://api.github.com/users/jayfk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayfk/subscriptions","organizations_url":"https://api.github.com/users/jayfk/orgs","repos_url":"https://api.github.com/users/jayfk/repos","events_url":"https://api.github.com/users/jayfk/events{/privacy}","received_events_url":"https://api.github.com/users/jayfk/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/commits","review_comments_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/comments","review_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/b6b127d732586df5dcf0444df73621f240ca4bb2","head":{"label":"allevin:Add_Pull_Request_Reviews_Feature","ref":"Add_Pull_Request_Reviews_Feature","sha":"b6b127d732586df5dcf0444df73621f240ca4bb2","user":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"repo":{"id":85619926,"name":"PyGithub","full_name":"allevin/PyGithub","owner":{"login":"allevin","id":13543471,"avatar_url":"https://avatars2.githubusercontent.com/u/13543471?v=4","gravatar_id":"","url":"https://api.github.com/users/allevin","html_url":"https://github.com/allevin","followers_url":"https://api.github.com/users/allevin/followers","following_url":"https://api.github.com/users/allevin/following{/other_user}","gists_url":"https://api.github.com/users/allevin/gists{/gist_id}","starred_url":"https://api.github.com/users/allevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allevin/subscriptions","organizations_url":"https://api.github.com/users/allevin/orgs","repos_url":"https://api.github.com/users/allevin/repos","events_url":"https://api.github.com/users/allevin/events{/privacy}","received_events_url":"https://api.github.com/users/allevin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/allevin/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/allevin/PyGithub","forks_url":"https://api.github.com/repos/allevin/PyGithub/forks","keys_url":"https://api.github.com/repos/allevin/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/allevin/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/allevin/PyGithub/teams","hooks_url":"https://api.github.com/repos/allevin/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/allevin/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/allevin/PyGithub/events","assignees_url":"https://api.github.com/repos/allevin/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/allevin/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/allevin/PyGithub/tags","blobs_url":"https://api.github.com/repos/allevin/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/allevin/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/allevin/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/allevin/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/allevin/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/allevin/PyGithub/languages","stargazers_url":"https://api.github.com/repos/allevin/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/allevin/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/allevin/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/allevin/PyGithub/subscription","commits_url":"https://api.github.com/repos/allevin/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/allevin/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/allevin/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/allevin/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/allevin/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/allevin/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/allevin/PyGithub/merges","archive_url":"https://api.github.com/repos/allevin/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/allevin/PyGithub/downloads","issues_url":"https://api.github.com/repos/allevin/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/allevin/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/allevin/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/allevin/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/allevin/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/allevin/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/allevin/PyGithub/deployments","created_at":"2017-03-20T19:55:57Z","updated_at":"2017-03-20T19:56:01Z","pushed_at":"2017-03-24T20:45:25Z","git_url":"git://github.com/allevin/PyGithub.git","ssh_url":"git@github.com:allevin/PyGithub.git","clone_url":"https://github.com/allevin/PyGithub.git","svn_url":"https://github.com/allevin/PyGithub","homepage":"","size":12144,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"PyGithub:master","ref":"master","sha":"414f6e648f4da87f10bae7d01948a63dc82b80f8","user":{"login":"PyGithub","id":11288996,"avatar_url":"https://avatars0.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"repo":{"id":3544490,"name":"PyGithub","full_name":"PyGithub/PyGithub","owner":{"login":"PyGithub","id":11288996,"avatar_url":"https://avatars0.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","site_admin":false},"private":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":"2018-03-20T12:27:47Z","pushed_at":"2018-03-20T12:27:44Z","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":"http://pygithub.readthedocs.io/","size":10905,"stargazers_count":1719,"watchers_count":1719,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":590,"mirror_url":null,"archived":false,"open_issues_count":188,"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"},"forks":590,"open_issues":188,"watchers":1719,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538"},"html":{"href":"https://github.com/PyGithub/PyGithub/pull/538"},"issue":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/538"},"comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/issues/538/comments"},"review_comments":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/comments"},"review_comment":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PyGithub/PyGithub/pulls/538/commits"},"statuses":{"href":"https://api.github.com/repos/PyGithub/PyGithub/statuses/b6b127d732586df5dcf0444df73621f240ca4bb2"}},"author_association":"CONTRIBUTOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"jzelinskie","id":343539,"avatar_url":"https://avatars3.githubusercontent.com/u/343539?v=4","gravatar_id":"","url":"https://api.github.com/users/jzelinskie","html_url":"https://github.com/jzelinskie","followers_url":"https://api.github.com/users/jzelinskie/followers","following_url":"https://api.github.com/users/jzelinskie/following{/other_user}","gists_url":"https://api.github.com/users/jzelinskie/gists{/gist_id}","starred_url":"https://api.github.com/users/jzelinskie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzelinskie/subscriptions","organizations_url":"https://api.github.com/users/jzelinskie/orgs","repos_url":"https://api.github.com/users/jzelinskie/repos","events_url":"https://api.github.com/users/jzelinskie/events{/privacy}","received_events_url":"https://api.github.com/users/jzelinskie/received_events","type":"User","site_admin":false},"comments":6,"review_comments":0,"maintainer_can_modify":false,"commits":4,"additions":372,"deletions":0,"changed_files":8} diff --git a/tests/ReplayData/PullRequestReview1856.setUp.txt b/tests/ReplayData/PullRequestReview1856.setUp.txt deleted file mode 100644 index 8999fab985..0000000000 --- a/tests/ReplayData/PullRequestReview1856.setUp.txt +++ /dev/null @@ -1,21 +0,0 @@ -https -GET -api.github.com -None -/repos/CS481-Team-Pumpkin/PyGithub/pulls/4 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 08 Apr 2021 14:27:12 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/"8639f2457cf97f5885ced460b20f8f7d17d5c09930e448de42e75b78426cd8e8"'), ('Last-Modified', 'Thu, 08 Apr 2021 14:23:05 GMT'), ('X-OAuth-Scopes', 'admin:org, repo'), ('X-Accepted-OAuth-Scopes', ''), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1617895279'), ('X-RateLimit-Used', '7'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'EB48:109EA:37F217:38E505:606F12C0')] -{"url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4","id":611598215,"node_id":"MDExOlB1bGxSZXF1ZXN0NjExNTk4MjE1","html_url":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4","diff_url":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4.diff","patch_url":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4.patch","issue_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/4","number":4,"state":"open","locked":false,"title":"Test commit","user":{"login":"bagashvilit","id":46755932,"node_id":"MDQ6VXNlcjQ2NzU1OTMy","avatar_url":"https://avatars.githubusercontent.com/u/46755932?v=4","gravatar_id":"","url":"https://api.github.com/users/bagashvilit","html_url":"https://github.com/bagashvilit","followers_url":"https://api.github.com/users/bagashvilit/followers","following_url":"https://api.github.com/users/bagashvilit/following{/other_user}","gists_url":"https://api.github.com/users/bagashvilit/gists{/gist_id}","starred_url":"https://api.github.com/users/bagashvilit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bagashvilit/subscriptions","organizations_url":"https://api.github.com/users/bagashvilit/orgs","repos_url":"https://api.github.com/users/bagashvilit/repos","events_url":"https://api.github.com/users/bagashvilit/events{/privacy}","received_events_url":"https://api.github.com/users/bagashvilit/received_events","type":"User","site_admin":false},"body":"","created_at":"2021-04-08T14:16:39Z","updated_at":"2021-04-08T14:23:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"07c3d56fa500c0f03a403136ba62cbbec6f148b0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4/commits","review_comments_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4/comments","review_comment_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/comments{/number}","comments_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/4/comments","statuses_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/statuses/a99c92b2ba68464a1a05d7fa8ef55e3a98803e5f","head":{"label":"CS481-Team-Pumpkin:test_delete_pending_review","ref":"test_delete_pending_review","sha":"a99c92b2ba68464a1a05d7fa8ef55e3a98803e5f","user":{"login":"CS481-Team-Pumpkin","id":80543978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjgwNTQzOTc4","avatar_url":"https://avatars.githubusercontent.com/u/80543978?v=4","gravatar_id":"","url":"https://api.github.com/users/CS481-Team-Pumpkin","html_url":"https://github.com/CS481-Team-Pumpkin","followers_url":"https://api.github.com/users/CS481-Team-Pumpkin/followers","following_url":"https://api.github.com/users/CS481-Team-Pumpkin/following{/other_user}","gists_url":"https://api.github.com/users/CS481-Team-Pumpkin/gists{/gist_id}","starred_url":"https://api.github.com/users/CS481-Team-Pumpkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CS481-Team-Pumpkin/subscriptions","organizations_url":"https://api.github.com/users/CS481-Team-Pumpkin/orgs","repos_url":"https://api.github.com/users/CS481-Team-Pumpkin/repos","events_url":"https://api.github.com/users/CS481-Team-Pumpkin/events{/privacy}","received_events_url":"https://api.github.com/users/CS481-Team-Pumpkin/received_events","type":"Organization","site_admin":false},"repo":{"id":347169081,"node_id":"MDEwOlJlcG9zaXRvcnkzNDcxNjkwODE=","name":"PyGithub","full_name":"CS481-Team-Pumpkin/PyGithub","private":false,"owner":{"login":"CS481-Team-Pumpkin","id":80543978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjgwNTQzOTc4","avatar_url":"https://avatars.githubusercontent.com/u/80543978?v=4","gravatar_id":"","url":"https://api.github.com/users/CS481-Team-Pumpkin","html_url":"https://github.com/CS481-Team-Pumpkin","followers_url":"https://api.github.com/users/CS481-Team-Pumpkin/followers","following_url":"https://api.github.com/users/CS481-Team-Pumpkin/following{/other_user}","gists_url":"https://api.github.com/users/CS481-Team-Pumpkin/gists{/gist_id}","starred_url":"https://api.github.com/users/CS481-Team-Pumpkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CS481-Team-Pumpkin/subscriptions","organizations_url":"https://api.github.com/users/CS481-Team-Pumpkin/orgs","repos_url":"https://api.github.com/users/CS481-Team-Pumpkin/repos","events_url":"https://api.github.com/users/CS481-Team-Pumpkin/events{/privacy}","received_events_url":"https://api.github.com/users/CS481-Team-Pumpkin/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/CS481-Team-Pumpkin/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub","forks_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/forks","keys_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/teams","hooks_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/events","assignees_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/tags","blobs_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/languages","stargazers_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/subscription","commits_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/merges","archive_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/downloads","issues_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/deployments","created_at":"2021-03-12T18:58:51Z","updated_at":"2021-04-02T17:52:24Z","pushed_at":"2021-04-08T14:16:39Z","git_url":"git://github.com/CS481-Team-Pumpkin/PyGithub.git","ssh_url":"git@github.com:CS481-Team-Pumpkin/PyGithub.git","clone_url":"https://github.com/CS481-Team-Pumpkin/PyGithub.git","svn_url":"https://github.com/CS481-Team-Pumpkin/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13338,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":3,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"CS481-Team-Pumpkin:master","ref":"master","sha":"7f0a239bc797a071e512b763dfd3e4339191dc18","user":{"login":"CS481-Team-Pumpkin","id":80543978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjgwNTQzOTc4","avatar_url":"https://avatars.githubusercontent.com/u/80543978?v=4","gravatar_id":"","url":"https://api.github.com/users/CS481-Team-Pumpkin","html_url":"https://github.com/CS481-Team-Pumpkin","followers_url":"https://api.github.com/users/CS481-Team-Pumpkin/followers","following_url":"https://api.github.com/users/CS481-Team-Pumpkin/following{/other_user}","gists_url":"https://api.github.com/users/CS481-Team-Pumpkin/gists{/gist_id}","starred_url":"https://api.github.com/users/CS481-Team-Pumpkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CS481-Team-Pumpkin/subscriptions","organizations_url":"https://api.github.com/users/CS481-Team-Pumpkin/orgs","repos_url":"https://api.github.com/users/CS481-Team-Pumpkin/repos","events_url":"https://api.github.com/users/CS481-Team-Pumpkin/events{/privacy}","received_events_url":"https://api.github.com/users/CS481-Team-Pumpkin/received_events","type":"Organization","site_admin":false},"repo":{"id":347169081,"node_id":"MDEwOlJlcG9zaXRvcnkzNDcxNjkwODE=","name":"PyGithub","full_name":"CS481-Team-Pumpkin/PyGithub","private":false,"owner":{"login":"CS481-Team-Pumpkin","id":80543978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjgwNTQzOTc4","avatar_url":"https://avatars.githubusercontent.com/u/80543978?v=4","gravatar_id":"","url":"https://api.github.com/users/CS481-Team-Pumpkin","html_url":"https://github.com/CS481-Team-Pumpkin","followers_url":"https://api.github.com/users/CS481-Team-Pumpkin/followers","following_url":"https://api.github.com/users/CS481-Team-Pumpkin/following{/other_user}","gists_url":"https://api.github.com/users/CS481-Team-Pumpkin/gists{/gist_id}","starred_url":"https://api.github.com/users/CS481-Team-Pumpkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CS481-Team-Pumpkin/subscriptions","organizations_url":"https://api.github.com/users/CS481-Team-Pumpkin/orgs","repos_url":"https://api.github.com/users/CS481-Team-Pumpkin/repos","events_url":"https://api.github.com/users/CS481-Team-Pumpkin/events{/privacy}","received_events_url":"https://api.github.com/users/CS481-Team-Pumpkin/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/CS481-Team-Pumpkin/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub","forks_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/forks","keys_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/teams","hooks_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/events","assignees_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/tags","blobs_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/languages","stargazers_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/subscription","commits_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/merges","archive_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/downloads","issues_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/deployments","created_at":"2021-03-12T18:58:51Z","updated_at":"2021-04-02T17:52:24Z","pushed_at":"2021-04-08T14:16:39Z","git_url":"git://github.com/CS481-Team-Pumpkin/PyGithub.git","ssh_url":"git@github.com:CS481-Team-Pumpkin/PyGithub.git","clone_url":"https://github.com/CS481-Team-Pumpkin/PyGithub.git","svn_url":"https://github.com/CS481-Team-Pumpkin/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":13338,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":3,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4"},"html":{"href":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4"},"issue":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/4"},"comments":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/issues/4/comments"},"review_comments":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4/comments"},"review_comment":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4/commits"},"statuses":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/statuses/a99c92b2ba68464a1a05d7fa8ef55e3a98803e5f"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":true,"rebaseable":true,"mergeable_state":"clean","merged_by":null,"comments":0,"review_comments":1,"maintainer_can_modify":false,"commits":1,"additions":1,"deletions":0,"changed_files":1} - -https -GET -api.github.com -None -/repos/CS481-Team-Pumpkin/PyGithub/pulls/4/reviews/631460061 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('Server', 'GitHub.com'), ('Date', 'Thu, 08 Apr 2021 14:27:13 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/"2cb2134a474a60fa86391e682a41332b9ce4e92e41b9e7d2039ce2e6c64ae80e"'), ('X-OAuth-Scopes', 'admin:org, repo'), ('X-Accepted-OAuth-Scopes', ''), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1617895279'), ('X-RateLimit-Used', '8'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'EB4A:950E:125F8E:13037F:606F12C0')] -{"id":631460061,"node_id":"MDE3OlB1bGxSZXF1ZXN0UmV2aWV3NjMxNDYwMDYx","user":{"login":"bagashvilit","id":46755932,"node_id":"MDQ6VXNlcjQ2NzU1OTMy","avatar_url":"https://avatars.githubusercontent.com/u/46755932?v=4","gravatar_id":"","url":"https://api.github.com/users/bagashvilit","html_url":"https://github.com/bagashvilit","followers_url":"https://api.github.com/users/bagashvilit/followers","following_url":"https://api.github.com/users/bagashvilit/following{/other_user}","gists_url":"https://api.github.com/users/bagashvilit/gists{/gist_id}","starred_url":"https://api.github.com/users/bagashvilit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bagashvilit/subscriptions","organizations_url":"https://api.github.com/users/bagashvilit/orgs","repos_url":"https://api.github.com/users/bagashvilit/repos","events_url":"https://api.github.com/users/bagashvilit/events{/privacy}","received_events_url":"https://api.github.com/users/bagashvilit/received_events","type":"User","site_admin":false},"body":"","state":"PENDING","html_url":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4#pullrequestreview-631460061","pull_request_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4","author_association":"MEMBER","_links":{"html":{"href":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4#pullrequestreview-631460061"},"pull_request":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4"}},"commit_id":"a99c92b2ba68464a1a05d7fa8ef55e3a98803e5f"} diff --git a/tests/ReplayData/PullRequestReview1856.testDelete.txt b/tests/ReplayData/PullRequestReview1856.testDelete.txt index dedf4b0d41..76e7210571 100644 --- a/tests/ReplayData/PullRequestReview1856.testDelete.txt +++ b/tests/ReplayData/PullRequestReview1856.testDelete.txt @@ -1,3 +1,14 @@ +https +GET +api.github.com +None +/repos/CS481-Team-Pumpkin/PyGithub/pulls/4/reviews/631460061 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Thu, 08 Apr 2021 14:27:13 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/"2cb2134a474a60fa86391e682a41332b9ce4e92e41b9e7d2039ce2e6c64ae80e"'), ('X-OAuth-Scopes', 'admin:org, repo'), ('X-Accepted-OAuth-Scopes', ''), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4992'), ('X-RateLimit-Reset', '1617895279'), ('X-RateLimit-Used', '8'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'EB4A:950E:125F8E:13037F:606F12C0')] +{"id":631460061,"node_id":"MDE3OlB1bGxSZXF1ZXN0UmV2aWV3NjMxNDYwMDYx","user":{"login":"bagashvilit","id":46755932,"node_id":"MDQ6VXNlcjQ2NzU1OTMy","avatar_url":"https://avatars.githubusercontent.com/u/46755932?v=4","gravatar_id":"","url":"https://api.github.com/users/bagashvilit","html_url":"https://github.com/bagashvilit","followers_url":"https://api.github.com/users/bagashvilit/followers","following_url":"https://api.github.com/users/bagashvilit/following{/other_user}","gists_url":"https://api.github.com/users/bagashvilit/gists{/gist_id}","starred_url":"https://api.github.com/users/bagashvilit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bagashvilit/subscriptions","organizations_url":"https://api.github.com/users/bagashvilit/orgs","repos_url":"https://api.github.com/users/bagashvilit/repos","events_url":"https://api.github.com/users/bagashvilit/events{/privacy}","received_events_url":"https://api.github.com/users/bagashvilit/received_events","type":"User","site_admin":false},"body":"","state":"PENDING","html_url":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4#pullrequestreview-631460061","pull_request_url":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4","author_association":"MEMBER","_links":{"html":{"href":"https://github.com/CS481-Team-Pumpkin/PyGithub/pull/4#pullrequestreview-631460061"},"pull_request":{"href":"https://api.github.com/repos/CS481-Team-Pumpkin/PyGithub/pulls/4"}},"commit_id":"a99c92b2ba68464a1a05d7fa8ef55e3a98803e5f"} + https DELETE api.github.com diff --git a/tests/ReplayData/Repository.testCompare.txt b/tests/ReplayData/Repository.testCompare.txt index 9dc226b12e..dff7c86f18 100644 --- a/tests/ReplayData/Repository.testCompare.txt +++ b/tests/ReplayData/Repository.testCompare.txt @@ -2,9 +2,9 @@ https GET api.github.com None -/repos/PyGithub/PyGithub/compare/v0.6...v0.7?page=1&per_page=250 +/repos/PyGithub/PyGithub/compare/v0.6...v0.7?page=1 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4997'), ('content-length', '14488'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"42eb6d36008b20550ae6d1991e0423d5"'), ('date', 'Sun, 27 May 2012 06:30:33 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"status":"ahead","behind_by":0,"total_commits":4,"merge_base_commit":{"author":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","committer":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"sha":"4303c5b90e2216d927155e9609436ccb8984c495","parents":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","sha":"936f4a97f1a86392637ec002bbf89ff036a5062d"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb"}],"commit":{"author":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-04-17T10:55:16-07:00"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","message":"Merge branch 'develop'","committer":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-04-17T10:55:16-07:00"},"tree":{"url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad","sha":"f492784d8ca837779650d1fb406a1a3587a764ad"}}},"patch_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch","diff_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff","url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7","ahead_by":4,"base_commit":{"author":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","committer":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"sha":"4303c5b90e2216d927155e9609436ccb8984c495","parents":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","sha":"936f4a97f1a86392637ec002bbf89ff036a5062d"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb"}],"commit":{"author":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-04-17T10:55:16-07:00"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","message":"Merge branch 'develop'","committer":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-04-17T10:55:16-07:00"},"tree":{"url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad","sha":"f492784d8ca837779650d1fb406a1a3587a764ad"}}},"permalink_url":"https://github.com/PyGithub/PyGithub/compare/jacquev6:4303c5b...jacquev6:ecda065","files":[{"status":"modified","changes":2,"deletions":1,"raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/ReferenceOfClasses.md","blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/ReferenceOfClasses.md","filename":"ReferenceOfClasses.md","patch":"@@ -3,7 +3,7 @@ You obtain instances through calls to `get_` and `create_` methods.\n \n Class `Github`\n ==============\n-* Constructed from user's login and password\n+* Constructed from user's login and password or OAuth token\n * `get_user()`: `AuthenticatedUser`\n * `get_user( login )`: `NamedUser`\n * `get_organization( login )`: `Organization`","additions":1,"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7"},{"status":"modified","changes":4,"deletions":2,"raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github/Github.py","blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github/Github.py","filename":"github/Github.py","patch":"@@ -2,8 +2,8 @@\n from GithubObjects import *\n \n class Github:\n- def __init__( self, login, password, debugFile = None ):\n- self.__requester = Requester( login, password )\n+ def __init__( self, login_or_token = None, password = None, debugFile = None ):\n+ self.__requester = Requester( login_or_token, password )\n self.__debugFile = debugFile\n \n def _dataRequest( self, verb, url, parameters, data ):","additions":2,"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7"},{"status":"modified","changes":17,"deletions":3,"raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github/Requester.py","blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github/Requester.py","filename":"github/Requester.py","patch":"@@ -7,8 +7,15 @@ class UnknownGithubObject( Exception ):\n pass\n \n class Requester:\n- def __init__( self, login, password ):\n- self.__authorizationHeader = \"Basic \" + base64.b64encode( login + \":\" + password ).replace( '\\n', '' )\n+ def __init__( self, login_or_token, password ):\n+ if password is not None:\n+ login = login_or_token\n+ self.__authorizationHeader = \"Basic \" + base64.b64encode( login + \":\" + password ).replace( '\\n', '' )\n+ elif login_or_token is not None:\n+ token = login_or_token\n+ self.__authorizationHeader = \"token \" + token\n+ else:\n+ self.__authorizationHeader = None\n \n def dataRequest( self, verb, url, parameters, input ):\n if parameters is None:\n@@ -46,12 +53,16 @@ def statusRequest( self, verb, url, parameters, input ):\n def __rawRequest( self, verb, url, parameters, input ):\n assert verb in [ \"HEAD\", \"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\" ]\n \n+ headers = dict()\n+ if self.__authorizationHeader is not None:\n+ headers[ \"Authorization\" ] = self.__authorizationHeader\n+\n cnx = httplib.HTTPSConnection( \"api.github.com\", strict = True )\n cnx.request(\n verb,\n self.__completeUrl( url, parameters ),\n json.dumps( input ),\n- { \"Authorization\" : self.__authorizationHeader }\n+ headers\n )\n response = cnx.getresponse()\n ","additions":14,"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7"},{"status":"modified","changes":10,"deletions":1,"raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/setup.py","blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/setup.py","filename":"setup.py","patch":"@@ -5,7 +5,7 @@\n \n setup(\n name = 'PyGithub',\n- version = '0.6',\n+ version = '0.7',\n description = 'Use the full Github API v3',\n author = 'Vincent Jacques',\n author_email = 'vincent@vincent-jacques.net',\n@@ -26,6 +26,14 @@\n print repo.name\n repo.edit( has_wiki = False )\n \n+ You can also create a Github instance without authentication::\n+\n+ g = Github( \"user\", \"password\" )\n+\n+ Or with an OAuth token::\n+\n+ g = Github( token )\n+\n Reference documentation\n =======================\n ","additions":9,"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7"}],"commits":[{"author":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","committer":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"sha":"5bb654d26dd014d36794acd1e6ecf3736f12aad7","parents":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","sha":"4303c5b90e2216d927155e9609436ccb8984c495"}],"commit":{"author":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T05:10:54-07:00"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","message":"Implement the three authentication schemes","committer":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T05:10:54-07:00"},"tree":{"url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/59d755d95bc2e2de4dcef70a7c73e81e677f610b","sha":"59d755d95bc2e2de4dcef70a7c73e81e677f610b"}}},{"author":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5","committer":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"sha":"cb0313157bf904f2d364377d35d9397b269547a5","parents":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","sha":"4303c5b90e2216d927155e9609436ccb8984c495"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","sha":"5bb654d26dd014d36794acd1e6ecf3736f12aad7"}],"commit":{"author":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T10:04:22-07:00"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cb0313157bf904f2d364377d35d9397b269547a5","message":"Merge branch 'topic/Authentication' into develop","committer":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T10:04:22-07:00"},"tree":{"url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/59d755d95bc2e2de4dcef70a7c73e81e677f610b","sha":"59d755d95bc2e2de4dcef70a7c73e81e677f610b"}}},{"author":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","committer":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"sha":"0cec0d25e606c023a62a4fc7cdc815309ebf6d16","parents":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5","sha":"cb0313157bf904f2d364377d35d9397b269547a5"}],"commit":{"author":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T10:13:33-07:00"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","message":"Publish version 0.7","committer":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T10:13:33-07:00"},"tree":{"url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/78735573611521bb3ade95921c668097e2a4dc5e","sha":"78735573611521bb3ade95921c668097e2a4dc5e"}}},{"author":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","committer":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","parents":[{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","sha":"4303c5b90e2216d927155e9609436ccb8984c495"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","sha":"0cec0d25e606c023a62a4fc7cdc815309ebf6d16"}],"commit":{"author":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T10:14:34-07:00"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","message":"Merge branch 'develop'","committer":{"email":"vincent@vincent-jacques.net","name":"Vincent Jacques","date":"2012-05-25T10:14:34-07:00"},"tree":{"url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/78735573611521bb3ade95921c668097e2a4dc5e","sha":"78735573611521bb3ade95921c668097e2a4dc5e"}}}],"html_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7"} +[('Date', 'Tue, 07 Oct 2025 15:04:58 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/"92605a8189bea3156c5e74711ab76b49624b1cea8ca3982a004eccc55bd62cfc"'), ('Last-Modified', 'Fri, 25 May 2012 17:14:34 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1759853097'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'BF0E:37B62E:634F5D7:5CEB2EA:68E52C1A')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7","html_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:4303c5b...PyGithub:ecda065","diff_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch","base_commit":{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0MzAzYzViOTBlMjIxNmQ5MjcxNTVlOTYwOTQzNmNjYjg5ODRjNDk1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"message":"Merge branch 'develop'","tree":{"sha":"f492784d8ca837779650d1fb406a1a3587a764ad","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"936f4a97f1a86392637ec002bbf89ff036a5062d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","html_url":"https://github.com/PyGithub/PyGithub/commit/936f4a97f1a86392637ec002bbf89ff036a5062d"},{"sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","html_url":"https://github.com/PyGithub/PyGithub/commit/2a7e80e6421c5d4d201d60619068dea6bae612cb"}]},"merge_base_commit":{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0MzAzYzViOTBlMjIxNmQ5MjcxNTVlOTYwOTQzNmNjYjg5ODRjNDk1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"message":"Merge branch 'develop'","tree":{"sha":"f492784d8ca837779650d1fb406a1a3587a764ad","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"936f4a97f1a86392637ec002bbf89ff036a5062d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","html_url":"https://github.com/PyGithub/PyGithub/commit/936f4a97f1a86392637ec002bbf89ff036a5062d"},{"sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","html_url":"https://github.com/PyGithub/PyGithub/commit/2a7e80e6421c5d4d201d60619068dea6bae612cb"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"5bb654d26dd014d36794acd1e6ecf3736f12aad7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo1YmI2NTRkMjZkZDAxNGQzNjc5NGFjZDFlNmVjZjM3MzZmMTJhYWQ3","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T12:10:54Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T12:10:54Z"},"message":"Implement the three authentication schemes","tree":{"sha":"59d755d95bc2e2de4dcef70a7c73e81e677f610b","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/59d755d95bc2e2de4dcef70a7c73e81e677f610b"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","html_url":"https://github.com/PyGithub/PyGithub/commit/5bb654d26dd014d36794acd1e6ecf3736f12aad7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495"}]},{"sha":"cb0313157bf904f2d364377d35d9397b269547a5","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYjAzMTMxNTdiZjkwNGYyZDM2NDM3N2QzNWQ5Mzk3YjI2OTU0N2E1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:04:22Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:04:22Z"},"message":"Merge branch 'topic/Authentication' into develop","tree":{"sha":"59d755d95bc2e2de4dcef70a7c73e81e677f610b","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/59d755d95bc2e2de4dcef70a7c73e81e677f610b"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cb0313157bf904f2d364377d35d9397b269547a5","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5","html_url":"https://github.com/PyGithub/PyGithub/commit/cb0313157bf904f2d364377d35d9397b269547a5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495"},{"sha":"5bb654d26dd014d36794acd1e6ecf3736f12aad7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","html_url":"https://github.com/PyGithub/PyGithub/commit/5bb654d26dd014d36794acd1e6ecf3736f12aad7"}]},{"sha":"0cec0d25e606c023a62a4fc7cdc815309ebf6d16","node_id":"MDY6Q29tbWl0MzU0NDQ5MDowY2VjMGQyNWU2MDZjMDIzYTYyYTRmYzdjZGM4MTUzMDllYmY2ZDE2","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:13:33Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:13:33Z"},"message":"Publish version 0.7","tree":{"sha":"78735573611521bb3ade95921c668097e2a4dc5e","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/78735573611521bb3ade95921c668097e2a4dc5e"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","html_url":"https://github.com/PyGithub/PyGithub/commit/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"cb0313157bf904f2d364377d35d9397b269547a5","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5","html_url":"https://github.com/PyGithub/PyGithub/commit/cb0313157bf904f2d364377d35d9397b269547a5"}]},{"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDplY2RhMDY1ZTAxODc2MjA5ZDJiZGY1ZmU0ZTkxY2VlOGZmYWE5ZmY3","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:14:34Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:14:34Z"},"message":"Merge branch 'develop'","tree":{"sha":"78735573611521bb3ade95921c668097e2a4dc5e","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/78735573611521bb3ade95921c668097e2a4dc5e"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","html_url":"https://github.com/PyGithub/PyGithub/commit/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495"},{"sha":"0cec0d25e606c023a62a4fc7cdc815309ebf6d16","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","html_url":"https://github.com/PyGithub/PyGithub/commit/0cec0d25e606c023a62a4fc7cdc815309ebf6d16"}]}],"files":[{"sha":"c1602a737361ca08d8edd03d3d189c6c38b52502","filename":"ReferenceOfClasses.md","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/ReferenceOfClasses.md","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/ReferenceOfClasses.md","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/ReferenceOfClasses.md?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -3,7 +3,7 @@ You obtain instances through calls to `get_` and `create_` methods.\n \n Class `Github`\n ==============\n-* Constructed from user's login and password\n+* Constructed from user's login and password or OAuth token\n * `get_user()`: `AuthenticatedUser`\n * `get_user( login )`: `NamedUser`\n * `get_organization( login )`: `Organization`"},{"sha":"8c8348878598d2878b23bd29c0d1291ec77bc833","filename":"github/Github.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FGithub.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FGithub.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithub.py?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -2,8 +2,8 @@\n from GithubObjects import *\n \n class Github:\n- def __init__( self, login, password, debugFile = None ):\n- self.__requester = Requester( login, password )\n+ def __init__( self, login_or_token = None, password = None, debugFile = None ):\n+ self.__requester = Requester( login_or_token, password )\n self.__debugFile = debugFile\n \n def _dataRequest( self, verb, url, parameters, data ):"},{"sha":"0034ec872a3c1b90c30f5fb440ce641ba943c856","filename":"github/Requester.py","status":"modified","additions":14,"deletions":3,"changes":17,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -7,8 +7,15 @@ class UnknownGithubObject( Exception ):\n pass\n \n class Requester:\n- def __init__( self, login, password ):\n- self.__authorizationHeader = \"Basic \" + base64.b64encode( login + \":\" + password ).replace( '\\n', '' )\n+ def __init__( self, login_or_token, password ):\n+ if password is not None:\n+ login = login_or_token\n+ self.__authorizationHeader = \"Basic \" + base64.b64encode( login + \":\" + password ).replace( '\\n', '' )\n+ elif login_or_token is not None:\n+ token = login_or_token\n+ self.__authorizationHeader = \"token \" + token\n+ else:\n+ self.__authorizationHeader = None\n \n def dataRequest( self, verb, url, parameters, input ):\n if parameters is None:\n@@ -46,12 +53,16 @@ def statusRequest( self, verb, url, parameters, input ):\n def __rawRequest( self, verb, url, parameters, input ):\n assert verb in [ \"HEAD\", \"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\" ]\n \n+ headers = dict()\n+ if self.__authorizationHeader is not None:\n+ headers[ \"Authorization\" ] = self.__authorizationHeader\n+\n cnx = httplib.HTTPSConnection( \"api.github.com\", strict = True )\n cnx.request(\n verb,\n self.__completeUrl( url, parameters ),\n json.dumps( input ),\n- { \"Authorization\" : self.__authorizationHeader }\n+ headers\n )\n response = cnx.getresponse()\n "},{"sha":"47e6c6576d5acdd93ff1e47a21954f473e113833","filename":"setup.py","status":"modified","additions":9,"deletions":1,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/setup.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/setup.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/setup.py?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -5,7 +5,7 @@\n \n setup(\n name = 'PyGithub',\n- version = '0.6',\n+ version = '0.7',\n description = 'Use the full Github API v3',\n author = 'Vincent Jacques',\n author_email = 'vincent@vincent-jacques.net',\n@@ -26,6 +26,14 @@\n print repo.name\n repo.edit( has_wiki = False )\n \n+ You can also create a Github instance without authentication::\n+\n+ g = Github( \"user\", \"password\" )\n+\n+ Or with an OAuth token::\n+\n+ g = Github( token )\n+\n Reference documentation\n =======================\n "}]} diff --git a/tests/ReplayData/Repository.testCompareCommitPagination.txt b/tests/ReplayData/Repository.testCompareCommitPagination.txt index 8957f69934..44cf5bf176 100644 --- a/tests/ReplayData/Repository.testCompareCommitPagination.txt +++ b/tests/ReplayData/Repository.testCompareCommitPagination.txt @@ -6,8 +6,8 @@ None {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Wed, 24 Jan 2024 06:45:29 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/"9ae1c35715c1b3c319fe579abed57aeaf53d949c1844bf95f830004c1eba31ec"'), ('Last-Modified', 'Tue, 23 Jan 2024 10:05:32 GMT'), ('github-authentication-token-expiration', '2024-02-19 10:58:06 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4964'), ('X-RateLimit-Reset', '1706081414'), ('X-RateLimit-Used', '36'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'B642:56C8A:21B64A9:222AA91:65B0B209')] -{"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-01-23T10:05:32Z","pushed_at":"2024-01-23T19:27:16Z","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":15541,"stargazers_count":6497,"watchers_count":6497,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1718,"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":1718,"open_issues":282,"watchers":6497,"default_branch":"main","permissions":{"admin":false,"maintain":false,"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":1718,"subscribers_count":111} +[('Date', 'Tue, 07 Oct 2025 15:05:00 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/"4a3e972622aefb39c177e9e69a60527f2119a54d545d2887eb45e5f22b762626"'), ('Last-Modified', 'Mon, 06 Oct 2025 15:13:20 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-accepted-github-permissions', 'metadata=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4996'), ('X-RateLimit-Reset', '1759853097'), ('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', 'BF0B:202FE6:6096EF8:5A0BEBB:68E52C1B')] +{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2025-10-06T15:13:20Z","pushed_at":"2025-10-07T13:56:50Z","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":20698,"stargazers_count":7549,"watchers_count":7549,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1858,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":363,"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":1858,"open_issues":363,"watchers":7549,"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","user_view_type":"public","site_admin":false},"network_count":1858,"subscribers_count":113} https GET @@ -17,27 +17,5 @@ None {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 200 -[('Server', 'GitHub.com'), ('Date', 'Wed, 24 Jan 2024 06:45:30 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/"b22a1a1b4fe01543dfca61320cdf0ef99ae3b6ef93399b829e93b855dddc86c0"'), ('Last-Modified', 'Thu, 24 Dec 2020 04:11:01 GMT'), ('github-authentication-token-expiration', '2024-02-19 10:58:06 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4963'), ('X-RateLimit-Reset', '1706081414'), ('X-RateLimit-Used', '37'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('X-GitHub-Request-Id', 'B648:2146CD:1F05D5A:1F79C09:65B0B209')] -{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v1.54...v1.54.1","html_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:951fcdf...PyGithub:34d097c","diff_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.patch","base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"merge_base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"status":"ahead","ahead_by":10,"behind_by":0,"total_commits":10,"commits":[{"sha":"fab682a5ccfc275c31ec37f1f541254c7bd780f3","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpmYWI2ODJhNWNjZmMyNzVjMzFlYzM3ZjFmNTQxMjU0YzdiZDc4MGYz","commit":{"author":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-11-30T07:53:59Z"},"committer":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-11-30T07:53:59Z"},"message":"Fix stubs file for Repository","tree":{"sha":"33a9a785fd98dc79d1033ef2e49f30e2282246f0","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/33a9a785fd98dc79d1033ef2e49f30e2282246f0"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3","html_url":"https://github.com/PyGithub/PyGithub/commit/fab682a5ccfc275c31ec37f1f541254c7bd780f3","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3/comments","author":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","site_admin":false},"committer":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","site_admin":false},"parents":[{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810"}]},{"sha":"9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5ZWUzYWZiMTcxNmM1NTlhMGIzYjQ0ZTA5N2MwNWY0YjE0YWUyYWI4","commit":{"author":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-11-30T11:27:48Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-11-30T11:27:48Z"},"message":"Merge pull request #1767 from pascal-hofmann/fix-repository-stubs\n\nFix stubs file for Repository","tree":{"sha":"33a9a785fd98dc79d1033ef2e49f30e2282246f0","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/33a9a785fd98dc79d1033ef2e49f30e2282246f0"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfxNc0CRBK7hj4Ov3rIwAAdHIIAJb9YeSv3LLlSy7Nr4nILkyn\nMqrW9cvtvnqAH81QtuHlEKShsh33hbKmx9On1lxj7VcRBiB/6cLpAEUJowq0A4zt\n341cVH9+0mbmq+eG1c5vE/vTzq5Uu2mUpvjQ89ssyEvkQ/lIvOEBNAWwJSNwQOc0\n1LcGW1OEh+xmK7SxwvPXxE6aXjBgG8wv0WtFxmhlLoDzvwPymf9qM4/eq2UF6TmU\nzMop0xhv7Kkls626P0HN7wklupth8zaOAJO9vtn8m25sZoZ8XRr2KIX9gAV6jCLW\nuV0GFogjfpya9BVCa7Lh5o6m29ruyTgqIok4rPbZA8aDhQImq243PgP1reVinok=\n=Fepr\n-----END PGP SIGNATURE-----\n","payload":"tree 33a9a785fd98dc79d1033ef2e49f30e2282246f0\nparent 951fcdf23f8c657b525dee78086bc4dfd42ef810\nparent fab682a5ccfc275c31ec37f1f541254c7bd780f3\nauthor Pascal Hofmann 1606735668 +0100\ncommitter GitHub 1606735668 +0100\n\nMerge pull request #1767 from pascal-hofmann/fix-repository-stubs\n\nFix stubs file for Repository"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","html_url":"https://github.com/PyGithub/PyGithub/commit/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8/comments","author":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810"},{"sha":"fab682a5ccfc275c31ec37f1f541254c7bd780f3","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3","html_url":"https://github.com/PyGithub/PyGithub/commit/fab682a5ccfc275c31ec37f1f541254c7bd780f3"}]},{"sha":"a806b5233f6423e0f8dacc4d04b6d81a72689bed","node_id":"MDY6Q29tbWl0MzU0NDQ5MDphODA2YjUyMzNmNjQyM2UwZjhkYWNjNGQwNGI2ZDgxYTcyNjg5YmVk","commit":{"author":{"name":"Sébastien Besson","email":"seb.besson@gmail.com","date":"2020-11-30T23:17:18Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-11-30T23:17:18Z"},"message":"Revert \"Pin requests to <2.25 as well (#1757)\" (#1763)\n\n* Revert \"Pin requests to <2.25 as well (#1757)\"\r\n* Ensure httpretty is more recent than 1.0.3\r\n\r\nThis reverts commit d159425f36dc7f68766cc980e262e9287e5f111c.","tree":{"sha":"b33c2872fb923bf90b2a594aa3cd5b1898d1fc65","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/b33c2872fb923bf90b2a594aa3cd5b1898d1fc65"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfxX1+CRBK7hj4Ov3rIwAAdHIIAAqZsjeHvnQx2UVmlIqZaucp\naHuoyFp/5P+fgz/oKRnsINmmUcBdcjyLv0qXmgda3g87X9sx7fJh7DDK7MTlw5Ka\n07T/pY8+spaZfm7mVCVp7bh7741AE0tx/Gi2MhI6LPtFMHyCmy9ljeWCrMBvtPDc\naggmA8iGbp8XJ6ln++w2EATwyY9bxelWNgy0cwM7R1Eas/5NtVInETcCf+i9cJ3u\n5ONRvnV9oWFnd3LLD2lxJb2A2STX/IZ4WmXrFj6cb8bWwXJPfvlyK9f97H65+2/k\nRefP5cIfgdRGbd7Le71A90q3PFOpvzTMS+YGrF+l4H1OZ+t3AnqL/H2GzXHFYWY=\n=Dqlm\n-----END PGP SIGNATURE-----\n","payload":"tree b33c2872fb923bf90b2a594aa3cd5b1898d1fc65\nparent 9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8\nauthor Sébastien Besson 1606778238 +0000\ncommitter GitHub 1606778238 +1100\n\nRevert \"Pin requests to <2.25 as well (#1757)\" (#1763)\n\n* Revert \"Pin requests to <2.25 as well (#1757)\"\r\n* Ensure httpretty is more recent than 1.0.3\r\n\r\nThis reverts commit d159425f36dc7f68766cc980e262e9287e5f111c."}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed","html_url":"https://github.com/PyGithub/PyGithub/commit/a806b5233f6423e0f8dacc4d04b6d81a72689bed","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed/comments","author":{"login":"sbesson","id":1355463,"node_id":"MDQ6VXNlcjEzNTU0NjM=","avatar_url":"https://avatars.githubusercontent.com/u/1355463?v=4","gravatar_id":"","url":"https://api.github.com/users/sbesson","html_url":"https://github.com/sbesson","followers_url":"https://api.github.com/users/sbesson/followers","following_url":"https://api.github.com/users/sbesson/following{/other_user}","gists_url":"https://api.github.com/users/sbesson/gists{/gist_id}","starred_url":"https://api.github.com/users/sbesson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbesson/subscriptions","organizations_url":"https://api.github.com/users/sbesson/orgs","repos_url":"https://api.github.com/users/sbesson/repos","events_url":"https://api.github.com/users/sbesson/events{/privacy}","received_events_url":"https://api.github.com/users/sbesson/received_events","type":"User","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","html_url":"https://github.com/PyGithub/PyGithub/commit/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8"}]},{"sha":"63e4fae997a9a5dc8c2b56907c87c565537bb28f","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo2M2U0ZmFlOTk3YTlhNWRjOGMyYjU2OTA3Yzg3YzU2NTUzN2JiMjhm","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-02T03:47:45Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-02T03:47:45Z"},"message":"Drop support for Python 3.5 (#1770)\n\nIn preperation for starting to use 3.6+ only features, stop testing\r\nPython 3.5 in our CI, and bump our minimum required version.","tree":{"sha":"fde51c1aa322cbdd646e1677d1e69fb9d0457ae7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/fde51c1aa322cbdd646e1677d1e69fb9d0457ae7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfxw5hCRBK7hj4Ov3rIwAAdHIIADWSUehbe2GbpLdhBVQY2SZ2\nAm1ACkzu6AMNG2AfrSVrd2e8mnOUt/BEIIGT+MHxKLTbApDuEo5m7DnIs/zJJUDw\n67eDlQySTP72UHMnZNukELGffNdhQDuZh9K6SeAn/C+qS/UwrTpUo/Zk6u9joVkm\nxbgMGutpg/gi+NYDaPxwHvqlXrFyB2zLrnF/jsRIYNqvJ1XPmgPSHZ2s54ivGLep\npKqGvyA92knGAnL8PZpy6d7pbyx8DWAgGokpP3Bgm3W8YuFNPX/25d81V5RTwUHs\n4pGREUyooUHz2yjARTTwvGWXH+1KwwmRCfGkSPmNMzJYoJkeGkgNAPRLHEbgdhk=\n=n01c\n-----END PGP SIGNATURE-----\n","payload":"tree fde51c1aa322cbdd646e1677d1e69fb9d0457ae7\nparent a806b5233f6423e0f8dacc4d04b6d81a72689bed\nauthor Steve Kowalik 1606880865 +1100\ncommitter GitHub 1606880865 +1100\n\nDrop support for Python 3.5 (#1770)\n\nIn preperation for starting to use 3.6+ only features, stop testing\r\nPython 3.5 in our CI, and bump our minimum required version."}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f","html_url":"https://github.com/PyGithub/PyGithub/commit/63e4fae997a9a5dc8c2b56907c87c565537bb28f","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"a806b5233f6423e0f8dacc4d04b6d81a72689bed","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed","html_url":"https://github.com/PyGithub/PyGithub/commit/a806b5233f6423e0f8dacc4d04b6d81a72689bed"}]}],"files":[{"sha":"9abd22d1d5f4695912c1853cc8fb19eb15aacddc","filename":".git-blame-ignore-revs","status":"modified","additions":3,"deletions":0,"changes":3,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/.git-blame-ignore-revs","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/.git-blame-ignore-revs","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.git-blame-ignore-revs?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -6,3 +6,6 @@\n \n # Format with new black\n 07e29fe014b7e214e72b51129fbef55468a7309d\n+\n+# Add pyupgrade to pre-commit\n+e113e37de1ec687c68337d777f3629251b35ab28"},{"sha":"38fe00ef7c4345da1fcd6da1d98cb19be523a7cd","filename":".github/workflows/ci.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -9,7 +9,7 @@ jobs:\n name: test (Python ${{ matrix.python-version }})\n strategy:\n matrix:\n- python-version: [3.5, 3.6, 3.7, 3.8, 3.9]\n+ python-version: [3.6, 3.7, 3.8, 3.9]\n steps:\n - uses: actions/checkout@v2\n - name: Set up Python"},{"sha":"e18dd1f992e60b0460831fdf3d64fe9511cd45dc","filename":".pre-commit-config.yaml","status":"modified","additions":6,"deletions":0,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/.pre-commit-config.yaml","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/.pre-commit-config.yaml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.pre-commit-config.yaml?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -24,3 +24,9 @@ repos:\n args:\n - --ignore-words-list=\"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,Chang\"\n - --quiet-level=2\n+ - repo: https://github.com/asottile/pyupgrade\n+ rev: v2.7.4\n+ hooks:\n+ - id: pyupgrade\n+ args:\n+ - --py36-plus"},{"sha":"43d33319fa66a12c3ecf956884e5a606b0430d6c","filename":"doc/changes.rst","status":"modified","additions":10,"deletions":0,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fchanges.rst","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fchanges.rst","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/doc%2Fchanges.rst?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -4,6 +4,16 @@ Change log\n Stable versions\n ~~~~~~~~~~~~~~~\n \n+Version 1.54.1 (December 24, 2020)\n+-----------------------------------\n+\n+* Pin pyjwt version (#1797) (31a1c007)\n+* Add pyupgrade to pre-commit configuration (#1783) (e113e37d)\n+* Fix #1731: Incorrect annotation (82c349ce)\n+* Drop support for Python 3.5 (#1770) (63e4fae9)\n+* Revert \"Pin requests to <2.25 as well (#1757)\" (#1763) (a806b523)\n+* Fix stubs file for Repository (fab682a5)\n+\n Version 1.54 (November 30, 2020)\n -----------------------------------\n **Important**"},{"sha":"b8187945593d83a2e6003075064f3e7f3f6cdebd","filename":"doc/conf.py","status":"modified","additions":6,"deletions":8,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fconf.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fconf.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/doc%2Fconf.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -61,8 +59,8 @@\n master_doc = \"index\"\n \n # General information about the project.\n-project = u\"PyGithub\"\n-copyright = u\"%d, Vincent Jacques\" % datetime.date.today().year\n+project = \"PyGithub\"\n+copyright = \"%d, Vincent Jacques\" % datetime.date.today().year\n \n # The version info for the project you're documenting, acts as replacement for\n # |version| and |release|, also used in various other places throughout the\n@@ -204,7 +202,7 @@\n # Grouping the document tree into LaTeX files. List of tuples\n # (source start file, target name, title, author, documentclass [howto/manual]).\n latex_documents = [\n- (\"index\", \"PyGithub.tex\", u\"PyGithub Documentation\", u\"Vincent Jacques\", \"manual\"),\n+ (\"index\", \"PyGithub.tex\", \"PyGithub Documentation\", \"Vincent Jacques\", \"manual\"),\n ]\n \n # The name of an image file (relative to this directory) to place at the top of\n@@ -232,7 +230,7 @@\n \n # One entry per manual page. List of tuples\n # (source start file, name, description, authors, manual section).\n-man_pages = [(\"index\", \"pygithub\", u\"PyGithub Documentation\", [u\"Vincent Jacques\"], 1)]\n+man_pages = [(\"index\", \"pygithub\", \"PyGithub Documentation\", [\"Vincent Jacques\"], 1)]\n \n # If true, show URL addresses after external links.\n # man_show_urls = False\n@@ -247,8 +245,8 @@\n (\n \"index\",\n \"PyGithub\",\n- u\"PyGithub Documentation\",\n- u\"Vincent Jacques\",\n+ \"PyGithub Documentation\",\n+ \"Vincent Jacques\",\n \"PyGithub\",\n \"One line description of project.\",\n \"Miscellaneous\","},{"sha":"f2fb64f468b5abcb93635bc849d69092f48a78e3","filename":"github/AccessToken.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAccessToken.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAccessToken.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAccessToken.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Rigas Papathanasopoulos #"},{"sha":"2d1f81d920743a0ba33c078ba430283d5d8b6bc6","filename":"github/ApplicationOAuth.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FApplicationOAuth.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FApplicationOAuth.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FApplicationOAuth.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ###########################\n # #\n # Copyright 2019 Rigas Papathanasopoulos #\n@@ -75,7 +73,7 @@ def get_login_url(self, redirect_uri=None, state=None, login=None):\n parameters = urllib.parse.urlencode(parameters)\n \n base_url = \"https://github.com/login/oauth/authorize\"\n- return u\"{}?{}\".format(base_url, parameters)\n+ return f\"{base_url}?{parameters}\"\n \n def get_access_token(self, code, state=None):\n \"\"\""},{"sha":"58a5c5d6e933a4451a4a3f3babb204abb580d0b8","filename":"github/AuthenticatedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthenticatedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthenticatedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuthenticatedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"bbddd170d0663ac6a1151b2eb87924f6d531c488","filename":"github/Authorization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuthorization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"38dd650943433ed86b42c0674f50b0c0173988d6","filename":"github/AuthorizationApplication.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorizationApplication.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorizationApplication.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuthorizationApplication.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f723301c992529f6902bb52d24c8d1d5b8a2c80b","filename":"github/Branch.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranch.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranch.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FBranch.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"ffc364c8dfa5bc0627194187690e5c48eb4ac65a","filename":"github/BranchProtection.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranchProtection.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranchProtection.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FBranchProtection.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"9a895980289ad23c20ee682182d4af108d0ae82a","filename":"github/CheckRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"5c7033cda9894b83e696d8e880cde3166c73265a","filename":"github/CheckRunAnnotation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunAnnotation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunAnnotation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckRunAnnotation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"3dfc02382ac738303501d2e9806ad2c980b6d0dd","filename":"github/CheckRunOutput.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunOutput.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunOutput.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckRunOutput.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"d6d67c32f6426c2c786cc5c240a245c65403d246","filename":"github/CheckSuite.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckSuite.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckSuite.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckSuite.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"bf07b60b83c9fe2a07befe1ba921f6cc58a1cb9c","filename":"github/Clones.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FClones.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FClones.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FClones.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"f951589d35e368580c9e6ca419aafb63dc8c72c6","filename":"github/Commit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"fb420d868a30436f0953530673e709ba70828325","filename":"github/CommitCombinedStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitCombinedStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitCombinedStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitCombinedStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Jannis Gebauer #"},{"sha":"f5eca565eede61e0d528f4ffbc1693af5eddd67e","filename":"github/CommitComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"2a511c8a74a7d664037036ef15d55c0f2a8dd2f4","filename":"github/CommitStats.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStats.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStats.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitStats.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b95b49e461a267862bc3892edc0f53e731d8a5be","filename":"github/CommitStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f058b7e3892f40a38fe9a38a18bdfa2463ea2f18","filename":"github/Comparison.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FComparison.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FComparison.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FComparison.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"d5cbcb7e21893bd46c1901678a5aa687c51da628","filename":"github/Consts.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FConsts.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FConsts.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FConsts.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"8d3289aeccde1b2eb91e0559539abd1f2bf45b8c","filename":"github/ContentFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FContentFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FContentFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FContentFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"9e959d097de554c0923d68216bf7b47a9fa24ac2","filename":"github/Deployment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeployment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeployment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FDeployment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"518f0b4a8ed3bcd779eaa06ad07c8777aebd71d5","filename":"github/DeploymentStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeploymentStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeploymentStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FDeploymentStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Colby Gallup #"},{"sha":"5c7932eacbd61d53f395f48c8191aa46318a8238","filename":"github/Download.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDownload.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDownload.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FDownload.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f690d802290538cc39ae9d4e14db807e1ba47a57","filename":"github/Event.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"cc07442cae8a3add1bbd667f527be8ddf810a4fc","filename":"github/File.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"88b799a3eea219e600841d4cfff7f01bdd518371","filename":"github/Gist.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGist.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGist.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGist.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"7bf85ec504d271f6db8524b06cdc2b21e7ed7d56","filename":"github/GistComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGistComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f540e154a56e255f5e3489206ae4ca088b477bec","filename":"github/GistFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGistFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"5cb9690895e5563ceac5d14fb794c299e9187f20","filename":"github/GistHistoryState.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistHistoryState.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistHistoryState.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGistHistoryState.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"56f7a32283fc9e9df31e46db11fa347626cbfaa8","filename":"github/GitAuthor.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitAuthor.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitAuthor.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitAuthor.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c93e8c633c7f3d3a4324364425d6c27ac2fc6db9","filename":"github/GitBlob.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitBlob.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitBlob.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitBlob.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"0a7aa6d81521874afa17ca6376ce125251293196","filename":"github/GitCommit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"02eb49af4126829280947ae4c6b9ebbc66e46a33","filename":"github/GitObject.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitObject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"69222b7d264a36e592eb033487c028e4f1afcfd3","filename":"github/GitRef.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRef.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRef.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitRef.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"31a45edc0d17f80ccc1be8a26e7ba213e1182c54","filename":"github/GitRelease.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRelease.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRelease.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitRelease.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2015 Ed Holland #"},{"sha":"7271b55252042ba4d3337da31bedcd35a08671cd","filename":"github/GitReleaseAsset.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitReleaseAsset.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitReleaseAsset.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitReleaseAsset.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Chris McBride #"},{"sha":"eb0bf65d627933bd6131722c2b22b465b8f0c630","filename":"github/GitTag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6afc1303a7bfe10f1487dbe39d4e1ae82bd2fdcd","filename":"github/GitTree.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTree.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTree.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitTree.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"9da5e0331434adea65ac8761702c547097e03430","filename":"github/GitTreeElement.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTreeElement.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTreeElement.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitTreeElement.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"cac31f245ebf4f7ba994cfd46122245b193e4e29","filename":"github/GithubApp.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubApp.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"4708047f708151cb6b4fa19681190925db0614ed","filename":"github/GithubException.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubException.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubException.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubException.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3916153e806c51c6f2105897df8b2aabb66a9b25","filename":"github/GithubObject.py","status":"modified","additions":6,"deletions":11,"changes":17,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -66,7 +64,7 @@ def value(self):\n )\n \n \n-class GithubObject(object):\n+class GithubObject:\n \"\"\"\n Base class for all classes representing objects returned by the API.\n \"\"\"\n@@ -233,13 +231,10 @@ def _makeDictOfStringsToClassesAttribute(self, klass, value):\n for key, element in value.items()\n ):\n return _ValuedAttribute(\n- dict(\n- (\n- key,\n- klass(self._requester, self._headers, element, completed=False),\n- )\n+ {\n+ key: klass(self._requester, self._headers, element, completed=False)\n for key, element in value.items()\n- )\n+ }\n )\n else:\n return _BadAttribute(value, {str: dict})\n@@ -269,8 +264,8 @@ def format_params(params):\n if isinstance(v, bytes):\n v = v.decode(\"utf-8\")\n if isinstance(v, str):\n- v = '\"{v}\"'.format(v=v)\n- yield u\"{k}={v}\".format(k=k, v=v)\n+ v = f'\"{v}\"'\n+ yield f\"{k}={v}\"\n \n return \"{class_name}({params})\".format(\n class_name=self.__class__.__name__,"},{"sha":"147276a997516ac17b5ec84becefb430774f5b2b","filename":"github/GitignoreTemplate.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitignoreTemplate.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitignoreTemplate.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitignoreTemplate.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"346dc04c82009bf0125a86f003c45815da7fab4a","filename":"github/Hook.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHook.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHook.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FHook.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"44ec8af423c65966669e387b3b04ccb9dd854963","filename":"github/HookDescription.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookDescription.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookDescription.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FHookDescription.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a491ef30bfa0219c44e16f934a2dd440e7166549","filename":"github/HookResponse.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookResponse.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookResponse.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FHookResponse.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3289d18716b0b3a46c7dc08b6b497213672b14a3","filename":"github/InputFileContent.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputFileContent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputFileContent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInputFileContent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -31,7 +29,7 @@\n import github.GithubObject\n \n \n-class InputFileContent(object):\n+class InputFileContent:\n \"\"\"\n This class represents InputFileContents\n \"\"\""},{"sha":"b53fd46d9d55dfdc8d8a53b79fad1e1a153ceb71","filename":"github/InputGitAuthor.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitAuthor.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitAuthor.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInputGitAuthor.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -33,7 +31,7 @@\n import github.GithubObject\n \n \n-class InputGitAuthor(object):\n+class InputGitAuthor:\n \"\"\"\n This class represents InputGitAuthors\n \"\"\"\n@@ -56,7 +54,7 @@ def __init__(self, name, email, date=github.GithubObject.NotSet):\n self.__date = date\n \n def __repr__(self):\n- return 'InputGitAuthor(name=\"{}\")'.format(self.__name)\n+ return f'InputGitAuthor(name=\"{self.__name}\")'\n \n @property\n def _identity(self):"},{"sha":"909250c56c746918b4b5daf2060bfcb2697663f7","filename":"github/InputGitTreeElement.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitTreeElement.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitTreeElement.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInputGitTreeElement.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -31,7 +29,7 @@\n import github.GithubObject\n \n \n-class InputGitTreeElement(object):\n+class InputGitTreeElement:\n \"\"\"\n This class represents InputGitTreeElements\n \"\"\""},{"sha":"5ec7550304c2ef20c84d0256c892691ea006a206","filename":"github/Installation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInstallation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Jannis Gebauer #"},{"sha":"06c695f9aedb24a5429bf58a88e37ff1a71c68fe","filename":"github/InstallationAuthorization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallationAuthorization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallationAuthorization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInstallationAuthorization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Jannis Gebauer #"},{"sha":"d246dcfb8e1d5aec8c96a9a69afdce430e3f3f6f","filename":"github/Invitation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInvitation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInvitation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInvitation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Jannis Gebauer #"},{"sha":"078f21828c650ca54a5ef12abb4496bfdf66700d","filename":"github/Issue.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssue.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssue.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssue.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Andrew Bettison #"},{"sha":"85162b0dfebd0e1ae6768374817f06ed79462779","filename":"github/IssueComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssueComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"35456e868651fc0a11115e15978cd6f928d3e020","filename":"github/IssueEvent.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssueEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b7d73da6f918ecfb6ed7e2b1193c2267962f4e4c","filename":"github/IssuePullRequest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssuePullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssuePullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssuePullRequest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"881ce014d0704727ffecb8975ee8fdd22c2f40a6","filename":"github/Label.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLabel.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLabel.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FLabel.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c604037985b92b5d8515c878b4abc9a5ab50b38a","filename":"github/License.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLicense.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLicense.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FLicense.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Wan Liuyang #"},{"sha":"ceac54e0f02acd44eac56f1b468c67c8532898d2","filename":"github/MainClass.py","status":"modified","additions":18,"deletions":20,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMainClass.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMainClass.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMainClass.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #\n@@ -90,7 +88,7 @@\n DEFAULT_PER_PAGE = 30\n \n \n-class Github(object):\n+class Github:\n \"\"\"\n This is the main class you instantiate to access the Github API v3. Optional parameters allow different authentication methods.\n \"\"\"\n@@ -339,13 +337,13 @@ def get_repo(self, full_name_or_id, lazy=False):\n \"\"\"\n assert isinstance(full_name_or_id, (str, int)), full_name_or_id\n url_base = \"/repositories/\" if isinstance(full_name_or_id, int) else \"/repos/\"\n- url = \"%s%s\" % (url_base, full_name_or_id)\n+ url = f\"{url_base}{full_name_or_id}\"\n if lazy:\n return Repository.Repository(\n self.__requester, {}, {\"url\": url}, completed=False\n )\n headers, data = self.__requester.requestJsonAndCheck(\n- \"GET\", \"%s%s\" % (url_base, full_name_or_id)\n+ \"GET\", f\"{url_base}{full_name_or_id}\"\n )\n return Repository.Repository(self.__requester, headers, data, completed=True)\n \n@@ -431,7 +429,7 @@ def search_repositories(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/repositories `_\n@@ -459,7 +457,7 @@ def search_repositories(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -476,7 +474,7 @@ def search_users(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/users `_\n@@ -500,7 +498,7 @@ def search_users(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -517,7 +515,7 @@ def search_issues(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/issues `_\n@@ -541,7 +539,7 @@ def search_issues(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -556,7 +554,7 @@ def search_code(\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n highlight=False,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/code `_\n@@ -585,7 +583,7 @@ def search_code(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -605,7 +603,7 @@ def search_commits(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/commits `_\n@@ -633,7 +631,7 @@ def search_commits(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -661,7 +659,7 @@ def search_topics(self, query, **qualifiers):\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -809,7 +807,7 @@ def get_app(self, slug=github.GithubObject.NotSet):\n return GithubApp.GithubApp(self.__requester, headers, data, completed=True)\n \n \n-class GithubIntegration(object):\n+class GithubIntegration:\n \"\"\"\n Main class to obtain tokens for a GitHub integration.\n \"\"\"\n@@ -858,7 +856,7 @@ def get_access_token(self, installation_id, user_id=None):\n self.base_url, installation_id\n ),\n headers={\n- \"Authorization\": \"Bearer {}\".format(self.create_jwt()),\n+ \"Authorization\": f\"Bearer {self.create_jwt()}\",\n \"Accept\": Consts.mediaTypeIntegrationPreview,\n \"User-Agent\": \"PyGithub/Python\",\n },\n@@ -892,13 +890,13 @@ def get_installation(self, owner, repo):\n :rtype: :class:`github.Installation.Installation`\n \"\"\"\n headers = {\n- \"Authorization\": \"Bearer {}\".format(self.create_jwt()),\n+ \"Authorization\": f\"Bearer {self.create_jwt()}\",\n \"Accept\": Consts.mediaTypeIntegrationPreview,\n \"User-Agent\": \"PyGithub/Python\",\n }\n \n response = requests.get(\n- \"{}/repos/{}/{}/installation\".format(self.base_url, owner, repo),\n+ f\"{self.base_url}/repos/{owner}/{repo}/installation\",\n headers=headers,\n )\n response_dict = response.json()"},{"sha":"6eccb3431a1ab4664388f8dca734499a8a8eb5eb","filename":"github/Membership.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMembership.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMembership.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMembership.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"642de5f7ddbcb9086907042da89b70eee5b186e2","filename":"github/Migration.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMigration.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMigration.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMigration.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3f3f9829216bbf3d6bf0b95366dddd1ec9ddc1bd","filename":"github/Milestone.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMilestone.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMilestone.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMilestone.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"98e4e29d1b9497117e98ef9dcc0faa8c818d5214","filename":"github/NamedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNamedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNamedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FNamedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"7f427c8b384dc3389b4322d7d0f2d5431834be3c","filename":"github/Notification.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotification.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotification.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FNotification.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"9be34885156bf63e7b71fb55962c1dd446443da8","filename":"github/NotificationSubject.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotificationSubject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotificationSubject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FNotificationSubject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"3354a636b82a5b8d7dc09ed9e4103328bc5180e5","filename":"github/Organization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FOrganization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FOrganization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FOrganization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"8542e31df48579be5dee928702d9eb96bfe89af6","filename":"github/PaginatedList.py","status":"modified","additions":2,"deletions":6,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -53,12 +51,10 @@ def __getitem__(self, index):\n return self._Slice(self, index)\n \n def __iter__(self):\n- for element in self.__elements:\n- yield element\n+ yield from self.__elements\n while self._couldGrow():\n newElements = self._grow()\n- for element in newElements:\n- yield element\n+ yield from newElements\n \n def _isBiggerThan(self, index):\n return len(self.__elements) > index or self._couldGrow()"},{"sha":"89b9564a85a289881f605ce716a455f5dd1d16e9","filename":"github/Path.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPath.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPath.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPath.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"bd62f0dc92afc74c91ffe01b3769e430738a4000","filename":"github/Permissions.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPermissions.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPermissions.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPermissions.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6bbbbfe3e8d240a88bc4b54b57a20523efb30ea7","filename":"github/Plan.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPlan.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPlan.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPlan.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"9757f74f742da0387241950a2ecc3f8dd1709a86","filename":"github/Project.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FProject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"97b8561c66dd07b832a865747da464ac6347b100","filename":"github/ProjectCard.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectCard.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectCard.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FProjectCard.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"21e312e2cc9728e934effd7ec1376fb91009c22f","filename":"github/ProjectColumn.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectColumn.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectColumn.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FProjectColumn.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"1306f304e12e212ac26ff0827821613fadde74df","filename":"github/PullRequest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Michael Stead #"},{"sha":"597a85ad4af0180bdf8c8408028225c1c93b1026","filename":"github/PullRequest.pyi","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.pyi","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.pyi","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequest.pyi?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -61,16 +61,16 @@ class PullRequest(CompletableGithubObject):\n ) -> PullRequestComment: ...\n def create_review_request(\n self,\n- reviewers: Union[_NotSetType, str] = ...,\n- team_reviewers: Union[_NotSetType, str] = ...,\n+ reviewers: Union[_NotSetType, List[str]] = ...,\n+ team_reviewers: Union[_NotSetType, List[str]] = ...,\n ) -> None: ...\n @property\n def created_at(self) -> datetime: ...\n def delete_labels(self) -> None: ...\n def delete_review_request(\n self,\n- reviewers: Union[_NotSetType, str] = ...,\n- team_reviewers: Union[_NotSetType, str] = ...,\n+ reviewers: Union[_NotSetType, List[str]] = ...,\n+ team_reviewers: Union[_NotSetType, List[str]] = ...,\n ) -> None: ...\n @property\n def deletions(self) -> int: ..."},{"sha":"ae2b4b0e3a55ede25f3b8ef430c72882ea224eb4","filename":"github/PullRequestComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3ec124e5875baf52a0e72e3c8ce9b42c3d218ecd","filename":"github/PullRequestMergeStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestMergeStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestMergeStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestMergeStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"94ab3f3770ee3b2a8784931ef8c6efd34c4ceb8e","filename":"github/PullRequestPart.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestPart.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestPart.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestPart.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"8b217c0df1e1d8840a355a546935e04aa0839ab0","filename":"github/PullRequestReview.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestReview.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestReview.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestReview.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Aaron Levine #"},{"sha":"70b46769f7949071ede8981f50565d39283a3fc0","filename":"github/Rate.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRate.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRate.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRate.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"b40c47808eeb18b7de463d7db59bed24ce0b8e3c","filename":"github/RateLimit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRateLimit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRateLimit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRateLimit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"59089a0a6e7948d8c21b5b2d2e6701d26a8c875b","filename":"github/Reaction.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReaction.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReaction.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FReaction.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Nicolas Agustín Torres #"},{"sha":"7a0d03c64017a06082bbf0719fe65c20fed2877f","filename":"github/Referrer.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReferrer.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReferrer.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FReferrer.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"19f5e945b034bbb1f8162a8a8533f87d152b3505","filename":"github/Repository.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Christopher Gilbert #"},{"sha":"6476147858965cc86e67753bf261f7ad504695b4","filename":"github/Repository.pyi","status":"modified","additions":4,"deletions":1,"changes":5,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.pyi","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.pyi","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.pyi?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -259,6 +259,8 @@ class Repository(CompletableGithubObject):\n author: Union[InputGitAuthor, _NotSetType] = ...,\n ) -> Dict[str, Union[Commit, _NotSetType]]: ...\n @property\n+ def delete_branch_on_merge(self) -> bool: ...\n+ @property\n def deployments_url(self) -> str: ...\n @property\n def description(self) -> str: ...\n@@ -331,7 +333,7 @@ class Repository(CompletableGithubObject):\n def get_contributors(\n self, anon: Union[str, _NotSetType] = ...\n ) -> PaginatedList[NamedUser]: ...\n- def get_deployment(self, id_: int) -> Any: ...\n+ def get_deployment(self, id_: int) -> Deployment: ...\n def get_deployments(\n self,\n sha: Union[str, _NotSetType] = ...,\n@@ -351,6 +353,7 @@ class Repository(CompletableGithubObject):\n ) -> Repository: ...\n def get_git_blob(self, sha: str) -> GitBlob: ...\n def get_git_commit(self, sha: str) -> GitCommit: ...\n+ def get_git_matching_refs(self, ref: str) -> PaginatedList[GitRef]: ...\n def get_git_ref(self, ref: str) -> GitRef: ...\n def get_git_refs(self) -> PaginatedList[GitRef]: ...\n def get_git_tag(self, sha: str) -> GitTag: ..."},{"sha":"2ff72e14980bb890bc077df37317eccb28d467cd","filename":"github/RepositoryKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepositoryKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"467264e0d19cca105b8e66d1508ba9dd30e501b6","filename":"github/RepositoryPreferences.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryPreferences.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryPreferences.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepositoryPreferences.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"8842e3ed0c86cd3500572436b311fd2aa2230dfa","filename":"github/Requester.py","status":"modified","additions":5,"deletions":7,"changes":12,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Andrew Bettison #\n@@ -81,7 +79,7 @@ def read(self):\n return self.text\n \n \n-class HTTPSRequestsConnectionClass(object):\n+class HTTPSRequestsConnectionClass:\n # mimic the httplib connection object\n def __init__(\n self, host, port=None, strict=False, timeout=None, retry=None, **kwargs\n@@ -106,7 +104,7 @@ def request(self, verb, url, input, headers):\n \n def getresponse(self):\n verb = getattr(self.session, self.verb.lower())\n- url = \"%s://%s:%s%s\" % (self.protocol, self.host, self.port, self.url)\n+ url = f\"{self.protocol}://{self.host}:{self.port}{self.url}\"\n r = verb(\n url,\n headers=self.headers,\n@@ -121,7 +119,7 @@ def close(self):\n return\n \n \n-class HTTPRequestsConnectionClass(object):\n+class HTTPRequestsConnectionClass:\n # mimic the httplib connection object\n def __init__(\n self, host, port=None, strict=False, timeout=None, retry=None, **kwargs\n@@ -146,7 +144,7 @@ def request(self, verb, url, input, headers):\n \n def getresponse(self):\n verb = getattr(self.session, self.verb.lower())\n- url = \"%s://%s:%s%s\" % (self.protocol, self.host, self.port, self.url)\n+ url = f\"{self.protocol}://{self.host}:{self.port}{self.url}\"\n r = verb(\n url,\n headers=self.headers,\n@@ -513,7 +511,7 @@ def __requestRaw(self, cnx, verb, url, requestHeaders, input):\n response = cnx.getresponse()\n \n status = response.status\n- responseHeaders = dict((k.lower(), v) for k, v in response.getheaders())\n+ responseHeaders = {k.lower(): v for k, v in response.getheaders()}\n output = response.read()\n \n cnx.close()"},{"sha":"70ef469a02c74e29ad6d708ed98ed69a51016922","filename":"github/RequiredPullRequestReviews.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredPullRequestReviews.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredPullRequestReviews.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequiredPullRequestReviews.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"5dc0a4603cacb0b4f7b8ce18e02caea3ed95a62a","filename":"github/RequiredStatusChecks.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredStatusChecks.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredStatusChecks.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequiredStatusChecks.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"1d3a434dd27943d5b7ef664778e682ae9bc8c8b3","filename":"github/SelfHostedActionsRunner.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSelfHostedActionsRunner.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSelfHostedActionsRunner.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FSelfHostedActionsRunner.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\r\n-\r\n ############################ Copyrights and license ############################\r\n # #\r\n # Copyright 2020 Victor Zeng #\r"},{"sha":"88c32af21e43b486f6d09d8687f58601fda03314","filename":"github/SourceImport.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSourceImport.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSourceImport.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FSourceImport.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Hayden Fuss #"},{"sha":"fa50b803f4525cc97c40f67f69608eca9e2d2837","filename":"github/Stargazer.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStargazer.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStargazer.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStargazer.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2015 Dan Vanderkam #"},{"sha":"eb950b3cd3d427b0517bc9ff2763f0320966a3c5","filename":"github/StatsCodeFrequency.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCodeFrequency.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCodeFrequency.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsCodeFrequency.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"712232a5cba436a950390f1a332f135bd391dfaf","filename":"github/StatsCommitActivity.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCommitActivity.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCommitActivity.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsCommitActivity.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"e8d16028eb3e9a8a4d76a612f5c4956ecee5ad63","filename":"github/StatsContributor.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsContributor.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsContributor.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsContributor.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"fc41c0f510a95a7fb81c0df16f80186f7e7a4b84","filename":"github/StatsParticipation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsParticipation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsParticipation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsParticipation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"5aa30163735d1d5ad03233c0f5961e011466f07d","filename":"github/StatsPunchCard.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsPunchCard.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsPunchCard.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsPunchCard.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"591bab2b7420542942c670c038fbbf79cbb955c5","filename":"github/Tag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"d2bac9d0c1ec2da86ce9c1414627a3427226db32","filename":"github/Team.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeam.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeam.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTeam.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"62f8c4f4a46f5ebee5b43d5d6f7b73265786a22d","filename":"github/TeamDiscussion.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeamDiscussion.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeamDiscussion.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTeamDiscussion.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Adam Baratz #"},{"sha":"2607da9835b5ed04ffcb1f71f36e26e8ce03fba4","filename":"github/TimelineEvent.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTimelineEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Nick Campbell #"},{"sha":"cecaa09d7fd984ebd3596530c8229ba47e7b1703","filename":"github/TimelineEventSource.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEventSource.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEventSource.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTimelineEventSource.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Nick Campbell #"},{"sha":"d58837ab741237dc112d8a6bd6c9bf85f3f236ee","filename":"github/Topic.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTopic.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTopic.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTopic.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"3ac1dde575737fce45a0e2fc8ff2da87d720b20f","filename":"github/UserKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FUserKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FUserKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FUserKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"5f643bcc3dd97e718505e270387a950ce216009e","filename":"github/View.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FView.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FView.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FView.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"d5b7d448ff016bec167d740385f59bcedcba5bce","filename":"github/Workflow.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflow.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflow.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FWorkflow.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"3631f6e2dab7a6b8cbf761209817719b16ba86fa","filename":"github/WorkflowRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflowRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflowRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FWorkflowRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"c978fbe999cb9b0073ffebe701d1821e3b608bc1","filename":"github/__init__.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2F__init__.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2F__init__.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2F__init__.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"cac1930fe56305c0913b6f17e1841a0be1d39174","filename":"requirements.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/requirements.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/requirements.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/requirements.txt?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,5 @@\n-requests>=2.14.0,<2.25\n-pyjwt\n+requests>=2.14.0\n+pyjwt<2.0\n sphinx<3\n sphinx-rtd-theme<0.6\n Deprecated"},{"sha":"d8b29be2e07d3e44646e442ea1d60ff161658d0c","filename":"scripts/add_attribute.py","status":"modified","additions":0,"deletions":1,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Fadd_attribute.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Fadd_attribute.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/scripts%2Fadd_attribute.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,4 @@\n #!/usr/bin/env python\n-# -*- coding: utf-8 -*-\n \n ############################ Copyrights and license ############################\n # #"},{"sha":"f7c0fccd1fac061578872af6523b61b7d89d0de0","filename":"scripts/fix_headers.py","status":"modified","additions":0,"deletions":1,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Ffix_headers.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Ffix_headers.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/scripts%2Ffix_headers.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,4 @@\n #!/usr/bin/env python\n-# -*- coding: utf-8 -*-\n \n ############################ Copyrights and license ############################\n # #"},{"sha":"e67d154b15af7bbf362310adc39814e39ff06bc1","filename":"setup.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/setup.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/setup.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/setup.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,4 @@\n #!/usr/bin/env python\n-# -*- coding: utf-8 -*-\n \n ############################ Copyrights and license ############################\n # #\n@@ -45,7 +44,7 @@\n \n import setuptools\n \n-version = \"1.54\"\n+version = \"1.54.1\"\n \n \n if __name__ == \"__main__\":\n@@ -92,15 +91,14 @@\n \"Operating System :: OS Independent\",\n \"Programming Language :: Python\",\n \"Programming Language :: Python :: 3\",\n- \"Programming Language :: Python :: 3.5\",\n \"Programming Language :: Python :: 3.6\",\n \"Programming Language :: Python :: 3.7\",\n \"Programming Language :: Python :: 3.8\",\n \"Programming Language :: Python :: 3.9\",\n \"Topic :: Software Development\",\n ],\n- python_requires=\">=3.5\",\n- install_requires=[\"deprecated\", \"pyjwt\", \"requests>=2.14.0,<2.25\"],\n+ python_requires=\">=3.6\",\n+ install_requires=[\"deprecated\", \"pyjwt<2.0\", \"requests>=2.14.0\"],\n extras_require={\"integrations\": [\"cryptography\"]},\n- tests_require=[\"cryptography\", \"httpretty>=0.9.6\"],\n+ tests_require=[\"cryptography\", \"httpretty>=1.0.3\"],\n )"},{"sha":"f87e113a4fa19cb48bc60bc6b56416e5fb72a52e","filename":"test-requirements.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/test-requirements.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/test-requirements.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/test-requirements.txt?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,4 +1,4 @@\n cryptography\n-httpretty>=0.9.6\n+httpretty>=1.0.3\n pytest>=5.3\n pytest-cov>=2.8"},{"sha":"ce374d54ae35693ae76215a7bb98e9274ea18f6f","filename":"tests/ApplicationOAuth.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FApplicationOAuth.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FApplicationOAuth.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FApplicationOAuth.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Rigas Papathanasopoulos #\n@@ -37,14 +35,14 @@ def testLoginURL(self):\n sample_uri = \"https://myapp.com/some/path\"\n sample_uri_encoded = \"https%3A%2F%2Fmyapp.com%2Fsome%2Fpath\"\n self.assertEqual(\n- self.app.get_login_url(), \"{}?client_id={}\".format(BASE_URL, self.CLIENT_ID)\n+ self.app.get_login_url(), f\"{BASE_URL}?client_id={self.CLIENT_ID}\"\n )\n self.assertTrue(\n- \"redirect_uri={}\".format(sample_uri_encoded)\n+ f\"redirect_uri={sample_uri_encoded}\"\n in self.app.get_login_url(redirect_uri=sample_uri)\n )\n self.assertTrue(\n- \"client_id={}\".format(self.CLIENT_ID)\n+ f\"client_id={self.CLIENT_ID}\"\n in self.app.get_login_url(redirect_uri=sample_uri)\n )\n self.assertTrue(\n@@ -54,7 +52,7 @@ def testLoginURL(self):\n \"login=user\" in self.app.get_login_url(state=\"123abc\", login=\"user\")\n )\n self.assertTrue(\n- \"client_id={}\".format(self.CLIENT_ID)\n+ f\"client_id={self.CLIENT_ID}\"\n in self.app.get_login_url(state=\"123abc\", login=\"user\")\n )\n "},{"sha":"79e1052807622521ef84537a8eeebc61bb0af30f","filename":"tests/AuthenticatedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthenticatedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthenticatedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthenticatedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"dec6b9f39054471ac51d8ff52887efc294cad575","filename":"tests/Authentication.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthentication.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthentication.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthentication.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"2e05cb7d36c8d2b17f22012b90684c9f2d4e4cff","filename":"tests/Authorization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthorization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthorization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthorization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"4aba0284765ccf698f217ff24b67a05f34fc3f30","filename":"tests/BadAttributes.py","status":"modified","additions":143,"deletions":145,"changes":288,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBadAttributes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBadAttributes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FBadAttributes.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #\n@@ -117,149 +115,149 @@ def testIssue195(self):\n hooks,\n lambda h: h.name,\n [\n- u\"activecollab\",\n- u\"acunote\",\n- u\"agilebench\",\n- u\"agilezen\",\n- u\"amazonsns\",\n- u\"apiary\",\n- u\"apoio\",\n- u\"appharbor\",\n- u\"apropos\",\n- u\"asana\",\n- u\"backlog\",\n- u\"bamboo\",\n- u\"basecamp\",\n- u\"bcx\",\n- u\"blimp\",\n- u\"boxcar\",\n- u\"buddycloud\",\n- u\"bugherd\",\n- u\"bugly\",\n- u\"bugzilla\",\n- u\"campfire\",\n- u\"cia\",\n- u\"circleci\",\n- u\"codeclimate\",\n- u\"codeportingcsharp2java\",\n- u\"codeship\",\n- u\"coffeedocinfo\",\n- u\"conductor\",\n- u\"coop\",\n- u\"copperegg\",\n- u\"cube\",\n- u\"depending\",\n- u\"deployhq\",\n- u\"devaria\",\n- u\"docker\",\n- u\"ducksboard\",\n- u\"email\",\n- u\"firebase\",\n- u\"fisheye\",\n- u\"flowdock\",\n- u\"fogbugz\",\n- u\"freckle\",\n- u\"friendfeed\",\n- u\"gemini\",\n- u\"gemnasium\",\n- u\"geocommit\",\n- u\"getlocalization\",\n- u\"gitlive\",\n- u\"grmble\",\n- u\"grouptalent\",\n- u\"grove\",\n- u\"habitualist\",\n- u\"hakiri\",\n- u\"hall\",\n- u\"harvest\",\n- u\"hipchat\",\n- u\"hostedgraphite\",\n- u\"hubcap\",\n- u\"hubci\",\n- u\"humbug\",\n- u\"icescrum\",\n- u\"irc\",\n- u\"irker\",\n- u\"ironmq\",\n- u\"ironworker\",\n- u\"jabber\",\n- u\"jaconda\",\n- u\"jeapie\",\n- u\"jenkins\",\n- u\"jenkinsgit\",\n- u\"jira\",\n- u\"jqueryplugins\",\n- u\"kanbanery\",\n- u\"kickoff\",\n- u\"leanto\",\n- u\"lechat\",\n- u\"lighthouse\",\n- u\"lingohub\",\n- u\"loggly\",\n- u\"mantisbt\",\n- u\"masterbranch\",\n- u\"mqttpub\",\n- u\"nma\",\n- u\"nodejitsu\",\n- u\"notifo\",\n- u\"ontime\",\n- u\"pachube\",\n- u\"packagist\",\n- u\"phraseapp\",\n- u\"pivotaltracker\",\n- u\"planbox\",\n- u\"planio\",\n- u\"prowl\",\n- u\"puppetlinter\",\n- u\"pushalot\",\n- u\"pushover\",\n- u\"pythonpackages\",\n- u\"railsbp\",\n- u\"railsbrakeman\",\n- u\"rally\",\n- u\"rapidpush\",\n- u\"rationaljazzhub\",\n- u\"rationalteamconcert\",\n- u\"rdocinfo\",\n- u\"readthedocs\",\n- u\"redmine\",\n- u\"rubyforge\",\n- u\"scrumdo\",\n- u\"shiningpanda\",\n- u\"sifter\",\n- u\"simperium\",\n- u\"slatebox\",\n- u\"snowyevening\",\n- u\"socialcast\",\n- u\"softlayermessaging\",\n- u\"sourcemint\",\n- u\"splendidbacon\",\n- u\"sprintly\",\n- u\"sqsqueue\",\n- u\"stackmob\",\n- u\"statusnet\",\n- u\"talker\",\n- u\"targetprocess\",\n- u\"tddium\",\n- u\"teamcity\",\n- u\"tender\",\n- u\"tenxer\",\n- u\"testpilot\",\n- u\"toggl\",\n- u\"trac\",\n- u\"trajectory\",\n- u\"travis\",\n- u\"trello\",\n- u\"twilio\",\n- u\"twitter\",\n- u\"unfuddle\",\n- u\"web\",\n- u\"weblate\",\n- u\"webtranslateit\",\n- u\"yammer\",\n- u\"youtrack\",\n- u\"zendesk\",\n- u\"zohoprojects\",\n+ \"activecollab\",\n+ \"acunote\",\n+ \"agilebench\",\n+ \"agilezen\",\n+ \"amazonsns\",\n+ \"apiary\",\n+ \"apoio\",\n+ \"appharbor\",\n+ \"apropos\",\n+ \"asana\",\n+ \"backlog\",\n+ \"bamboo\",\n+ \"basecamp\",\n+ \"bcx\",\n+ \"blimp\",\n+ \"boxcar\",\n+ \"buddycloud\",\n+ \"bugherd\",\n+ \"bugly\",\n+ \"bugzilla\",\n+ \"campfire\",\n+ \"cia\",\n+ \"circleci\",\n+ \"codeclimate\",\n+ \"codeportingcsharp2java\",\n+ \"codeship\",\n+ \"coffeedocinfo\",\n+ \"conductor\",\n+ \"coop\",\n+ \"copperegg\",\n+ \"cube\",\n+ \"depending\",\n+ \"deployhq\",\n+ \"devaria\",\n+ \"docker\",\n+ \"ducksboard\",\n+ \"email\",\n+ \"firebase\",\n+ \"fisheye\",\n+ \"flowdock\",\n+ \"fogbugz\",\n+ \"freckle\",\n+ \"friendfeed\",\n+ \"gemini\",\n+ \"gemnasium\",\n+ \"geocommit\",\n+ \"getlocalization\",\n+ \"gitlive\",\n+ \"grmble\",\n+ \"grouptalent\",\n+ \"grove\",\n+ \"habitualist\",\n+ \"hakiri\",\n+ \"hall\",\n+ \"harvest\",\n+ \"hipchat\",\n+ \"hostedgraphite\",\n+ \"hubcap\",\n+ \"hubci\",\n+ \"humbug\",\n+ \"icescrum\",\n+ \"irc\",\n+ \"irker\",\n+ \"ironmq\",\n+ \"ironworker\",\n+ \"jabber\",\n+ \"jaconda\",\n+ \"jeapie\",\n+ \"jenkins\",\n+ \"jenkinsgit\",\n+ \"jira\",\n+ \"jqueryplugins\",\n+ \"kanbanery\",\n+ \"kickoff\",\n+ \"leanto\",\n+ \"lechat\",\n+ \"lighthouse\",\n+ \"lingohub\",\n+ \"loggly\",\n+ \"mantisbt\",\n+ \"masterbranch\",\n+ \"mqttpub\",\n+ \"nma\",\n+ \"nodejitsu\",\n+ \"notifo\",\n+ \"ontime\",\n+ \"pachube\",\n+ \"packagist\",\n+ \"phraseapp\",\n+ \"pivotaltracker\",\n+ \"planbox\",\n+ \"planio\",\n+ \"prowl\",\n+ \"puppetlinter\",\n+ \"pushalot\",\n+ \"pushover\",\n+ \"pythonpackages\",\n+ \"railsbp\",\n+ \"railsbrakeman\",\n+ \"rally\",\n+ \"rapidpush\",\n+ \"rationaljazzhub\",\n+ \"rationalteamconcert\",\n+ \"rdocinfo\",\n+ \"readthedocs\",\n+ \"redmine\",\n+ \"rubyforge\",\n+ \"scrumdo\",\n+ \"shiningpanda\",\n+ \"sifter\",\n+ \"simperium\",\n+ \"slatebox\",\n+ \"snowyevening\",\n+ \"socialcast\",\n+ \"softlayermessaging\",\n+ \"sourcemint\",\n+ \"splendidbacon\",\n+ \"sprintly\",\n+ \"sqsqueue\",\n+ \"stackmob\",\n+ \"statusnet\",\n+ \"talker\",\n+ \"targetprocess\",\n+ \"tddium\",\n+ \"teamcity\",\n+ \"tender\",\n+ \"tenxer\",\n+ \"testpilot\",\n+ \"toggl\",\n+ \"trac\",\n+ \"trajectory\",\n+ \"travis\",\n+ \"trello\",\n+ \"twilio\",\n+ \"twitter\",\n+ \"unfuddle\",\n+ \"web\",\n+ \"weblate\",\n+ \"webtranslateit\",\n+ \"yammer\",\n+ \"youtrack\",\n+ \"zendesk\",\n+ \"zohoprojects\",\n ],\n )\n for hook in hooks:"},{"sha":"876d50fe8c3ea4749d8f547d06e055200fc5caff","filename":"tests/Branch.py","status":"modified","additions":18,"deletions":20,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranch.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranch.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FBranch.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -87,10 +85,10 @@ def testEditProtectionDismissalUsersWithUserOwnedBranch(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n- u\"message\": u\"Validation Failed\",\n- u\"errors\": [\n- u\"Only organization repositories can have users and team restrictions\"\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n+ \"message\": \"Validation Failed\",\n+ \"errors\": [\n+ \"Only organization repositories can have users and team restrictions\"\n ],\n },\n )\n@@ -104,10 +102,10 @@ def testEditProtectionPushRestrictionsWithUserOwnedBranch(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n- u\"message\": u\"Validation Failed\",\n- u\"errors\": [\n- u\"Only organization repositories can have users and team restrictions\"\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n+ \"message\": \"Validation Failed\",\n+ \"errors\": [\n+ \"Only organization repositories can have users and team restrictions\"\n ],\n },\n )\n@@ -147,8 +145,8 @@ def testRemoveProtection(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#get-branch-protection\",\n- u\"message\": u\"Branch not protected\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#get-branch-protection\",\n+ \"message\": \"Branch not protected\",\n },\n )\n \n@@ -166,8 +164,8 @@ def testRemoveRequiredStatusChecks(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch\",\n- u\"message\": u\"Required status checks not enabled\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch\",\n+ \"message\": \"Required status checks not enabled\",\n },\n )\n \n@@ -193,8 +191,8 @@ def testEditRequiredPullRequestReviewsWithTooLargeApprovingReviewCount(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n- u\"message\": u\"Invalid request.\\n\\n9 must be less than or equal to 6.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n+ \"message\": \"Invalid request.\\n\\n9 must be less than or equal to 6.\",\n },\n )\n \n@@ -207,8 +205,8 @@ def testEditRequiredPullRequestReviewsWithUserBranchAndDismissalUsers(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n- u\"message\": u\"Dismissal restrictions are supported only for repositories owned by an organization.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n+ \"message\": \"Dismissal restrictions are supported only for repositories owned by an organization.\",\n },\n )\n \n@@ -295,8 +293,8 @@ def testRemovePushRestrictions(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#list-team-restrictions-of-protected-branch\",\n- u\"message\": u\"Push restrictions not enabled\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#list-team-restrictions-of-protected-branch\",\n+ \"message\": \"Push restrictions not enabled\",\n },\n )\n "},{"sha":"65a75d21e85338d8a7d15688bbeed469eaf1756f","filename":"tests/BranchProtection.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranchProtection.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranchProtection.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FBranchProtection.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"818371b5ab3f8e3b287e09dda55480a4ad2c83c7","filename":"tests/CheckRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCheckRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"9dafaeb69d5fbf06172bf06bcc81ff7461e62943","filename":"tests/CheckSuite.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckSuite.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckSuite.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCheckSuite.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"beb3d4885b8abb39b0f533b638e67fb478fac71b","filename":"tests/Commit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c51588e94135f1015d55dd84828b091e42fa423a","filename":"tests/CommitCombinedStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitCombinedStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitCombinedStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommitCombinedStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Jannis Gebauer #"},{"sha":"8f1a58fb4178c0de6ac540876cc0da5263168ef2","filename":"tests/CommitComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommitComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b94cf424256de155ba8b44a7b5a81a4692cf61de","filename":"tests/CommitStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommitStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a29eefdcf85e69f11fcd3166e72201316db0cf81","filename":"tests/ConditionalRequestUpdate.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConditionalRequestUpdate.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConditionalRequestUpdate.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FConditionalRequestUpdate.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"a0869d3e4d6a43b07569fd9ff90a898f29e55eb9","filename":"tests/Connection.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConnection.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConnection.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FConnection.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Adam Baratz #\n@@ -43,16 +41,16 @@\n \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\n{\\\"body\\\":\\\"BODY TEXT\\\"}\\n\\n\",\n ),\n (\n- u'{\"body\":\"BODY\\xa0TEXT\"}',\n- u\"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\n{\\\"body\\\":\\\"BODY\\xa0TEXT\\\"}\\n\\n\",\n+ '{\"body\":\"BODY\\xa0TEXT\"}',\n+ \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\n{\\\"body\\\":\\\"BODY\\xa0TEXT\\\"}\\n\\n\",\n ),\n (\n \"BODY TEXT\",\n \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\nBODY TEXT\\n\\n\",\n ),\n (\n- u\"BODY\\xa0TEXT\",\n- u\"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\nBODY\\xa0TEXT\\n\\n\",\n+ \"BODY\\xa0TEXT\",\n+ \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\nBODY\\xa0TEXT\\n\\n\",\n ),\n ],\n )"},{"sha":"1b3c61fba810c9f0b791fb2e56bbce50d75052bd","filename":"tests/ContentFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FContentFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FContentFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FContentFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b0c2fbcb4a800e2f5c4dda05415238e5ef7a04f5","filename":"tests/Deployment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeployment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeployment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FDeployment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"0b4a2266802318f92759749d99340dc208bf09d4","filename":"tests/DeploymentStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeploymentStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeploymentStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FDeploymentStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Colby Gallup #"},{"sha":"d1c3e752702a9c9441cd67426a28ea3a66b42b38","filename":"tests/Download.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDownload.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDownload.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FDownload.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b0a5ee4d9d4a1cf89daa4b840b4efd2e8d16a7ee","filename":"tests/Enterprise.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEnterprise.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEnterprise.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FEnterprise.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"ed2d01b7f8886407ec701fe4485cb3fda4edbb83","filename":"tests/Equality.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEquality.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEquality.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FEquality.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"1be98f42d4b631855b3784e2933b529d14d76d49","filename":"tests/Event.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6b9edc5ee482f23e00e5ef5533584356d942d410","filename":"tests/Exceptions.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExceptions.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExceptions.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FExceptions.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6a8022b582c94f83eb0cd0caa6b8f3b5da630d9a","filename":"tests/ExposeAllAttributes.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExposeAllAttributes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExposeAllAttributes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FExposeAllAttributes.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"fce12927e86852ac0dc8a6289d5bfdd071d5ba39","filename":"tests/Framework.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FFramework.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FFramework.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FFramework.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -132,7 +130,7 @@ def close(self):\n return self.__cnx.close()\n \n def __writeLine(self, line):\n- self.__file.write(str(line) + u\"\\n\")\n+ self.__file.write(str(line) + \"\\n\")\n \n \n class RecordingHttpConnection(RecordingConnection):\n@@ -314,7 +312,7 @@ def __openFile(self, mode):\n if fileName != self.__fileName:\n self.__closeReplayFileIfNeeded()\n self.__fileName = fileName\n- self.__file = io.open(self.__fileName, mode, encoding=\"utf-8\")\n+ self.__file = open(self.__fileName, mode, encoding=\"utf-8\")\n return self.__file\n \n def __closeReplayFileIfNeeded(self):"},{"sha":"a2127d3a07292ce753dac73b27fdb6e9afebbe0e","filename":"tests/Gist.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGist.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGist.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGist.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"0853fc2f6ddcff50e5a9ad667bba9452f4b3b9eb","filename":"tests/GistComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGistComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGistComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGistComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"881378fa7df621a6a891c54291e4df752ee4b1b6","filename":"tests/GitBlob.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitBlob.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitBlob.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitBlob.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"665645374fd9ddc528d2b104b2a26eca927eeb0c","filename":"tests/GitCommit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"acb8e7cd56054834792baef1809bdc96ce758c0e","filename":"tests/GitMembership.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitMembership.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitMembership.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitMembership.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"726d9cab95a3177ee4c0e21a10817e524220c3cd","filename":"tests/GitRef.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRef.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRef.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitRef.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6e4cc5a8afdfb0d427afc31132c1926cdeb68d94","filename":"tests/GitRelease.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRelease.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRelease.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitRelease.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2015 Ed Holland #\n@@ -141,7 +139,7 @@ def testAttributes(self):\n self.assertEqual(release.author.type, \"User\")\n self.assertEqual(\n release.html_url,\n- \"https://github.com/{}/{}/releases/tag/{}\".format(user, repo_name, tag),\n+ f\"https://github.com/{user}/{repo_name}/releases/tag/{tag}\",\n )\n self.assertEqual(release.created_at, create_date)\n self.assertEqual(release.published_at, publish_date)"},{"sha":"d827282fd3385b304b6fa6d9afa1f0659e81f3a8","filename":"tests/GitTag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"69718f2ed77322800f9982f1572d9b89eab48d0f","filename":"tests/GitTree.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTree.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTree.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitTree.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"63ea3209955486970f2e64ff248d7acfacc37f7f","filename":"tests/GithubApp.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubApp.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"272f50db45fc0011193b978b55cdda588485fdde","filename":"tests/GithubIntegration.py","status":"modified","additions":26,"deletions":26,"changes":52,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubIntegration.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubIntegration.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubIntegration.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -51,7 +51,7 @@ def setUp(self):\n self.origin_time = sys.modules[\"time\"].time\n sys.modules[\"time\"].time = lambda: 1550055331.7435968\n \n- class Mock(object):\n+ class Mock:\n def __init__(self):\n self.args = tuple()\n self.kwargs = dict()\n@@ -66,8 +66,8 @@ def json(self):\n @property\n def text(self):\n return (\n- u'{\"token\": \"v1.ce63424bc55028318325caac4f4c3a5378ca0038\",'\n- u'\"expires_at\": \"2019-02-13T11:10:38Z\"}'\n+ '{\"token\": \"v1.ce63424bc55028318325caac4f4c3a5378ca0038\",'\n+ '\"expires_at\": \"2019-02-13T11:10:38Z\"}'\n )\n \n def __call__(self, *args, **kwargs):\n@@ -79,7 +79,7 @@ def __call__(self, *args, **kwargs):\n self.mock = Mock()\n sys.modules[\"requests\"].post = self.mock\n \n- class GetMock(object):\n+ class GetMock:\n def __init__(self):\n self.args = tuple()\n self.kwargs = dict()\n@@ -95,28 +95,28 @@ def json(self):\n @property\n def text(self):\n return (\n- u'{\"id\":111111,\"account\":{\"login\":\"foo\",\"id\":11111111,'\n- u'\"node_id\":\"foobar\",'\n- u'\"avatar_url\":\"https://avatars3.githubusercontent.com/u/11111111?v=4\",'\n- u'\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/foo\",'\n- u'\"html_url\":\"https://github.com/foo\",'\n- u'\"followers_url\":\"https://api.github.com/users/foo/followers\",'\n- u'\"following_url\":\"https://api.github.com/users/foo/following{/other_user}\",'\n- u'\"gists_url\":\"https://api.github.com/users/foo/gists{/gist_id}\",'\n- u'\"starred_url\":\"https://api.github.com/users/foo/starred{/owner}{/repo}\",'\n- u'\"subscriptions_url\":\"https://api.github.com/users/foo/subscriptions\",'\n- u'\"organizations_url\":\"https://api.github.com/users/foo/orgs\",'\n- u'\"repos_url\":\"https://api.github.com/users/foo/repos\",'\n- u'\"events_url\":\"https://api.github.com/users/foo/events{/privacy}\",'\n- u'\"received_events_url\":\"https://api.github.com/users/foo/received_events\",'\n- u'\"type\":\"Organization\",\"site_admin\":false},\"repository_selection\":\"all\",'\n- u'\"access_tokens_url\":\"https://api.github.com/app/installations/111111/access_tokens\",'\n- u'\"repositories_url\":\"https://api.github.com/installation/repositories\",'\n- u'\"html_url\":\"https://github.com/organizations/foo/settings/installations/111111\",'\n- u'\"app_id\":11111,\"target_id\":11111111,\"target_type\":\"Organization\",'\n- u'\"permissions\":{\"issues\":\"write\",\"pull_requests\":\"write\",\"statuses\":\"write\",\"contents\":\"read\",'\n- u'\"metadata\":\"read\"},\"events\":[\"pull_request\",\"release\"],\"created_at\":\"2019-04-17T16:10:37.000Z\",'\n- u'\"updated_at\":\"2019-05-03T06:27:48.000Z\",\"single_file_name\":null}'\n+ '{\"id\":111111,\"account\":{\"login\":\"foo\",\"id\":11111111,'\n+ '\"node_id\":\"foobar\",'\n+ '\"avatar_url\":\"https://avatars3.githubusercontent.com/u/11111111?v=4\",'\n+ '\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/foo\",'\n+ '\"html_url\":\"https://github.com/foo\",'\n+ '\"followers_url\":\"https://api.github.com/users/foo/followers\",'\n+ '\"following_url\":\"https://api.github.com/users/foo/following{/other_user}\",'\n+ '\"gists_url\":\"https://api.github.com/users/foo/gists{/gist_id}\",'\n+ '\"starred_url\":\"https://api.github.com/users/foo/starred{/owner}{/repo}\",'\n+ '\"subscriptions_url\":\"https://api.github.com/users/foo/subscriptions\",'\n+ '\"organizations_url\":\"https://api.github.com/users/foo/orgs\",'\n+ '\"repos_url\":\"https://api.github.com/users/foo/repos\",'\n+ '\"events_url\":\"https://api.github.com/users/foo/events{/privacy}\",'\n+ '\"received_events_url\":\"https://api.github.com/users/foo/received_events\",'\n+ '\"type\":\"Organization\",\"site_admin\":false},\"repository_selection\":\"all\",'\n+ '\"access_tokens_url\":\"https://api.github.com/app/installations/111111/access_tokens\",'\n+ '\"repositories_url\":\"https://api.github.com/installation/repositories\",'\n+ '\"html_url\":\"https://github.com/organizations/foo/settings/installations/111111\",'\n+ '\"app_id\":11111,\"target_id\":11111111,\"target_type\":\"Organization\",'\n+ '\"permissions\":{\"issues\":\"write\",\"pull_requests\":\"write\",\"statuses\":\"write\",\"contents\":\"read\",'\n+ '\"metadata\":\"read\"},\"events\":[\"pull_request\",\"release\"],\"created_at\":\"2019-04-17T16:10:37.000Z\",'\n+ '\"updated_at\":\"2019-05-03T06:27:48.000Z\",\"single_file_name\":null}'\n )\n \n def __call__(self, *args, **kwargs):"},{"sha":"3e7027518c115761e9207dafa316ce1b2c7b68bc","filename":"tests/Github_.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithub_.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithub_.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithub_.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"86c0257ae135e52ba4372f95077301f16d84a63d","filename":"tests/Hook.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FHook.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FHook.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FHook.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"bb2014b33325a5ff32889967f5811519ebcfa712","filename":"tests/Issue.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6a4046aa4ffd6b51841f6a996ff45430c5a1fc5e","filename":"tests/Issue131.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue131.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue131.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue131.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"78a24452cf7eaee05881c14f4c499cdf7a29baed","filename":"tests/Issue133.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue133.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue133.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue133.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"13d971c26391346dc77bee50d471fcf8aea8d73b","filename":"tests/Issue134.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue134.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue134.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue134.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"bcc44da7bc3955ab5ead5974714787ecc504a613","filename":"tests/Issue139.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue139.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue139.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue139.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"e5433f4339514de4a25a1516b0e6da58ed6143e1","filename":"tests/Issue140.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue140.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue140.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue140.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"4f5f8fb244fa258f7c65a046c1812967fbf3e654","filename":"tests/Issue142.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue142.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue142.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue142.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"dfe55a44fa37ef82a051c70d71d9a6a37729e750","filename":"tests/Issue158.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue158.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue158.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue158.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"11b57c996ea1a46d149a9eca7b6eb9de5286f5fb","filename":"tests/Issue174.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue174.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue174.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue174.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"9aea863e1e68e1b683b1167f7af70d23be8a7698","filename":"tests/Issue214.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue214.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue214.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue214.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 David Farr #"},{"sha":"988467167f4739f70bb90f14bfc03d1c776ebf8b","filename":"tests/Issue216.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue216.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue216.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue216.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"6b46c2c71f328e160d535f513f415340f9c80c4f","filename":"tests/Issue278.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue278.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue278.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue278.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2014 Vincent Jacques #"},{"sha":"a260fe521bb1b80be5e4ee8877e3f1f67340e3dd","filename":"tests/Issue33.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue33.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue33.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue33.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"105351074187707d09ad4da0d7c6acdcad5bbe39","filename":"tests/Issue494.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue494.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue494.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue494.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Sam Corbett #\n@@ -34,7 +32,7 @@ def setUp(self):\n \n def testRepr(self):\n expected = (\n- u'PullRequest(title=\"Change SetHostnameCustomizer to check if '\n- u'/etc/sysconfig/network exist…\", number=465)'\n+ 'PullRequest(title=\"Change SetHostnameCustomizer to check if '\n+ '/etc/sysconfig/network exist…\", number=465)'\n )\n self.assertEqual(self.pull.__repr__(), expected)"},{"sha":"81c7dd6f53b588772f4bd0b87a12d4cb49653c70","filename":"tests/Issue50.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue50.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue50.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue50.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"d93ca051a950887e12c2d0703174c2335e48dd1b","filename":"tests/Issue54.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue54.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue54.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue54.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f30a738c014c204ca6fce1374a5552b66eb80c6e","filename":"tests/Issue572.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue572.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue572.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue572.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Shinichi TAMURA #"},{"sha":"11fcd49f034a24c83bfa7599dfcd15da679e725c","filename":"tests/Issue80.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue80.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue80.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue80.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"5f31412be0e1c36fa315755a3b9a8f3491e78376","filename":"tests/Issue823.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue823.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue823.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue823.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"d78e755dc9eb828ba1b8d118a23781804daa4964","filename":"tests/Issue87.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue87.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue87.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue87.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a08e0c9dd2c5fcb4cc9c31d6540d88972095e2d5","filename":"tests/Issue937.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue937.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue937.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue937.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Vinay Hegde #"},{"sha":"59f812b656cc41437522df6ea411b06bd368746b","filename":"tests/Issue945.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue945.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue945.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue945.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Kelvin Wong (https://github.com/netsgnut) #"},{"sha":"f517a712edbb4da23fc2339586596e72eaf854ac","filename":"tests/IssueComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssueComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"837d7bb00cd21f352e43d0e7fc018e6fb6144d8a","filename":"tests/IssueEvent.py","status":"modified","additions":5,"deletions":7,"changes":12,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssueEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -420,8 +418,8 @@ def testEvent_renamed_Attributes(self):\n self.assertEqual(\n self.event_renamed.rename,\n {\n- u\"to\": u\"Adding new attributes to IssueEvent\",\n- u\"from\": u\"Adding new attributes to IssueEvent Object (DO NOT MERGE - SEE NOTES)\",\n+ \"to\": \"Adding new attributes to IssueEvent\",\n+ \"from\": \"Adding new attributes to IssueEvent Object (DO NOT MERGE - SEE NOTES)\",\n },\n )\n self.assertEqual(self.event_renamed.dismissed_review, None)\n@@ -663,9 +661,9 @@ def testEvent_review_dismissed_Attributes(self):\n self.assertEqual(\n self.event_review_dismissed.dismissed_review,\n {\n- u\"dismissal_message\": u\"dismiss\",\n- u\"state\": u\"changes_requested\",\n- u\"review_id\": 145431295,\n+ \"dismissal_message\": \"dismiss\",\n+ \"state\": \"changes_requested\",\n+ \"review_id\": 145431295,\n },\n )\n self.assertEqual(self.event_review_dismissed.lock_reason, None)"},{"sha":"1006554425bd118f8fb263a950fa8e3f712c0d47","filename":"tests/Label.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLabel.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLabel.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FLabel.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"57a956c69cd305e83006f7bd92adcd592e87577a","filename":"tests/License.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLicense.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLicense.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FLicense.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Wan Liuyang #"},{"sha":"3f277f618e36eed68bebae6ae8154a75bbef1ee0","filename":"tests/Logging_.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLogging_.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLogging_.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FLogging_.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -62,7 +60,7 @@ def debug(\n output,\n ):\n self.verb = verb\n- self.url = \"%s://%s%s\" % (scheme, hostname, fragment)\n+ self.url = f\"{scheme}://{hostname}{fragment}\"\n self.requestHeaders = requestHeaders\n self.input = input_\n self.status = status"},{"sha":"bc19651f45f777ab44b63f9bcea1538ed8dbd367","filename":"tests/Markdown.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMarkdown.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMarkdown.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FMarkdown.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f503a6d275c244fe81dab39c63d8e6d9ab970bd8","filename":"tests/Migration.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMigration.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMigration.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FMigration.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"82da26894cacdee6beaea46cf151c0fed1ea9a25","filename":"tests/Milestone.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMilestone.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMilestone.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FMilestone.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"42dba7bcc3a664666e86de3e9bef6022ad1db137","filename":"tests/NamedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FNamedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"bd7804dcfc555efb945760f0e236b2638423f986","filename":"tests/NamedUser1430.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser1430.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser1430.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FNamedUser1430.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Anuj Bansal #"},{"sha":"44f937f2335c0cfd2b8c8f99ff7544f9e099c9f5","filename":"tests/Notification.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNotification.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNotification.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FNotification.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"de59a52383750e66175c213e542a7aa8fbea711f","filename":"tests/Organization.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FOrganization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -389,8 +387,8 @@ def testInviteUserAsNonOwner(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/orgs/members/#create-organization-invitation\",\n- u\"message\": u\"You must be an admin to create an invitation to an organization.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/orgs/members/#create-organization-invitation\",\n+ \"message\": \"You must be an admin to create an invitation to an organization.\",\n },\n )\n "},{"sha":"55bea2436e4b3e2a53950c0ed7263ffe4e9c00b4","filename":"tests/Organization1437.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization1437.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization1437.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FOrganization1437.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Anuj Bansal #"},{"sha":"5977198f413ead1f4cba0c76cbf428702c16f67a","filename":"tests/OrganizationHasInMembers.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganizationHasInMembers.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganizationHasInMembers.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FOrganizationHasInMembers.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Matthew Neal #"},{"sha":"ae06e90257846a448d228f98660a6a5f5e291b38","filename":"tests/PaginatedList.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPaginatedList.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"e5e45ae35d033ca0623c38f1062193cc214b20d8","filename":"tests/Persistence.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPersistence.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPersistence.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPersistence.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"489e0846fe7fe45a2e387d0886a20f53b309c1c6","filename":"tests/Project.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FProject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n # ########################## Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"63ba64e1f02c2c0e6c2998b992841948be6a30d3","filename":"tests/Project1434.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject1434.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject1434.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FProject1434.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n # ########################## Copyrights and license ############################\n # #\n # Copyright 2020 Anuj Bansal #"},{"sha":"7df02fa58a5cad870c959a9244844ef128281d52","filename":"tests/ProjectColumn.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProjectColumn.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProjectColumn.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FProjectColumn.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n # ########################## Copyrights and license ############################\n # #\n # This file is part of PyGithub. #"},{"sha":"a52dd3ca526d18b606ce2853d73a4f29d54f18be","filename":"tests/PullRequest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3570500567dee9a96a819028731a33b63d12d7be","filename":"tests/PullRequest1168.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1168.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1168.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1168.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Olof-Joachim Frahm #"},{"sha":"dd7730d38cc7680148142c6126d2dabe2af2b5b0","filename":"tests/PullRequest1169.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1169.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1169.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1169.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Olof-Joachim Frahm #"},{"sha":"21a698368d0a49174e5e311da4b4a983bfcac5f0","filename":"tests/PullRequest1375.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1375.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1375.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1375.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Olof-Joachim Frahm #"},{"sha":"29006b8c4dbdca6ae7de5b53ed00de68eed2e9d7","filename":"tests/PullRequest1682.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1682.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1682.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1682.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\r\n-\r\n ############################ Copyrights and license ############################\r\n # #\r\n # Copyright 2020 Victor Zeng #\r"},{"sha":"2c9bb454061201e18d28a0f840533c17fa2f70d8","filename":"tests/PullRequestComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequestComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"025af8dbc5a88c682a4bfd5132cae6fc824dfa10","filename":"tests/PullRequestFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequestFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a2e317cc462a0d3277607ffd0a8337fcf576fcc6","filename":"tests/PullRequestReview.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestReview.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestReview.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequestReview.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Aaron Levine #"},{"sha":"d8bd7a3b4ed1a87993cd6ff24ac36e1b3f4a9ab9","filename":"tests/RateLimiting.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRateLimiting.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRateLimiting.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRateLimiting.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"963231b1fd0f37132fe7768db1ec47dad360b502","filename":"tests/RawData.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRawData.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRawData.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRawData.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"a9aa619a04c960ac6fa9eaf0e906eeb9a1c6b790","filename":"tests/Reaction.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReaction.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReaction.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReaction.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Nicolas Agustín Torres #"},{"sha":"d0b8af387482b241940e6fcfcf4b0b1089c6bc1a","filename":"tests/ReleaseAsset.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReleaseAsset.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReleaseAsset.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReleaseAsset.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Chris McBride #"},{"sha":"88e6aa8d43fe4d51e18c48e809275933451cf9da","filename":"tests/Repository.py","status":"modified","additions":11,"deletions":13,"changes":24,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRepository.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -473,8 +471,8 @@ def testCollaboratorPermissionNoPushAccess(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level\",\n- u\"message\": u\"Must have push access to view collaborator permission.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level\",\n+ \"message\": \"Must have push access to view collaborator permission.\",\n },\n )\n \n@@ -1094,12 +1092,12 @@ def testGetStargazersWithDates(self):\n stargazers,\n lambda stargazer: (stargazer.starred_at, stargazer.user.login),\n [\n- (datetime.datetime(2014, 8, 13, 19, 22, 5), u\"sAlexander\"),\n- (datetime.datetime(2014, 10, 15, 5, 2, 30), u\"ThomasG77\"),\n- (datetime.datetime(2015, 4, 14, 15, 22, 40), u\"therusek\"),\n- (datetime.datetime(2015, 4, 29, 0, 9, 40), u\"athomann\"),\n- (datetime.datetime(2015, 4, 29, 14, 26, 46), u\"jcapron\"),\n- (datetime.datetime(2015, 5, 9, 19, 14, 45), u\"JoePython1\"),\n+ (datetime.datetime(2014, 8, 13, 19, 22, 5), \"sAlexander\"),\n+ (datetime.datetime(2014, 10, 15, 5, 2, 30), \"ThomasG77\"),\n+ (datetime.datetime(2015, 4, 14, 15, 22, 40), \"therusek\"),\n+ (datetime.datetime(2015, 4, 29, 0, 9, 40), \"athomann\"),\n+ (datetime.datetime(2015, 4, 29, 14, 26, 46), \"jcapron\"),\n+ (datetime.datetime(2015, 5, 9, 19, 14, 45), \"JoePython1\"),\n ],\n )\n self.assertEqual(repr(stargazers[0]), 'Stargazer(user=\"sAlexander\")')\n@@ -1248,7 +1246,7 @@ def testGetDeployments(self):\n \n def testCreateFile(self):\n newFile = \"doc/testCreateUpdateDeleteFile.md\"\n- content = \"Hello world\".encode()\n+ content = b\"Hello world\"\n author = github.InputGitAuthor(\n \"Enix Yu\", \"enix223@163.com\", \"2016-01-15T16:13:30+12:00\"\n )\n@@ -1666,7 +1664,7 @@ def testGetLicense(self):\n \n def testGetTopics(self):\n topic_list = self.repo.get_topics()\n- topic = u\"github\"\n+ topic = \"github\"\n self.assertIn(topic, topic_list)\n \n def testReplaceTopics(self):\n@@ -1691,7 +1689,7 @@ class LazyRepository(Framework.TestCase):\n def setUp(self):\n super().setUp()\n self.user = self.g.get_user()\n- self.repository_name = \"%s/%s\" % (self.user.login, \"PyGithub\")\n+ self.repository_name = \"{}/{}\".format(self.user.login, \"PyGithub\")\n \n def getLazyRepository(self):\n return self.g.get_repo(self.repository_name, lazy=True)"},{"sha":"4e290ab5d901a44e6dfead8253d02aeb871376ed","filename":"tests/RepositoryKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepositoryKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepositoryKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRepositoryKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f1c3d2d0af1f013b265408aed52ed8ecd1ec81dd","filename":"tests/RequiredPullRequestReviews.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredPullRequestReviews.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredPullRequestReviews.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRequiredPullRequestReviews.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"882c57c55a0fb838921448798c49261b42d5c118","filename":"tests/RequiredStatusChecks.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredStatusChecks.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredStatusChecks.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRequiredStatusChecks.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"940d405848b2609feee66e507956aa828120d423","filename":"tests/Retry.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRetry.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRetry.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRetry.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"f7e2ffe175a990f0d5b6c24981c10e6993c5bcbf","filename":"tests/Search.py","status":"modified","additions":115,"deletions":117,"changes":232,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSearch.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSearch.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FSearch.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2014 Vincent Jacques #\n@@ -43,41 +41,41 @@ def testPaginateSearchUsers(self):\n users,\n lambda u: u.login,\n [\n- u\"cloudhead\",\n- u\"felixge\",\n- u\"sferik\",\n- u\"rkh\",\n- u\"jezdez\",\n- u\"janl\",\n- u\"marijnh\",\n- u\"nikic\",\n- u\"igorw\",\n- u\"froschi\",\n- u\"svenfuchs\",\n- u\"omz\",\n- u\"chad\",\n- u\"bergie\",\n- u\"roidrage\",\n- u\"pcalcado\",\n- u\"durran\",\n- u\"hukl\",\n- u\"mttkay\",\n- u\"aFarkas\",\n- u\"ole\",\n- u\"hagenburger\",\n- u\"jberkel\",\n- u\"naderman\",\n- u\"joshk\",\n- u\"pudo\",\n- u\"robb\",\n- u\"josephwilk\",\n- u\"hanshuebner\",\n- u\"txus\",\n- u\"paulasmuth\",\n- u\"splitbrain\",\n- u\"langalex\",\n- u\"bendiken\",\n- u\"stefanw\",\n+ \"cloudhead\",\n+ \"felixge\",\n+ \"sferik\",\n+ \"rkh\",\n+ \"jezdez\",\n+ \"janl\",\n+ \"marijnh\",\n+ \"nikic\",\n+ \"igorw\",\n+ \"froschi\",\n+ \"svenfuchs\",\n+ \"omz\",\n+ \"chad\",\n+ \"bergie\",\n+ \"roidrage\",\n+ \"pcalcado\",\n+ \"durran\",\n+ \"hukl\",\n+ \"mttkay\",\n+ \"aFarkas\",\n+ \"ole\",\n+ \"hagenburger\",\n+ \"jberkel\",\n+ \"naderman\",\n+ \"joshk\",\n+ \"pudo\",\n+ \"robb\",\n+ \"josephwilk\",\n+ \"hanshuebner\",\n+ \"txus\",\n+ \"paulasmuth\",\n+ \"splitbrain\",\n+ \"langalex\",\n+ \"bendiken\",\n+ \"stefanw\",\n ],\n )\n self.assertEqual(users.totalCount, 6038)\n@@ -87,36 +85,36 @@ def testGetPageOnSearchUsers(self):\n self.assertEqual(\n [u.login for u in users.get_page(7)],\n [\n- u\"ursachec\",\n- u\"bitboxer\",\n- u\"fs111\",\n- u\"michenriksen\",\n- u\"witsch\",\n- u\"booo\",\n- u\"mortice\",\n- u\"r0man\",\n- u\"MikeBild\",\n- u\"mhagger\",\n- u\"bkw\",\n- u\"fwbrasil\",\n- u\"mschneider\",\n- u\"lydiapintscher\",\n- u\"asksven\",\n- u\"iamtimm\",\n- u\"sneak\",\n- u\"kr1sp1n\",\n- u\"Feh\",\n- u\"GordonLesti\",\n- u\"annismckenzie\",\n- u\"eskimoblood\",\n- u\"tsujigiri\",\n- u\"riethmayer\",\n- u\"lauritzthamsen\",\n- u\"scotchi\",\n- u\"peritor\",\n- u\"toto\",\n- u\"hwaxxer\",\n- u\"lukaszklis\",\n+ \"ursachec\",\n+ \"bitboxer\",\n+ \"fs111\",\n+ \"michenriksen\",\n+ \"witsch\",\n+ \"booo\",\n+ \"mortice\",\n+ \"r0man\",\n+ \"MikeBild\",\n+ \"mhagger\",\n+ \"bkw\",\n+ \"fwbrasil\",\n+ \"mschneider\",\n+ \"lydiapintscher\",\n+ \"asksven\",\n+ \"iamtimm\",\n+ \"sneak\",\n+ \"kr1sp1n\",\n+ \"Feh\",\n+ \"GordonLesti\",\n+ \"annismckenzie\",\n+ \"eskimoblood\",\n+ \"tsujigiri\",\n+ \"riethmayer\",\n+ \"lauritzthamsen\",\n+ \"scotchi\",\n+ \"peritor\",\n+ \"toto\",\n+ \"hwaxxer\",\n+ \"lukaszklis\",\n ],\n )\n \n@@ -128,41 +126,41 @@ def testSearchRepos(self):\n repos,\n lambda r: r.full_name,\n [\n- u\"kennethreitz/legit\",\n- u\"RuudBurger/CouchPotatoV1\",\n- u\"gelstudios/gitfiti\",\n- u\"gpjt/webgl-lessons\",\n- u\"PyGithub/PyGithub\",\n- u\"aaasen/github_globe\",\n- u\"hmason/gitmarks\",\n- u\"dnerdy/factory_boy\",\n- u\"binaryage/drydrop\",\n- u\"bgreenlee/sublime-github\",\n- u\"karan/HackerNewsAPI\",\n- u\"mfenniak/pyPdf\",\n- u\"skazhy/github-decorator\",\n- u\"llvmpy/llvmpy\",\n- u\"lexrupy/gmate\",\n- u\"ask/python-github2\",\n- u\"audreyr/cookiecutter-pypackage\",\n- u\"tabo/django-treebeard\",\n- u\"dbr/tvdb_api\",\n- u\"jchris/couchapp\",\n- u\"joeyespo/grip\",\n- u\"nigelsmall/py2neo\",\n- u\"ask/chishop\",\n- u\"sigmavirus24/github3.py\",\n- u\"jsmits/github-cli\",\n- u\"lincolnloop/django-layout\",\n- u\"amccloud/django-project-skel\",\n- u\"Stiivi/brewery\",\n- u\"webpy/webpy.github.com\",\n- u\"dustin/py-github\",\n- u\"logsol/Github-Auto-Deploy\",\n- u\"cloudkick/libcloud\",\n- u\"berkerpeksag/github-badge\",\n- u\"bitprophet/ssh\",\n- u\"azavea/OpenTreeMap\",\n+ \"kennethreitz/legit\",\n+ \"RuudBurger/CouchPotatoV1\",\n+ \"gelstudios/gitfiti\",\n+ \"gpjt/webgl-lessons\",\n+ \"PyGithub/PyGithub\",\n+ \"aaasen/github_globe\",\n+ \"hmason/gitmarks\",\n+ \"dnerdy/factory_boy\",\n+ \"binaryage/drydrop\",\n+ \"bgreenlee/sublime-github\",\n+ \"karan/HackerNewsAPI\",\n+ \"mfenniak/pyPdf\",\n+ \"skazhy/github-decorator\",\n+ \"llvmpy/llvmpy\",\n+ \"lexrupy/gmate\",\n+ \"ask/python-github2\",\n+ \"audreyr/cookiecutter-pypackage\",\n+ \"tabo/django-treebeard\",\n+ \"dbr/tvdb_api\",\n+ \"jchris/couchapp\",\n+ \"joeyespo/grip\",\n+ \"nigelsmall/py2neo\",\n+ \"ask/chishop\",\n+ \"sigmavirus24/github3.py\",\n+ \"jsmits/github-cli\",\n+ \"lincolnloop/django-layout\",\n+ \"amccloud/django-project-skel\",\n+ \"Stiivi/brewery\",\n+ \"webpy/webpy.github.com\",\n+ \"dustin/py-github\",\n+ \"logsol/Github-Auto-Deploy\",\n+ \"cloudkick/libcloud\",\n+ \"berkerpeksag/github-badge\",\n+ \"bitprophet/ssh\",\n+ \"azavea/OpenTreeMap\",\n ],\n )\n \n@@ -202,7 +200,7 @@ def testSearchTopics(self):\n self.assertListKeyBegin(\n topics,\n lambda r: r.name,\n- [u\"python\", u\"django\", u\"flask\", u\"ruby\", u\"scikit-learn\", u\"wagtail\"],\n+ [\"python\", \"django\", \"flask\", \"ruby\", \"scikit-learn\", \"wagtail\"],\n )\n \n def testPaginateSearchTopics(self):\n@@ -215,20 +213,20 @@ def testSearchCode(self):\n files,\n lambda f: f.name,\n [\n- u\"Commit.setUp.txt\",\n- u\"PullRequest.testGetFiles.txt\",\n- u\"NamedUser.testGetEvents.txt\",\n- u\"PullRequest.testCreateComment.txt\",\n- u\"PullRequestFile.setUp.txt\",\n- u\"Repository.testGetIssuesWithWildcards.txt\",\n- u\"Repository.testGetIssuesWithArguments.txt\",\n- u\"test_ebnf.cpp\",\n- u\"test_abnf.cpp\",\n- u\"PullRequestFile.py\",\n- u\"SystemCalls.py\",\n- u\"tests.py\",\n- u\"LexerTestCase.py\",\n- u\"ParserTestCase.py\",\n+ \"Commit.setUp.txt\",\n+ \"PullRequest.testGetFiles.txt\",\n+ \"NamedUser.testGetEvents.txt\",\n+ \"PullRequest.testCreateComment.txt\",\n+ \"PullRequestFile.setUp.txt\",\n+ \"Repository.testGetIssuesWithWildcards.txt\",\n+ \"Repository.testGetIssuesWithArguments.txt\",\n+ \"test_ebnf.cpp\",\n+ \"test_abnf.cpp\",\n+ \"PullRequestFile.py\",\n+ \"SystemCalls.py\",\n+ \"tests.py\",\n+ \"LexerTestCase.py\",\n+ \"ParserTestCase.py\",\n ],\n )\n self.assertEqual(files[0].repository.full_name, \"PyGithub/PyGithub\")"},{"sha":"f464d8c7756b3f15006b06a97a5554689531a010","filename":"tests/SelfHostedActionsRunner.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSelfHostedActionsRunner.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSelfHostedActionsRunner.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FSelfHostedActionsRunner.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\r\n-\r\n ############################ Copyrights and license ############################\r\n # #\r\n # Copyright 2020 Victor Zeng #\r"},{"sha":"4d97ac970a00ea1787d9dc65ca023be16e892ef6","filename":"tests/SourceImport.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSourceImport.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSourceImport.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FSourceImport.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Hayden Fuss #"},{"sha":"270e2d88a14564f6097283c84b8dbf1e792ac5fb","filename":"tests/Tag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c2d9d46bff5d68844afd16b5b56030afa4b49a75","filename":"tests/Team.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTeam.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTeam.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTeam.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"8bdfeaaf037cdf07efa1b24b42e7a36410ab969d","filename":"tests/Topic.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTopic.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTopic.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTopic.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Adam Baratz #\n@@ -55,7 +53,7 @@ def testAllFields(self):\n self.assertEqual(topic.curated, True)\n self.assertEqual(topic.score, 7576.306)\n \n- self.assertEqual(topic.__repr__(), u'Topic(name=\"python\")')\n+ self.assertEqual(topic.__repr__(), 'Topic(name=\"python\")')\n \n def testNamesFromSearchResults(self):\n expected_names = ["},{"sha":"7dfe6dcc7421df0b3a81f06d31b220d6557a8baf","filename":"tests/Traffic.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTraffic.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTraffic.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTraffic.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"36cf3d18b5e94b885a11188b72d848bd8d777015","filename":"tests/UserKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FUserKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FUserKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FUserKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"4f8ead191a6a86df5b821880cbfabc6be99de8fa","filename":"tests/Workflow.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflow.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflow.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FWorkflow.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"02054bd707942c4f02705bc83c87769e1003390b","filename":"tests/WorkflowRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflowRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflowRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FWorkflowRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"6b87e3610b80eb24a45d4bd453c42c9937d8ae7d","filename":"tests/__init__.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2F__init__.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2F__init__.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2F__init__.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"2d5c77f33a288f18a9b73114572de1c5c3b9ec94","filename":"tests/conftest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2Fconftest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2Fconftest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2Fconftest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"a7e67b244bb63cbaec0df7e66aa79d53924d153f","filename":"tox.ini","status":"modified","additions":1,"deletions":2,"changes":3,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tox.ini","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tox.ini","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tox.ini?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,12 +1,11 @@\n [tox]\n envlist =\n lint,\n- py{35,36,37,38,39},\n+ py{36,37,38,39},\n docs\n \n [gh-actions]\n python =\n- 3.5: py35\n 3.6: py36, docs, lint\n 3.7: py37\n 3.8: py38"}]} - -https -GET -api.github.com -None -/repositories/3544490/compare/v1.54...v1.54.1?page=2&per_page=4 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('Server', 'GitHub.com'), ('Date', 'Wed, 24 Jan 2024 06:45:30 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/"6a2540e749bca921514c34cdd8a33cf658bbd410aee3eb837f2e2498e99b3558"'), ('Last-Modified', 'Thu, 24 Dec 2020 04:11:01 GMT'), ('github-authentication-token-expiration', '2024-02-19 10:58:06 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4962'), ('X-RateLimit-Reset', '1706081414'), ('X-RateLimit-Used', '38'), ('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', 'B656:2D7FFC:1F48C1B:1FBD2A0:65B0B20A')] -{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v1.54...v1.54.1","html_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:951fcdf...PyGithub:34d097c","diff_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.patch","base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"merge_base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"status":"ahead","ahead_by":10,"behind_by":0,"total_commits":10,"commits":[{"sha":"82c349ce3e1c556531110753831b3133334c19b7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo4MmMzNDljZTNlMWM1NTY1MzExMTA3NTM4MzFiMzEzMzMzNGMxOWI3","commit":{"author":{"name":"Paul Du Bois","email":"dubois@adobe.com","date":"2020-12-03T02:12:41Z"},"committer":{"name":"Paul Du Bois","email":"dubois@adobe.com","date":"2020-12-03T02:12:41Z"},"message":"Fix #1731: Incorrect annotation","tree":{"sha":"b3948a8f30112d7cca24b96606dea93349b1b856","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/b3948a8f30112d7cca24b96606dea93349b1b856"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/82c349ce3e1c556531110753831b3133334c19b7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/82c349ce3e1c556531110753831b3133334c19b7","html_url":"https://github.com/PyGithub/PyGithub/commit/82c349ce3e1c556531110753831b3133334c19b7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/82c349ce3e1c556531110753831b3133334c19b7/comments","author":null,"committer":null,"parents":[{"sha":"24251f4b0f1ef4abe10c590af17620eb2ed3576c","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/24251f4b0f1ef4abe10c590af17620eb2ed3576c","html_url":"https://github.com/PyGithub/PyGithub/commit/24251f4b0f1ef4abe10c590af17620eb2ed3576c"}]},{"sha":"2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDoyNDMyY2ZmZDNiMmYxYThlMGI2Yjk2ZDY5YjNkZDRkZWQxNDhhOWY3","commit":{"author":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-12-03T12:32:53Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-03T12:32:53Z"},"message":"Merge pull request #1733 from dubois/main\n\nFix #1731: Incorrect annotation","tree":{"sha":"98dbe74b6c69fd6d89650824bb5fa48d59ad4499","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/98dbe74b6c69fd6d89650824bb5fa48d59ad4499"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfyNr1CRBK7hj4Ov3rIwAAdHIIACMaCONmlMgdxcZuJSjZtdIo\navRBcycP0TgRB0w1Ax+JaxyQlW6L9yG6A1uijFE+dMYHNWcaDkMNb+plB/mmlqZe\nw4fv5l10JdvNKpslI8UsxYZPPVFPGrWLUdsI7+Jv8gSklOmXZ179N45CUp1uQ4T4\n5h95YTyyKuWF8Lc1qZI2zUX+11ts6k5Z+dqlw0ilu2t0VWwNLTmx85wCi0lDzhdn\n/ZqubVn+et0MoIhFnTpaj8GhLRV+wUFhBg+j+ynhViTd4Kb1wXQKaJTaJKkRupGU\nTxlrYgOVLPm47B8q2bCH5LmpT1iUVhCYs/JPjOeEJXn7tP1VaSBqhU+gmvzssKI=\n=cEIt\n-----END PGP SIGNATURE-----\n","payload":"tree 98dbe74b6c69fd6d89650824bb5fa48d59ad4499\nparent 63e4fae997a9a5dc8c2b56907c87c565537bb28f\nparent 82c349ce3e1c556531110753831b3133334c19b7\nauthor Pascal Hofmann 1606998773 +0100\ncommitter GitHub 1606998773 +0100\n\nMerge pull request #1733 from dubois/main\n\nFix #1731: Incorrect annotation"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","html_url":"https://github.com/PyGithub/PyGithub/commit/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7/comments","author":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"63e4fae997a9a5dc8c2b56907c87c565537bb28f","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f","html_url":"https://github.com/PyGithub/PyGithub/commit/63e4fae997a9a5dc8c2b56907c87c565537bb28f"},{"sha":"82c349ce3e1c556531110753831b3133334c19b7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/82c349ce3e1c556531110753831b3133334c19b7","html_url":"https://github.com/PyGithub/PyGithub/commit/82c349ce3e1c556531110753831b3133334c19b7"}]},{"sha":"e113e37de1ec687c68337d777f3629251b35ab28","node_id":"MDY6Q29tbWl0MzU0NDQ5MDplMTEzZTM3ZGUxZWM2ODdjNjgzMzdkNzc3ZjM2MjkyNTFiMzVhYjI4","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-15T03:07:33Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-15T03:07:33Z"},"message":"Add pyupgrade to pre-commit configuration (#1783)\n\nTo help us switch to f-strings and other 3.6+ changes, add pyupgrade to\r\nour pre-commit configuration to keep the codebase clean.","tree":{"sha":"3bdfb7b92b80e7df710bd666dcb00fd04d964340","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3bdfb7b92b80e7df710bd666dcb00fd04d964340"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e113e37de1ec687c68337d777f3629251b35ab28","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJf2Ch1CRBK7hj4Ov3rIwAAdHIIAJAasU9Em5OS36vmelEIoWdn\nrfFmomE8K5EMcPU0xVoSQXEBaDqqopNM5jq2kS9O9MVYLcyPrbGzhUOZpF57Kkyt\nl7tBNTSvAdrDlxfYxn8duAOC7RtbFVyqoca+llIpuSXCf3G7T1XZ+zErFE8/Jo74\n4JAuMZ7+1GbqcLLYt9ly7pX7dCjXOMkjuVgT4kPMtbOleWr2YQFweONT+B6GyDOu\nHuLShrF2WVTAJCXrAdoq/czK8gOKJFPTHhFPMJqb4le05XliB286plmEUTryPUXG\nk9rJLK3jaRg8TTn7Uwsl3sVxHNl7JirJsdSXESiSnvorbPdEtVQlztDmwYvw0Rg=\n=Qwiy\n-----END PGP SIGNATURE-----\n","payload":"tree 3bdfb7b92b80e7df710bd666dcb00fd04d964340\nparent 2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7\nauthor Steve Kowalik 1608001653 +1100\ncommitter GitHub 1608001653 +1100\n\nAdd pyupgrade to pre-commit configuration (#1783)\n\nTo help us switch to f-strings and other 3.6+ changes, add pyupgrade to\r\nour pre-commit configuration to keep the codebase clean."}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e113e37de1ec687c68337d777f3629251b35ab28","html_url":"https://github.com/PyGithub/PyGithub/commit/e113e37de1ec687c68337d777f3629251b35ab28","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e113e37de1ec687c68337d777f3629251b35ab28/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","html_url":"https://github.com/PyGithub/PyGithub/commit/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7"}]},{"sha":"f299699ccd75910593d5ddf7cc6212f70c5c28b1","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpmMjk5Njk5Y2NkNzU5MTA1OTNkNWRkZjdjYzYyMTJmNzBjNWMyOGIx","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-15T03:13:05Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-15T03:13:05Z"},"message":"Ignore pyupgrade commit for git blame (#1785)\n\nSince the pyupgrade commit makes a large amount of changes, ignore the\r\ncommit by default with git blame.","tree":{"sha":"26a66857d79da88f91e239a2b43f01eecb4b3b2b","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/26a66857d79da88f91e239a2b43f01eecb4b3b2b"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJf2CnBCRBK7hj4Ov3rIwAAdHIIAAA+IDUcDmxT5CU2FINN7KFq\nnb5+ldtcluhl6OPIEyNShJTBIMPm0XePFRZLNvSdWb7PO/DepYykycMCjYdwHFqj\n23NUoEZ/AdvvH6xYDbUyr8vnXGudRTKvNKr98wV11B2JbOsJn+6DdmQ1iwfdNr0S\nXO0K809ROQ5CQXMNjp8ydwz/T6Q7WkVUfxnM6cYpvlHaG3lIXXuo+pbw9DSsfXP4\nCI05/vXd6b97wh5VztoZ4evTBu1gHCC+nQqvXLIWfmK+DUmRMUhIDhD0/5Sz5lR4\nAIHvDpp9rs3eshAJ2Dpu9p9VLCbxm19CgXSE3dh11oCXcEnNOVShJR7O3CuPqh4=\n=YZoY\n-----END PGP SIGNATURE-----\n","payload":"tree 26a66857d79da88f91e239a2b43f01eecb4b3b2b\nparent e113e37de1ec687c68337d777f3629251b35ab28\nauthor Steve Kowalik 1608001985 +1100\ncommitter GitHub 1608001985 +1100\n\nIgnore pyupgrade commit for git blame (#1785)\n\nSince the pyupgrade commit makes a large amount of changes, ignore the\r\ncommit by default with git blame."}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1","html_url":"https://github.com/PyGithub/PyGithub/commit/f299699ccd75910593d5ddf7cc6212f70c5c28b1","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"e113e37de1ec687c68337d777f3629251b35ab28","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e113e37de1ec687c68337d777f3629251b35ab28","html_url":"https://github.com/PyGithub/PyGithub/commit/e113e37de1ec687c68337d777f3629251b35ab28"}]}]} - -https -GET -api.github.com -None -/repositories/3544490/compare/v1.54...v1.54.1?page=3&per_page=4 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None -200 -[('Server', 'GitHub.com'), ('Date', 'Wed, 24 Jan 2024 06:45:31 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/"9a04c6718bc5d4797539efa3888340cfbb5b64f05400ebb368bb3c7c9c796c39"'), ('Last-Modified', 'Thu, 24 Dec 2020 04:11:01 GMT'), ('github-authentication-token-expiration', '2024-02-19 10:58:06 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4961'), ('X-RateLimit-Reset', '1706081414'), ('X-RateLimit-Used', '39'), ('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', 'B664:5B937:20893EC:20FD252:65B0B20A')] -{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v1.54...v1.54.1","html_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:951fcdf...PyGithub:34d097c","diff_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.patch","base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"merge_base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"status":"ahead","ahead_by":10,"behind_by":0,"total_commits":10,"commits":[{"sha":"31a1c007808a4205bdae691385d2627c561e69ed","node_id":"MDY6Q29tbWl0MzU0NDQ5MDozMWExYzAwNzgwOGE0MjA1YmRhZTY5MTM4NWQyNjI3YzU2MWU2OWVk","commit":{"author":{"name":"Edouard Benauw","email":"edouard.benauw@student.ecp.fr","date":"2020-12-24T04:09:32Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-24T04:09:32Z"},"message":"Pin pyjwt version (#1797)\n\n* Pin pyjwt version\r\n\r\nPyjwt version is not fixed, which can cause syntax error for user since the release of breaking changes from pyjwt (https://pypi.org/project/PyJWT/#history)\r\n\r\n* Update setup.py\r\n\r\nFixes #1796","tree":{"sha":"f1f0f4f89687db0bd578530bfde3711d648ca8b7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f1f0f4f89687db0bd578530bfde3711d648ca8b7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/31a1c007808a4205bdae691385d2627c561e69ed","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJf5BR8CRBK7hj4Ov3rIwAAdHIIAJPfqg6LN2GTPXBh2Dtf++2D\nxIFywirZ2SSdV4B6BR6EP9mtAstO2sD53qGgwtmpkvUooWQmE+2iBXxMNrTG6E4P\nrHVVNNulrDImNAUFNtndREZfNjrCveYXzfAvl9KduJqo7GHt75uPUlD7JjmzUWIk\n4ilUdGt/N52AKhXsjRgmbhdMrjw4/2aLwHLuLe0fbf/6YFu6tyGfeX9hkMJtUMuC\nx+hPcmXByzwDu9ZXB+VlMgvm51BhgtPujT3pKqoaGihiiiL6DONJBojpWkZRGoL1\nDEFOrFTwdwQmv7Ff+2nj0GCSdyPfsE/ErG1YjmgQE86PTJUATjaUycz0fBHsbBc=\n=crvV\n-----END PGP SIGNATURE-----\n","payload":"tree f1f0f4f89687db0bd578530bfde3711d648ca8b7\nparent f299699ccd75910593d5ddf7cc6212f70c5c28b1\nauthor Edouard Benauw 1608782972 +0100\ncommitter GitHub 1608782972 +1100\n\nPin pyjwt version (#1797)\n\n* Pin pyjwt version\r\n\r\nPyjwt version is not fixed, which can cause syntax error for user since the release of breaking changes from pyjwt (https://pypi.org/project/PyJWT/#history)\r\n\r\n* Update setup.py\r\n\r\nFixes #1796"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/31a1c007808a4205bdae691385d2627c561e69ed","html_url":"https://github.com/PyGithub/PyGithub/commit/31a1c007808a4205bdae691385d2627c561e69ed","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/31a1c007808a4205bdae691385d2627c561e69ed/comments","author":null,"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","site_admin":false},"parents":[{"sha":"f299699ccd75910593d5ddf7cc6212f70c5c28b1","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1","html_url":"https://github.com/PyGithub/PyGithub/commit/f299699ccd75910593d5ddf7cc6212f70c5c28b1"}]},{"sha":"34d097ce473601624722b90fc5d0396011dd3acb","node_id":"MDY6Q29tbWl0MzU0NDQ5MDozNGQwOTdjZTQ3MzYwMTYyNDcyMmI5MGZjNWQwMzk2MDExZGQzYWNi","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-24T04:11:01Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-24T04:11:01Z"},"message":"Publish version 1.54.1","tree":{"sha":"7ad0475f15170e05abbb93a65d07370b9335d0fc","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/7ad0475f15170e05abbb93a65d07370b9335d0fc"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/34d097ce473601624722b90fc5d0396011dd3acb","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/34d097ce473601624722b90fc5d0396011dd3acb","html_url":"https://github.com/PyGithub/PyGithub/commit/34d097ce473601624722b90fc5d0396011dd3acb","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/34d097ce473601624722b90fc5d0396011dd3acb/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","site_admin":false},"parents":[{"sha":"31a1c007808a4205bdae691385d2627c561e69ed","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/31a1c007808a4205bdae691385d2627c561e69ed","html_url":"https://github.com/PyGithub/PyGithub/commit/31a1c007808a4205bdae691385d2627c561e69ed"}]}]} +[('Date', 'Tue, 07 Oct 2025 15:05:00 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/"465cbd8ef3774224740be9bcb29fe50625cfcd05bc7d632a0d799e0ca6ef4108"'), ('Last-Modified', 'Thu, 24 Dec 2020 04:11:01 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4995'), ('X-RateLimit-Reset', '1759853097'), ('X-RateLimit-Used', '5'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'BF70:3847DE:62DEF11:5C53781:68E52C1C')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v1.54...v1.54.1","html_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:951fcdf...PyGithub:34d097c","diff_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v1.54...v1.54.1.patch","base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"merge_base_commit":{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5NTFmY2RmMjNmOGM2NTdiNTI1ZGVlNzgwODZiYzRkZmQ0MmVmODEw","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-11-30T05:43:49Z"},"message":"Publish version 1.54","tree":{"sha":"1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/1a5bc94ff3672ddcd68c27ccbe4c12b44343bb3c"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"6d501b286e04f324bc87532003f0564624981ecb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/6d501b286e04f324bc87532003f0564624981ecb","html_url":"https://github.com/PyGithub/PyGithub/commit/6d501b286e04f324bc87532003f0564624981ecb"}]},"status":"ahead","ahead_by":10,"behind_by":0,"total_commits":10,"commits":[{"sha":"fab682a5ccfc275c31ec37f1f541254c7bd780f3","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpmYWI2ODJhNWNjZmMyNzVjMzFlYzM3ZjFmNTQxMjU0YzdiZDc4MGYz","commit":{"author":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-11-30T07:53:59Z"},"committer":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-11-30T07:53:59Z"},"message":"Fix stubs file for Repository","tree":{"sha":"33a9a785fd98dc79d1033ef2e49f30e2282246f0","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/33a9a785fd98dc79d1033ef2e49f30e2282246f0"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3","html_url":"https://github.com/PyGithub/PyGithub/commit/fab682a5ccfc275c31ec37f1f541254c7bd780f3","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3/comments","author":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810"}]},{"sha":"9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo5ZWUzYWZiMTcxNmM1NTlhMGIzYjQ0ZTA5N2MwNWY0YjE0YWUyYWI4","commit":{"author":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-11-30T11:27:48Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-11-30T11:27:48Z"},"message":"Merge pull request #1767 from pascal-hofmann/fix-repository-stubs\n\nFix stubs file for Repository","tree":{"sha":"33a9a785fd98dc79d1033ef2e49f30e2282246f0","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/33a9a785fd98dc79d1033ef2e49f30e2282246f0"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfxNc0CRBK7hj4Ov3rIwAAdHIIAJb9YeSv3LLlSy7Nr4nILkyn\nMqrW9cvtvnqAH81QtuHlEKShsh33hbKmx9On1lxj7VcRBiB/6cLpAEUJowq0A4zt\n341cVH9+0mbmq+eG1c5vE/vTzq5Uu2mUpvjQ89ssyEvkQ/lIvOEBNAWwJSNwQOc0\n1LcGW1OEh+xmK7SxwvPXxE6aXjBgG8wv0WtFxmhlLoDzvwPymf9qM4/eq2UF6TmU\nzMop0xhv7Kkls626P0HN7wklupth8zaOAJO9vtn8m25sZoZ8XRr2KIX9gAV6jCLW\nuV0GFogjfpya9BVCa7Lh5o6m29ruyTgqIok4rPbZA8aDhQImq243PgP1reVinok=\n=Fepr\n-----END PGP SIGNATURE-----\n","payload":"tree 33a9a785fd98dc79d1033ef2e49f30e2282246f0\nparent 951fcdf23f8c657b525dee78086bc4dfd42ef810\nparent fab682a5ccfc275c31ec37f1f541254c7bd780f3\nauthor Pascal Hofmann 1606735668 +0100\ncommitter GitHub 1606735668 +0100\n\nMerge pull request #1767 from pascal-hofmann/fix-repository-stubs\n\nFix stubs file for Repository","verified_at":"2024-01-16T19:59:59Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","html_url":"https://github.com/PyGithub/PyGithub/commit/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8/comments","author":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"951fcdf23f8c657b525dee78086bc4dfd42ef810","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/951fcdf23f8c657b525dee78086bc4dfd42ef810","html_url":"https://github.com/PyGithub/PyGithub/commit/951fcdf23f8c657b525dee78086bc4dfd42ef810"},{"sha":"fab682a5ccfc275c31ec37f1f541254c7bd780f3","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/fab682a5ccfc275c31ec37f1f541254c7bd780f3","html_url":"https://github.com/PyGithub/PyGithub/commit/fab682a5ccfc275c31ec37f1f541254c7bd780f3"}]},{"sha":"a806b5233f6423e0f8dacc4d04b6d81a72689bed","node_id":"MDY6Q29tbWl0MzU0NDQ5MDphODA2YjUyMzNmNjQyM2UwZjhkYWNjNGQwNGI2ZDgxYTcyNjg5YmVk","commit":{"author":{"name":"Sébastien Besson","email":"seb.besson@gmail.com","date":"2020-11-30T23:17:18Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-11-30T23:17:18Z"},"message":"Revert \"Pin requests to <2.25 as well (#1757)\" (#1763)\n\n* Revert \"Pin requests to <2.25 as well (#1757)\"\r\n* Ensure httpretty is more recent than 1.0.3\r\n\r\nThis reverts commit d159425f36dc7f68766cc980e262e9287e5f111c.","tree":{"sha":"b33c2872fb923bf90b2a594aa3cd5b1898d1fc65","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/b33c2872fb923bf90b2a594aa3cd5b1898d1fc65"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfxX1+CRBK7hj4Ov3rIwAAdHIIAAqZsjeHvnQx2UVmlIqZaucp\naHuoyFp/5P+fgz/oKRnsINmmUcBdcjyLv0qXmgda3g87X9sx7fJh7DDK7MTlw5Ka\n07T/pY8+spaZfm7mVCVp7bh7741AE0tx/Gi2MhI6LPtFMHyCmy9ljeWCrMBvtPDc\naggmA8iGbp8XJ6ln++w2EATwyY9bxelWNgy0cwM7R1Eas/5NtVInETcCf+i9cJ3u\n5ONRvnV9oWFnd3LLD2lxJb2A2STX/IZ4WmXrFj6cb8bWwXJPfvlyK9f97H65+2/k\nRefP5cIfgdRGbd7Le71A90q3PFOpvzTMS+YGrF+l4H1OZ+t3AnqL/H2GzXHFYWY=\n=Dqlm\n-----END PGP SIGNATURE-----\n","payload":"tree b33c2872fb923bf90b2a594aa3cd5b1898d1fc65\nparent 9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8\nauthor Sébastien Besson 1606778238 +0000\ncommitter GitHub 1606778238 +1100\n\nRevert \"Pin requests to <2.25 as well (#1757)\" (#1763)\n\n* Revert \"Pin requests to <2.25 as well (#1757)\"\r\n* Ensure httpretty is more recent than 1.0.3\r\n\r\nThis reverts commit d159425f36dc7f68766cc980e262e9287e5f111c.","verified_at":"2024-01-16T19:59:59Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed","html_url":"https://github.com/PyGithub/PyGithub/commit/a806b5233f6423e0f8dacc4d04b6d81a72689bed","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed/comments","author":{"login":"sbesson","id":1355463,"node_id":"MDQ6VXNlcjEzNTU0NjM=","avatar_url":"https://avatars.githubusercontent.com/u/1355463?v=4","gravatar_id":"","url":"https://api.github.com/users/sbesson","html_url":"https://github.com/sbesson","followers_url":"https://api.github.com/users/sbesson/followers","following_url":"https://api.github.com/users/sbesson/following{/other_user}","gists_url":"https://api.github.com/users/sbesson/gists{/gist_id}","starred_url":"https://api.github.com/users/sbesson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbesson/subscriptions","organizations_url":"https://api.github.com/users/sbesson/orgs","repos_url":"https://api.github.com/users/sbesson/repos","events_url":"https://api.github.com/users/sbesson/events{/privacy}","received_events_url":"https://api.github.com/users/sbesson/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8","html_url":"https://github.com/PyGithub/PyGithub/commit/9ee3afb1716c559a0b3b44e097c05f4b14ae2ab8"}]},{"sha":"63e4fae997a9a5dc8c2b56907c87c565537bb28f","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo2M2U0ZmFlOTk3YTlhNWRjOGMyYjU2OTA3Yzg3YzU2NTUzN2JiMjhm","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-02T03:47:45Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-02T03:47:45Z"},"message":"Drop support for Python 3.5 (#1770)\n\nIn preperation for starting to use 3.6+ only features, stop testing\r\nPython 3.5 in our CI, and bump our minimum required version.","tree":{"sha":"fde51c1aa322cbdd646e1677d1e69fb9d0457ae7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/fde51c1aa322cbdd646e1677d1e69fb9d0457ae7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfxw5hCRBK7hj4Ov3rIwAAdHIIADWSUehbe2GbpLdhBVQY2SZ2\nAm1ACkzu6AMNG2AfrSVrd2e8mnOUt/BEIIGT+MHxKLTbApDuEo5m7DnIs/zJJUDw\n67eDlQySTP72UHMnZNukELGffNdhQDuZh9K6SeAn/C+qS/UwrTpUo/Zk6u9joVkm\nxbgMGutpg/gi+NYDaPxwHvqlXrFyB2zLrnF/jsRIYNqvJ1XPmgPSHZ2s54ivGLep\npKqGvyA92knGAnL8PZpy6d7pbyx8DWAgGokpP3Bgm3W8YuFNPX/25d81V5RTwUHs\n4pGREUyooUHz2yjARTTwvGWXH+1KwwmRCfGkSPmNMzJYoJkeGkgNAPRLHEbgdhk=\n=n01c\n-----END PGP SIGNATURE-----\n","payload":"tree fde51c1aa322cbdd646e1677d1e69fb9d0457ae7\nparent a806b5233f6423e0f8dacc4d04b6d81a72689bed\nauthor Steve Kowalik 1606880865 +1100\ncommitter GitHub 1606880865 +1100\n\nDrop support for Python 3.5 (#1770)\n\nIn preperation for starting to use 3.6+ only features, stop testing\r\nPython 3.5 in our CI, and bump our minimum required version.","verified_at":"2024-01-16T19:59:59Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f","html_url":"https://github.com/PyGithub/PyGithub/commit/63e4fae997a9a5dc8c2b56907c87c565537bb28f","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"a806b5233f6423e0f8dacc4d04b6d81a72689bed","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/a806b5233f6423e0f8dacc4d04b6d81a72689bed","html_url":"https://github.com/PyGithub/PyGithub/commit/a806b5233f6423e0f8dacc4d04b6d81a72689bed"}]},{"sha":"82c349ce3e1c556531110753831b3133334c19b7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo4MmMzNDljZTNlMWM1NTY1MzExMTA3NTM4MzFiMzEzMzMzNGMxOWI3","commit":{"author":{"name":"Paul Du Bois","email":"dubois@adobe.com","date":"2020-12-03T02:12:41Z"},"committer":{"name":"Paul Du Bois","email":"dubois@adobe.com","date":"2020-12-03T02:12:41Z"},"message":"Fix #1731: Incorrect annotation","tree":{"sha":"b3948a8f30112d7cca24b96606dea93349b1b856","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/b3948a8f30112d7cca24b96606dea93349b1b856"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/82c349ce3e1c556531110753831b3133334c19b7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/82c349ce3e1c556531110753831b3133334c19b7","html_url":"https://github.com/PyGithub/PyGithub/commit/82c349ce3e1c556531110753831b3133334c19b7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/82c349ce3e1c556531110753831b3133334c19b7/comments","author":null,"committer":null,"parents":[{"sha":"24251f4b0f1ef4abe10c590af17620eb2ed3576c","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/24251f4b0f1ef4abe10c590af17620eb2ed3576c","html_url":"https://github.com/PyGithub/PyGithub/commit/24251f4b0f1ef4abe10c590af17620eb2ed3576c"}]},{"sha":"2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDoyNDMyY2ZmZDNiMmYxYThlMGI2Yjk2ZDY5YjNkZDRkZWQxNDhhOWY3","commit":{"author":{"name":"Pascal Hofmann","email":"mail@pascalhofmann.de","date":"2020-12-03T12:32:53Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-03T12:32:53Z"},"message":"Merge pull request #1733 from dubois/main\n\nFix #1731: Incorrect annotation","tree":{"sha":"98dbe74b6c69fd6d89650824bb5fa48d59ad4499","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/98dbe74b6c69fd6d89650824bb5fa48d59ad4499"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfyNr1CRBK7hj4Ov3rIwAAdHIIACMaCONmlMgdxcZuJSjZtdIo\navRBcycP0TgRB0w1Ax+JaxyQlW6L9yG6A1uijFE+dMYHNWcaDkMNb+plB/mmlqZe\nw4fv5l10JdvNKpslI8UsxYZPPVFPGrWLUdsI7+Jv8gSklOmXZ179N45CUp1uQ4T4\n5h95YTyyKuWF8Lc1qZI2zUX+11ts6k5Z+dqlw0ilu2t0VWwNLTmx85wCi0lDzhdn\n/ZqubVn+et0MoIhFnTpaj8GhLRV+wUFhBg+j+ynhViTd4Kb1wXQKaJTaJKkRupGU\nTxlrYgOVLPm47B8q2bCH5LmpT1iUVhCYs/JPjOeEJXn7tP1VaSBqhU+gmvzssKI=\n=cEIt\n-----END PGP SIGNATURE-----\n","payload":"tree 98dbe74b6c69fd6d89650824bb5fa48d59ad4499\nparent 63e4fae997a9a5dc8c2b56907c87c565537bb28f\nparent 82c349ce3e1c556531110753831b3133334c19b7\nauthor Pascal Hofmann 1606998773 +0100\ncommitter GitHub 1606998773 +0100\n\nMerge pull request #1733 from dubois/main\n\nFix #1731: Incorrect annotation","verified_at":"2024-01-16T19:59:59Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","html_url":"https://github.com/PyGithub/PyGithub/commit/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7/comments","author":{"login":"pascal-hofmann","id":2102878,"node_id":"MDQ6VXNlcjIxMDI4Nzg=","avatar_url":"https://avatars.githubusercontent.com/u/2102878?v=4","gravatar_id":"","url":"https://api.github.com/users/pascal-hofmann","html_url":"https://github.com/pascal-hofmann","followers_url":"https://api.github.com/users/pascal-hofmann/followers","following_url":"https://api.github.com/users/pascal-hofmann/following{/other_user}","gists_url":"https://api.github.com/users/pascal-hofmann/gists{/gist_id}","starred_url":"https://api.github.com/users/pascal-hofmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pascal-hofmann/subscriptions","organizations_url":"https://api.github.com/users/pascal-hofmann/orgs","repos_url":"https://api.github.com/users/pascal-hofmann/repos","events_url":"https://api.github.com/users/pascal-hofmann/events{/privacy}","received_events_url":"https://api.github.com/users/pascal-hofmann/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"63e4fae997a9a5dc8c2b56907c87c565537bb28f","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/63e4fae997a9a5dc8c2b56907c87c565537bb28f","html_url":"https://github.com/PyGithub/PyGithub/commit/63e4fae997a9a5dc8c2b56907c87c565537bb28f"},{"sha":"82c349ce3e1c556531110753831b3133334c19b7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/82c349ce3e1c556531110753831b3133334c19b7","html_url":"https://github.com/PyGithub/PyGithub/commit/82c349ce3e1c556531110753831b3133334c19b7"}]},{"sha":"e113e37de1ec687c68337d777f3629251b35ab28","node_id":"MDY6Q29tbWl0MzU0NDQ5MDplMTEzZTM3ZGUxZWM2ODdjNjgzMzdkNzc3ZjM2MjkyNTFiMzVhYjI4","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-15T03:07:33Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-15T03:07:33Z"},"message":"Add pyupgrade to pre-commit configuration (#1783)\n\nTo help us switch to f-strings and other 3.6+ changes, add pyupgrade to\r\nour pre-commit configuration to keep the codebase clean.","tree":{"sha":"3bdfb7b92b80e7df710bd666dcb00fd04d964340","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/3bdfb7b92b80e7df710bd666dcb00fd04d964340"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/e113e37de1ec687c68337d777f3629251b35ab28","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJf2Ch1CRBK7hj4Ov3rIwAAdHIIAJAasU9Em5OS36vmelEIoWdn\nrfFmomE8K5EMcPU0xVoSQXEBaDqqopNM5jq2kS9O9MVYLcyPrbGzhUOZpF57Kkyt\nl7tBNTSvAdrDlxfYxn8duAOC7RtbFVyqoca+llIpuSXCf3G7T1XZ+zErFE8/Jo74\n4JAuMZ7+1GbqcLLYt9ly7pX7dCjXOMkjuVgT4kPMtbOleWr2YQFweONT+B6GyDOu\nHuLShrF2WVTAJCXrAdoq/czK8gOKJFPTHhFPMJqb4le05XliB286plmEUTryPUXG\nk9rJLK3jaRg8TTn7Uwsl3sVxHNl7JirJsdSXESiSnvorbPdEtVQlztDmwYvw0Rg=\n=Qwiy\n-----END PGP SIGNATURE-----\n","payload":"tree 3bdfb7b92b80e7df710bd666dcb00fd04d964340\nparent 2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7\nauthor Steve Kowalik 1608001653 +1100\ncommitter GitHub 1608001653 +1100\n\nAdd pyupgrade to pre-commit configuration (#1783)\n\nTo help us switch to f-strings and other 3.6+ changes, add pyupgrade to\r\nour pre-commit configuration to keep the codebase clean.","verified_at":"2024-11-06T17:44:44Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e113e37de1ec687c68337d777f3629251b35ab28","html_url":"https://github.com/PyGithub/PyGithub/commit/e113e37de1ec687c68337d777f3629251b35ab28","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e113e37de1ec687c68337d777f3629251b35ab28/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7","html_url":"https://github.com/PyGithub/PyGithub/commit/2432cffd3b2f1a8e0b6b96d69b3dd4ded148a9f7"}]},{"sha":"f299699ccd75910593d5ddf7cc6212f70c5c28b1","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpmMjk5Njk5Y2NkNzU5MTA1OTNkNWRkZjdjYzYyMTJmNzBjNWMyOGIx","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-15T03:13:05Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-15T03:13:05Z"},"message":"Ignore pyupgrade commit for git blame (#1785)\n\nSince the pyupgrade commit makes a large amount of changes, ignore the\r\ncommit by default with git blame.","tree":{"sha":"26a66857d79da88f91e239a2b43f01eecb4b3b2b","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/26a66857d79da88f91e239a2b43f01eecb4b3b2b"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJf2CnBCRBK7hj4Ov3rIwAAdHIIAAA+IDUcDmxT5CU2FINN7KFq\nnb5+ldtcluhl6OPIEyNShJTBIMPm0XePFRZLNvSdWb7PO/DepYykycMCjYdwHFqj\n23NUoEZ/AdvvH6xYDbUyr8vnXGudRTKvNKr98wV11B2JbOsJn+6DdmQ1iwfdNr0S\nXO0K809ROQ5CQXMNjp8ydwz/T6Q7WkVUfxnM6cYpvlHaG3lIXXuo+pbw9DSsfXP4\nCI05/vXd6b97wh5VztoZ4evTBu1gHCC+nQqvXLIWfmK+DUmRMUhIDhD0/5Sz5lR4\nAIHvDpp9rs3eshAJ2Dpu9p9VLCbxm19CgXSE3dh11oCXcEnNOVShJR7O3CuPqh4=\n=YZoY\n-----END PGP SIGNATURE-----\n","payload":"tree 26a66857d79da88f91e239a2b43f01eecb4b3b2b\nparent e113e37de1ec687c68337d777f3629251b35ab28\nauthor Steve Kowalik 1608001985 +1100\ncommitter GitHub 1608001985 +1100\n\nIgnore pyupgrade commit for git blame (#1785)\n\nSince the pyupgrade commit makes a large amount of changes, ignore the\r\ncommit by default with git blame.","verified_at":"2024-11-06T17:44:44Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1","html_url":"https://github.com/PyGithub/PyGithub/commit/f299699ccd75910593d5ddf7cc6212f70c5c28b1","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"e113e37de1ec687c68337d777f3629251b35ab28","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/e113e37de1ec687c68337d777f3629251b35ab28","html_url":"https://github.com/PyGithub/PyGithub/commit/e113e37de1ec687c68337d777f3629251b35ab28"}]},{"sha":"31a1c007808a4205bdae691385d2627c561e69ed","node_id":"MDY6Q29tbWl0MzU0NDQ5MDozMWExYzAwNzgwOGE0MjA1YmRhZTY5MTM4NWQyNjI3YzU2MWU2OWVk","commit":{"author":{"name":"Edouard Benauw","email":"edouard.benauw@student.ecp.fr","date":"2020-12-24T04:09:32Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2020-12-24T04:09:32Z"},"message":"Pin pyjwt version (#1797)\n\n* Pin pyjwt version\r\n\r\nPyjwt version is not fixed, which can cause syntax error for user since the release of breaking changes from pyjwt (https://pypi.org/project/PyJWT/#history)\r\n\r\n* Update setup.py\r\n\r\nFixes #1796","tree":{"sha":"f1f0f4f89687db0bd578530bfde3711d648ca8b7","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f1f0f4f89687db0bd578530bfde3711d648ca8b7"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/31a1c007808a4205bdae691385d2627c561e69ed","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJf5BR8CRBK7hj4Ov3rIwAAdHIIAJPfqg6LN2GTPXBh2Dtf++2D\nxIFywirZ2SSdV4B6BR6EP9mtAstO2sD53qGgwtmpkvUooWQmE+2iBXxMNrTG6E4P\nrHVVNNulrDImNAUFNtndREZfNjrCveYXzfAvl9KduJqo7GHt75uPUlD7JjmzUWIk\n4ilUdGt/N52AKhXsjRgmbhdMrjw4/2aLwHLuLe0fbf/6YFu6tyGfeX9hkMJtUMuC\nx+hPcmXByzwDu9ZXB+VlMgvm51BhgtPujT3pKqoaGihiiiL6DONJBojpWkZRGoL1\nDEFOrFTwdwQmv7Ff+2nj0GCSdyPfsE/ErG1YjmgQE86PTJUATjaUycz0fBHsbBc=\n=crvV\n-----END PGP SIGNATURE-----\n","payload":"tree f1f0f4f89687db0bd578530bfde3711d648ca8b7\nparent f299699ccd75910593d5ddf7cc6212f70c5c28b1\nauthor Edouard Benauw 1608782972 +0100\ncommitter GitHub 1608782972 +1100\n\nPin pyjwt version (#1797)\n\n* Pin pyjwt version\r\n\r\nPyjwt version is not fixed, which can cause syntax error for user since the release of breaking changes from pyjwt (https://pypi.org/project/PyJWT/#history)\r\n\r\n* Update setup.py\r\n\r\nFixes #1796","verified_at":"2024-01-16T19:59:59Z"}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/31a1c007808a4205bdae691385d2627c561e69ed","html_url":"https://github.com/PyGithub/PyGithub/commit/31a1c007808a4205bdae691385d2627c561e69ed","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/31a1c007808a4205bdae691385d2627c561e69ed/comments","author":null,"committer":{"login":"web-flow","id":19864447,"node_id":"MDQ6VXNlcjE5ODY0NDQ3","avatar_url":"https://avatars.githubusercontent.com/u/19864447?v=4","gravatar_id":"","url":"https://api.github.com/users/web-flow","html_url":"https://github.com/web-flow","followers_url":"https://api.github.com/users/web-flow/followers","following_url":"https://api.github.com/users/web-flow/following{/other_user}","gists_url":"https://api.github.com/users/web-flow/gists{/gist_id}","starred_url":"https://api.github.com/users/web-flow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/web-flow/subscriptions","organizations_url":"https://api.github.com/users/web-flow/orgs","repos_url":"https://api.github.com/users/web-flow/repos","events_url":"https://api.github.com/users/web-flow/events{/privacy}","received_events_url":"https://api.github.com/users/web-flow/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"f299699ccd75910593d5ddf7cc6212f70c5c28b1","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/f299699ccd75910593d5ddf7cc6212f70c5c28b1","html_url":"https://github.com/PyGithub/PyGithub/commit/f299699ccd75910593d5ddf7cc6212f70c5c28b1"}]},{"sha":"34d097ce473601624722b90fc5d0396011dd3acb","node_id":"MDY6Q29tbWl0MzU0NDQ5MDozNGQwOTdjZTQ3MzYwMTYyNDcyMmI5MGZjNWQwMzk2MDExZGQzYWNi","commit":{"author":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-24T04:11:01Z"},"committer":{"name":"Steve Kowalik","email":"steven@wedontsleep.org","date":"2020-12-24T04:11:01Z"},"message":"Publish version 1.54.1","tree":{"sha":"7ad0475f15170e05abbb93a65d07370b9335d0fc","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/7ad0475f15170e05abbb93a65d07370b9335d0fc"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/34d097ce473601624722b90fc5d0396011dd3acb","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/34d097ce473601624722b90fc5d0396011dd3acb","html_url":"https://github.com/PyGithub/PyGithub/commit/34d097ce473601624722b90fc5d0396011dd3acb","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/34d097ce473601624722b90fc5d0396011dd3acb/comments","author":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"s-t-e-v-e-n-k","id":15225059,"node_id":"MDQ6VXNlcjE1MjI1MDU5","avatar_url":"https://avatars.githubusercontent.com/u/15225059?v=4","gravatar_id":"","url":"https://api.github.com/users/s-t-e-v-e-n-k","html_url":"https://github.com/s-t-e-v-e-n-k","followers_url":"https://api.github.com/users/s-t-e-v-e-n-k/followers","following_url":"https://api.github.com/users/s-t-e-v-e-n-k/following{/other_user}","gists_url":"https://api.github.com/users/s-t-e-v-e-n-k/gists{/gist_id}","starred_url":"https://api.github.com/users/s-t-e-v-e-n-k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s-t-e-v-e-n-k/subscriptions","organizations_url":"https://api.github.com/users/s-t-e-v-e-n-k/orgs","repos_url":"https://api.github.com/users/s-t-e-v-e-n-k/repos","events_url":"https://api.github.com/users/s-t-e-v-e-n-k/events{/privacy}","received_events_url":"https://api.github.com/users/s-t-e-v-e-n-k/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"31a1c007808a4205bdae691385d2627c561e69ed","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/31a1c007808a4205bdae691385d2627c561e69ed","html_url":"https://github.com/PyGithub/PyGithub/commit/31a1c007808a4205bdae691385d2627c561e69ed"}]}],"files":[{"sha":"9abd22d1d5f4695912c1853cc8fb19eb15aacddc","filename":".git-blame-ignore-revs","status":"modified","additions":3,"deletions":0,"changes":3,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/.git-blame-ignore-revs","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/.git-blame-ignore-revs","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.git-blame-ignore-revs?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -6,3 +6,6 @@\n \n # Format with new black\n 07e29fe014b7e214e72b51129fbef55468a7309d\n+\n+# Add pyupgrade to pre-commit\n+e113e37de1ec687c68337d777f3629251b35ab28"},{"sha":"38fe00ef7c4345da1fcd6da1d98cb19be523a7cd","filename":".github/workflows/ci.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/.github%2Fworkflows%2Fci.yml","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/.github%2Fworkflows%2Fci.yml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.github%2Fworkflows%2Fci.yml?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -9,7 +9,7 @@ jobs:\n name: test (Python ${{ matrix.python-version }})\n strategy:\n matrix:\n- python-version: [3.5, 3.6, 3.7, 3.8, 3.9]\n+ python-version: [3.6, 3.7, 3.8, 3.9]\n steps:\n - uses: actions/checkout@v2\n - name: Set up Python"},{"sha":"e18dd1f992e60b0460831fdf3d64fe9511cd45dc","filename":".pre-commit-config.yaml","status":"modified","additions":6,"deletions":0,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/.pre-commit-config.yaml","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/.pre-commit-config.yaml","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/.pre-commit-config.yaml?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -24,3 +24,9 @@ repos:\n args:\n - --ignore-words-list=\"bloaded,nto,pullrequest,pullrequests,thi,tim,wan,Wan,chang,Chang\"\n - --quiet-level=2\n+ - repo: https://github.com/asottile/pyupgrade\n+ rev: v2.7.4\n+ hooks:\n+ - id: pyupgrade\n+ args:\n+ - --py36-plus"},{"sha":"43d33319fa66a12c3ecf956884e5a606b0430d6c","filename":"doc/changes.rst","status":"modified","additions":10,"deletions":0,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fchanges.rst","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fchanges.rst","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/doc%2Fchanges.rst?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -4,6 +4,16 @@ Change log\n Stable versions\n ~~~~~~~~~~~~~~~\n \n+Version 1.54.1 (December 24, 2020)\n+-----------------------------------\n+\n+* Pin pyjwt version (#1797) (31a1c007)\n+* Add pyupgrade to pre-commit configuration (#1783) (e113e37d)\n+* Fix #1731: Incorrect annotation (82c349ce)\n+* Drop support for Python 3.5 (#1770) (63e4fae9)\n+* Revert \"Pin requests to <2.25 as well (#1757)\" (#1763) (a806b523)\n+* Fix stubs file for Repository (fab682a5)\n+\n Version 1.54 (November 30, 2020)\n -----------------------------------\n **Important**"},{"sha":"b8187945593d83a2e6003075064f3e7f3f6cdebd","filename":"doc/conf.py","status":"modified","additions":6,"deletions":8,"changes":14,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fconf.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/doc%2Fconf.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/doc%2Fconf.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -61,8 +59,8 @@\n master_doc = \"index\"\n \n # General information about the project.\n-project = u\"PyGithub\"\n-copyright = u\"%d, Vincent Jacques\" % datetime.date.today().year\n+project = \"PyGithub\"\n+copyright = \"%d, Vincent Jacques\" % datetime.date.today().year\n \n # The version info for the project you're documenting, acts as replacement for\n # |version| and |release|, also used in various other places throughout the\n@@ -204,7 +202,7 @@\n # Grouping the document tree into LaTeX files. List of tuples\n # (source start file, target name, title, author, documentclass [howto/manual]).\n latex_documents = [\n- (\"index\", \"PyGithub.tex\", u\"PyGithub Documentation\", u\"Vincent Jacques\", \"manual\"),\n+ (\"index\", \"PyGithub.tex\", \"PyGithub Documentation\", \"Vincent Jacques\", \"manual\"),\n ]\n \n # The name of an image file (relative to this directory) to place at the top of\n@@ -232,7 +230,7 @@\n \n # One entry per manual page. List of tuples\n # (source start file, name, description, authors, manual section).\n-man_pages = [(\"index\", \"pygithub\", u\"PyGithub Documentation\", [u\"Vincent Jacques\"], 1)]\n+man_pages = [(\"index\", \"pygithub\", \"PyGithub Documentation\", [\"Vincent Jacques\"], 1)]\n \n # If true, show URL addresses after external links.\n # man_show_urls = False\n@@ -247,8 +245,8 @@\n (\n \"index\",\n \"PyGithub\",\n- u\"PyGithub Documentation\",\n- u\"Vincent Jacques\",\n+ \"PyGithub Documentation\",\n+ \"Vincent Jacques\",\n \"PyGithub\",\n \"One line description of project.\",\n \"Miscellaneous\","},{"sha":"f2fb64f468b5abcb93635bc849d69092f48a78e3","filename":"github/AccessToken.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAccessToken.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAccessToken.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAccessToken.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Rigas Papathanasopoulos #"},{"sha":"2d1f81d920743a0ba33c078ba430283d5d8b6bc6","filename":"github/ApplicationOAuth.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FApplicationOAuth.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FApplicationOAuth.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FApplicationOAuth.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ###########################\n # #\n # Copyright 2019 Rigas Papathanasopoulos #\n@@ -75,7 +73,7 @@ def get_login_url(self, redirect_uri=None, state=None, login=None):\n parameters = urllib.parse.urlencode(parameters)\n \n base_url = \"https://github.com/login/oauth/authorize\"\n- return u\"{}?{}\".format(base_url, parameters)\n+ return f\"{base_url}?{parameters}\"\n \n def get_access_token(self, code, state=None):\n \"\"\""},{"sha":"58a5c5d6e933a4451a4a3f3babb204abb580d0b8","filename":"github/AuthenticatedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthenticatedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthenticatedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuthenticatedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"bbddd170d0663ac6a1151b2eb87924f6d531c488","filename":"github/Authorization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuthorization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"38dd650943433ed86b42c0674f50b0c0173988d6","filename":"github/AuthorizationApplication.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorizationApplication.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FAuthorizationApplication.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FAuthorizationApplication.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f723301c992529f6902bb52d24c8d1d5b8a2c80b","filename":"github/Branch.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranch.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranch.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FBranch.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"ffc364c8dfa5bc0627194187690e5c48eb4ac65a","filename":"github/BranchProtection.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranchProtection.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FBranchProtection.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FBranchProtection.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"9a895980289ad23c20ee682182d4af108d0ae82a","filename":"github/CheckRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"5c7033cda9894b83e696d8e880cde3166c73265a","filename":"github/CheckRunAnnotation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunAnnotation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunAnnotation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckRunAnnotation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"3dfc02382ac738303501d2e9806ad2c980b6d0dd","filename":"github/CheckRunOutput.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunOutput.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckRunOutput.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckRunOutput.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"d6d67c32f6426c2c786cc5c240a245c65403d246","filename":"github/CheckSuite.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckSuite.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCheckSuite.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCheckSuite.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"bf07b60b83c9fe2a07befe1ba921f6cc58a1cb9c","filename":"github/Clones.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FClones.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FClones.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FClones.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"f951589d35e368580c9e6ca419aafb63dc8c72c6","filename":"github/Commit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"fb420d868a30436f0953530673e709ba70828325","filename":"github/CommitCombinedStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitCombinedStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitCombinedStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitCombinedStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Jannis Gebauer #"},{"sha":"f5eca565eede61e0d528f4ffbc1693af5eddd67e","filename":"github/CommitComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"2a511c8a74a7d664037036ef15d55c0f2a8dd2f4","filename":"github/CommitStats.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStats.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStats.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitStats.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b95b49e461a267862bc3892edc0f53e731d8a5be","filename":"github/CommitStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FCommitStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FCommitStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f058b7e3892f40a38fe9a38a18bdfa2463ea2f18","filename":"github/Comparison.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FComparison.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FComparison.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FComparison.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"d5cbcb7e21893bd46c1901678a5aa687c51da628","filename":"github/Consts.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FConsts.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FConsts.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FConsts.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"8d3289aeccde1b2eb91e0559539abd1f2bf45b8c","filename":"github/ContentFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FContentFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FContentFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FContentFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"9e959d097de554c0923d68216bf7b47a9fa24ac2","filename":"github/Deployment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeployment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeployment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FDeployment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"518f0b4a8ed3bcd779eaa06ad07c8777aebd71d5","filename":"github/DeploymentStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeploymentStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDeploymentStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FDeploymentStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Colby Gallup #"},{"sha":"5c7932eacbd61d53f395f48c8191aa46318a8238","filename":"github/Download.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDownload.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FDownload.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FDownload.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f690d802290538cc39ae9d4e14db807e1ba47a57","filename":"github/Event.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"cc07442cae8a3add1bbd667f527be8ddf810a4fc","filename":"github/File.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"88b799a3eea219e600841d4cfff7f01bdd518371","filename":"github/Gist.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGist.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGist.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGist.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"7bf85ec504d271f6db8524b06cdc2b21e7ed7d56","filename":"github/GistComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGistComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f540e154a56e255f5e3489206ae4ca088b477bec","filename":"github/GistFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGistFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"5cb9690895e5563ceac5d14fb794c299e9187f20","filename":"github/GistHistoryState.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistHistoryState.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGistHistoryState.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGistHistoryState.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"56f7a32283fc9e9df31e46db11fa347626cbfaa8","filename":"github/GitAuthor.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitAuthor.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitAuthor.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitAuthor.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c93e8c633c7f3d3a4324364425d6c27ac2fc6db9","filename":"github/GitBlob.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitBlob.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitBlob.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitBlob.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"0a7aa6d81521874afa17ca6376ce125251293196","filename":"github/GitCommit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"02eb49af4126829280947ae4c6b9ebbc66e46a33","filename":"github/GitObject.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitObject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"69222b7d264a36e592eb033487c028e4f1afcfd3","filename":"github/GitRef.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRef.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRef.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitRef.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"31a45edc0d17f80ccc1be8a26e7ba213e1182c54","filename":"github/GitRelease.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRelease.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitRelease.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitRelease.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2015 Ed Holland #"},{"sha":"7271b55252042ba4d3337da31bedcd35a08671cd","filename":"github/GitReleaseAsset.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitReleaseAsset.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitReleaseAsset.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitReleaseAsset.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Chris McBride #"},{"sha":"eb0bf65d627933bd6131722c2b22b465b8f0c630","filename":"github/GitTag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6afc1303a7bfe10f1487dbe39d4e1ae82bd2fdcd","filename":"github/GitTree.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTree.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTree.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitTree.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"9da5e0331434adea65ac8761702c547097e03430","filename":"github/GitTreeElement.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTreeElement.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitTreeElement.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitTreeElement.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"cac31f245ebf4f7ba994cfd46122245b193e4e29","filename":"github/GithubApp.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubApp.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"4708047f708151cb6b4fa19681190925db0614ed","filename":"github/GithubException.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubException.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubException.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubException.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3916153e806c51c6f2105897df8b2aabb66a9b25","filename":"github/GithubObject.py","status":"modified","additions":6,"deletions":11,"changes":17,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubObject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGithubObject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithubObject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -66,7 +64,7 @@ def value(self):\n )\n \n \n-class GithubObject(object):\n+class GithubObject:\n \"\"\"\n Base class for all classes representing objects returned by the API.\n \"\"\"\n@@ -233,13 +231,10 @@ def _makeDictOfStringsToClassesAttribute(self, klass, value):\n for key, element in value.items()\n ):\n return _ValuedAttribute(\n- dict(\n- (\n- key,\n- klass(self._requester, self._headers, element, completed=False),\n- )\n+ {\n+ key: klass(self._requester, self._headers, element, completed=False)\n for key, element in value.items()\n- )\n+ }\n )\n else:\n return _BadAttribute(value, {str: dict})\n@@ -269,8 +264,8 @@ def format_params(params):\n if isinstance(v, bytes):\n v = v.decode(\"utf-8\")\n if isinstance(v, str):\n- v = '\"{v}\"'.format(v=v)\n- yield u\"{k}={v}\".format(k=k, v=v)\n+ v = f'\"{v}\"'\n+ yield f\"{k}={v}\"\n \n return \"{class_name}({params})\".format(\n class_name=self.__class__.__name__,"},{"sha":"147276a997516ac17b5ec84becefb430774f5b2b","filename":"github/GitignoreTemplate.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitignoreTemplate.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FGitignoreTemplate.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGitignoreTemplate.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"346dc04c82009bf0125a86f003c45815da7fab4a","filename":"github/Hook.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHook.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHook.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FHook.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"44ec8af423c65966669e387b3b04ccb9dd854963","filename":"github/HookDescription.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookDescription.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookDescription.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FHookDescription.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a491ef30bfa0219c44e16f934a2dd440e7166549","filename":"github/HookResponse.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookResponse.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FHookResponse.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FHookResponse.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3289d18716b0b3a46c7dc08b6b497213672b14a3","filename":"github/InputFileContent.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputFileContent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputFileContent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInputFileContent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -31,7 +29,7 @@\n import github.GithubObject\n \n \n-class InputFileContent(object):\n+class InputFileContent:\n \"\"\"\n This class represents InputFileContents\n \"\"\""},{"sha":"b53fd46d9d55dfdc8d8a53b79fad1e1a153ceb71","filename":"github/InputGitAuthor.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitAuthor.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitAuthor.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInputGitAuthor.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -33,7 +31,7 @@\n import github.GithubObject\n \n \n-class InputGitAuthor(object):\n+class InputGitAuthor:\n \"\"\"\n This class represents InputGitAuthors\n \"\"\"\n@@ -56,7 +54,7 @@ def __init__(self, name, email, date=github.GithubObject.NotSet):\n self.__date = date\n \n def __repr__(self):\n- return 'InputGitAuthor(name=\"{}\")'.format(self.__name)\n+ return f'InputGitAuthor(name=\"{self.__name}\")'\n \n @property\n def _identity(self):"},{"sha":"909250c56c746918b4b5daf2060bfcb2697663f7","filename":"github/InputGitTreeElement.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitTreeElement.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInputGitTreeElement.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInputGitTreeElement.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -31,7 +29,7 @@\n import github.GithubObject\n \n \n-class InputGitTreeElement(object):\n+class InputGitTreeElement:\n \"\"\"\n This class represents InputGitTreeElements\n \"\"\""},{"sha":"5ec7550304c2ef20c84d0256c892691ea006a206","filename":"github/Installation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInstallation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Jannis Gebauer #"},{"sha":"06c695f9aedb24a5429bf58a88e37ff1a71c68fe","filename":"github/InstallationAuthorization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallationAuthorization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInstallationAuthorization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInstallationAuthorization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Jannis Gebauer #"},{"sha":"d246dcfb8e1d5aec8c96a9a69afdce430e3f3f6f","filename":"github/Invitation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInvitation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FInvitation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FInvitation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Jannis Gebauer #"},{"sha":"078f21828c650ca54a5ef12abb4496bfdf66700d","filename":"github/Issue.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssue.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssue.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssue.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Andrew Bettison #"},{"sha":"85162b0dfebd0e1ae6768374817f06ed79462779","filename":"github/IssueComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssueComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"35456e868651fc0a11115e15978cd6f928d3e020","filename":"github/IssueEvent.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssueEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssueEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b7d73da6f918ecfb6ed7e2b1193c2267962f4e4c","filename":"github/IssuePullRequest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssuePullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FIssuePullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FIssuePullRequest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"881ce014d0704727ffecb8975ee8fdd22c2f40a6","filename":"github/Label.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLabel.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLabel.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FLabel.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c604037985b92b5d8515c878b4abc9a5ab50b38a","filename":"github/License.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLicense.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FLicense.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FLicense.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Wan Liuyang #"},{"sha":"ceac54e0f02acd44eac56f1b468c67c8532898d2","filename":"github/MainClass.py","status":"modified","additions":18,"deletions":20,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMainClass.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMainClass.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMainClass.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #\n@@ -90,7 +88,7 @@\n DEFAULT_PER_PAGE = 30\n \n \n-class Github(object):\n+class Github:\n \"\"\"\n This is the main class you instantiate to access the Github API v3. Optional parameters allow different authentication methods.\n \"\"\"\n@@ -339,13 +337,13 @@ def get_repo(self, full_name_or_id, lazy=False):\n \"\"\"\n assert isinstance(full_name_or_id, (str, int)), full_name_or_id\n url_base = \"/repositories/\" if isinstance(full_name_or_id, int) else \"/repos/\"\n- url = \"%s%s\" % (url_base, full_name_or_id)\n+ url = f\"{url_base}{full_name_or_id}\"\n if lazy:\n return Repository.Repository(\n self.__requester, {}, {\"url\": url}, completed=False\n )\n headers, data = self.__requester.requestJsonAndCheck(\n- \"GET\", \"%s%s\" % (url_base, full_name_or_id)\n+ \"GET\", f\"{url_base}{full_name_or_id}\"\n )\n return Repository.Repository(self.__requester, headers, data, completed=True)\n \n@@ -431,7 +429,7 @@ def search_repositories(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/repositories `_\n@@ -459,7 +457,7 @@ def search_repositories(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -476,7 +474,7 @@ def search_users(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/users `_\n@@ -500,7 +498,7 @@ def search_users(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -517,7 +515,7 @@ def search_issues(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/issues `_\n@@ -541,7 +539,7 @@ def search_issues(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -556,7 +554,7 @@ def search_code(\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n highlight=False,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/code `_\n@@ -585,7 +583,7 @@ def search_code(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -605,7 +603,7 @@ def search_commits(\n query,\n sort=github.GithubObject.NotSet,\n order=github.GithubObject.NotSet,\n- **qualifiers\n+ **qualifiers,\n ):\n \"\"\"\n :calls: `GET /search/commits `_\n@@ -633,7 +631,7 @@ def search_commits(\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -661,7 +659,7 @@ def search_topics(self, query, **qualifiers):\n query_chunks.append(query)\n \n for qualifier, value in qualifiers.items():\n- query_chunks.append(\"%s:%s\" % (qualifier, value))\n+ query_chunks.append(f\"{qualifier}:{value}\")\n \n url_parameters[\"q\"] = \" \".join(query_chunks)\n assert url_parameters[\"q\"], \"need at least one qualifier\"\n@@ -809,7 +807,7 @@ def get_app(self, slug=github.GithubObject.NotSet):\n return GithubApp.GithubApp(self.__requester, headers, data, completed=True)\n \n \n-class GithubIntegration(object):\n+class GithubIntegration:\n \"\"\"\n Main class to obtain tokens for a GitHub integration.\n \"\"\"\n@@ -858,7 +856,7 @@ def get_access_token(self, installation_id, user_id=None):\n self.base_url, installation_id\n ),\n headers={\n- \"Authorization\": \"Bearer {}\".format(self.create_jwt()),\n+ \"Authorization\": f\"Bearer {self.create_jwt()}\",\n \"Accept\": Consts.mediaTypeIntegrationPreview,\n \"User-Agent\": \"PyGithub/Python\",\n },\n@@ -892,13 +890,13 @@ def get_installation(self, owner, repo):\n :rtype: :class:`github.Installation.Installation`\n \"\"\"\n headers = {\n- \"Authorization\": \"Bearer {}\".format(self.create_jwt()),\n+ \"Authorization\": f\"Bearer {self.create_jwt()}\",\n \"Accept\": Consts.mediaTypeIntegrationPreview,\n \"User-Agent\": \"PyGithub/Python\",\n }\n \n response = requests.get(\n- \"{}/repos/{}/{}/installation\".format(self.base_url, owner, repo),\n+ f\"{self.base_url}/repos/{owner}/{repo}/installation\",\n headers=headers,\n )\n response_dict = response.json()"},{"sha":"6eccb3431a1ab4664388f8dca734499a8a8eb5eb","filename":"github/Membership.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMembership.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMembership.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMembership.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"642de5f7ddbcb9086907042da89b70eee5b186e2","filename":"github/Migration.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMigration.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMigration.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMigration.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3f3f9829216bbf3d6bf0b95366dddd1ec9ddc1bd","filename":"github/Milestone.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMilestone.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FMilestone.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FMilestone.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"98e4e29d1b9497117e98ef9dcc0faa8c818d5214","filename":"github/NamedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNamedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNamedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FNamedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"7f427c8b384dc3389b4322d7d0f2d5431834be3c","filename":"github/Notification.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotification.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotification.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FNotification.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"9be34885156bf63e7b71fb55962c1dd446443da8","filename":"github/NotificationSubject.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotificationSubject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FNotificationSubject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FNotificationSubject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"3354a636b82a5b8d7dc09ed9e4103328bc5180e5","filename":"github/Organization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FOrganization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FOrganization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FOrganization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"8542e31df48579be5dee928702d9eb96bfe89af6","filename":"github/PaginatedList.py","status":"modified","additions":2,"deletions":6,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPaginatedList.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -53,12 +51,10 @@ def __getitem__(self, index):\n return self._Slice(self, index)\n \n def __iter__(self):\n- for element in self.__elements:\n- yield element\n+ yield from self.__elements\n while self._couldGrow():\n newElements = self._grow()\n- for element in newElements:\n- yield element\n+ yield from newElements\n \n def _isBiggerThan(self, index):\n return len(self.__elements) > index or self._couldGrow()"},{"sha":"89b9564a85a289881f605ce716a455f5dd1d16e9","filename":"github/Path.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPath.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPath.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPath.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"bd62f0dc92afc74c91ffe01b3769e430738a4000","filename":"github/Permissions.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPermissions.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPermissions.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPermissions.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6bbbbfe3e8d240a88bc4b54b57a20523efb30ea7","filename":"github/Plan.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPlan.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPlan.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPlan.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"9757f74f742da0387241950a2ecc3f8dd1709a86","filename":"github/Project.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FProject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"97b8561c66dd07b832a865747da464ac6347b100","filename":"github/ProjectCard.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectCard.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectCard.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FProjectCard.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"21e312e2cc9728e934effd7ec1376fb91009c22f","filename":"github/ProjectColumn.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectColumn.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FProjectColumn.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FProjectColumn.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"1306f304e12e212ac26ff0827821613fadde74df","filename":"github/PullRequest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Michael Stead #"},{"sha":"597a85ad4af0180bdf8c8408028225c1c93b1026","filename":"github/PullRequest.pyi","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.pyi","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequest.pyi","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequest.pyi?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -61,16 +61,16 @@ class PullRequest(CompletableGithubObject):\n ) -> PullRequestComment: ...\n def create_review_request(\n self,\n- reviewers: Union[_NotSetType, str] = ...,\n- team_reviewers: Union[_NotSetType, str] = ...,\n+ reviewers: Union[_NotSetType, List[str]] = ...,\n+ team_reviewers: Union[_NotSetType, List[str]] = ...,\n ) -> None: ...\n @property\n def created_at(self) -> datetime: ...\n def delete_labels(self) -> None: ...\n def delete_review_request(\n self,\n- reviewers: Union[_NotSetType, str] = ...,\n- team_reviewers: Union[_NotSetType, str] = ...,\n+ reviewers: Union[_NotSetType, List[str]] = ...,\n+ team_reviewers: Union[_NotSetType, List[str]] = ...,\n ) -> None: ...\n @property\n def deletions(self) -> int: ..."},{"sha":"ae2b4b0e3a55ede25f3b8ef430c72882ea224eb4","filename":"github/PullRequestComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3ec124e5875baf52a0e72e3c8ce9b42c3d218ecd","filename":"github/PullRequestMergeStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestMergeStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestMergeStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestMergeStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"94ab3f3770ee3b2a8784931ef8c6efd34c4ceb8e","filename":"github/PullRequestPart.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestPart.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestPart.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestPart.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"8b217c0df1e1d8840a355a546935e04aa0839ab0","filename":"github/PullRequestReview.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestReview.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FPullRequestReview.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FPullRequestReview.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Aaron Levine #"},{"sha":"70b46769f7949071ede8981f50565d39283a3fc0","filename":"github/Rate.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRate.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRate.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRate.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"b40c47808eeb18b7de463d7db59bed24ce0b8e3c","filename":"github/RateLimit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRateLimit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRateLimit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRateLimit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"59089a0a6e7948d8c21b5b2d2e6701d26a8c875b","filename":"github/Reaction.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReaction.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReaction.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FReaction.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Nicolas Agustín Torres #"},{"sha":"7a0d03c64017a06082bbf0719fe65c20fed2877f","filename":"github/Referrer.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReferrer.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FReferrer.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FReferrer.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"19f5e945b034bbb1f8162a8a8533f87d152b3505","filename":"github/Repository.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Christopher Gilbert #"},{"sha":"6476147858965cc86e67753bf261f7ad504695b4","filename":"github/Repository.pyi","status":"modified","additions":4,"deletions":1,"changes":5,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.pyi","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepository.pyi","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepository.pyi?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -259,6 +259,8 @@ class Repository(CompletableGithubObject):\n author: Union[InputGitAuthor, _NotSetType] = ...,\n ) -> Dict[str, Union[Commit, _NotSetType]]: ...\n @property\n+ def delete_branch_on_merge(self) -> bool: ...\n+ @property\n def deployments_url(self) -> str: ...\n @property\n def description(self) -> str: ...\n@@ -331,7 +333,7 @@ class Repository(CompletableGithubObject):\n def get_contributors(\n self, anon: Union[str, _NotSetType] = ...\n ) -> PaginatedList[NamedUser]: ...\n- def get_deployment(self, id_: int) -> Any: ...\n+ def get_deployment(self, id_: int) -> Deployment: ...\n def get_deployments(\n self,\n sha: Union[str, _NotSetType] = ...,\n@@ -351,6 +353,7 @@ class Repository(CompletableGithubObject):\n ) -> Repository: ...\n def get_git_blob(self, sha: str) -> GitBlob: ...\n def get_git_commit(self, sha: str) -> GitCommit: ...\n+ def get_git_matching_refs(self, ref: str) -> PaginatedList[GitRef]: ...\n def get_git_ref(self, ref: str) -> GitRef: ...\n def get_git_refs(self) -> PaginatedList[GitRef]: ...\n def get_git_tag(self, sha: str) -> GitTag: ..."},{"sha":"2ff72e14980bb890bc077df37317eccb28d467cd","filename":"github/RepositoryKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepositoryKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"467264e0d19cca105b8e66d1508ba9dd30e501b6","filename":"github/RepositoryPreferences.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryPreferences.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRepositoryPreferences.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRepositoryPreferences.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"8842e3ed0c86cd3500572436b311fd2aa2230dfa","filename":"github/Requester.py","status":"modified","additions":5,"deletions":7,"changes":12,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Andrew Bettison #\n@@ -81,7 +79,7 @@ def read(self):\n return self.text\n \n \n-class HTTPSRequestsConnectionClass(object):\n+class HTTPSRequestsConnectionClass:\n # mimic the httplib connection object\n def __init__(\n self, host, port=None, strict=False, timeout=None, retry=None, **kwargs\n@@ -106,7 +104,7 @@ def request(self, verb, url, input, headers):\n \n def getresponse(self):\n verb = getattr(self.session, self.verb.lower())\n- url = \"%s://%s:%s%s\" % (self.protocol, self.host, self.port, self.url)\n+ url = f\"{self.protocol}://{self.host}:{self.port}{self.url}\"\n r = verb(\n url,\n headers=self.headers,\n@@ -121,7 +119,7 @@ def close(self):\n return\n \n \n-class HTTPRequestsConnectionClass(object):\n+class HTTPRequestsConnectionClass:\n # mimic the httplib connection object\n def __init__(\n self, host, port=None, strict=False, timeout=None, retry=None, **kwargs\n@@ -146,7 +144,7 @@ def request(self, verb, url, input, headers):\n \n def getresponse(self):\n verb = getattr(self.session, self.verb.lower())\n- url = \"%s://%s:%s%s\" % (self.protocol, self.host, self.port, self.url)\n+ url = f\"{self.protocol}://{self.host}:{self.port}{self.url}\"\n r = verb(\n url,\n headers=self.headers,\n@@ -513,7 +511,7 @@ def __requestRaw(self, cnx, verb, url, requestHeaders, input):\n response = cnx.getresponse()\n \n status = response.status\n- responseHeaders = dict((k.lower(), v) for k, v in response.getheaders())\n+ responseHeaders = {k.lower(): v for k, v in response.getheaders()}\n output = response.read()\n \n cnx.close()"},{"sha":"70ef469a02c74e29ad6d708ed98ed69a51016922","filename":"github/RequiredPullRequestReviews.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredPullRequestReviews.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredPullRequestReviews.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequiredPullRequestReviews.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"5dc0a4603cacb0b4f7b8ce18e02caea3ed95a62a","filename":"github/RequiredStatusChecks.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredStatusChecks.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FRequiredStatusChecks.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequiredStatusChecks.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"1d3a434dd27943d5b7ef664778e682ae9bc8c8b3","filename":"github/SelfHostedActionsRunner.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSelfHostedActionsRunner.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSelfHostedActionsRunner.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FSelfHostedActionsRunner.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\r\n-\r\n ############################ Copyrights and license ############################\r\n # #\r\n # Copyright 2020 Victor Zeng #\r"},{"sha":"88c32af21e43b486f6d09d8687f58601fda03314","filename":"github/SourceImport.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSourceImport.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FSourceImport.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FSourceImport.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Hayden Fuss #"},{"sha":"fa50b803f4525cc97c40f67f69608eca9e2d2837","filename":"github/Stargazer.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStargazer.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStargazer.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStargazer.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2015 Dan Vanderkam #"},{"sha":"eb950b3cd3d427b0517bc9ff2763f0320966a3c5","filename":"github/StatsCodeFrequency.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCodeFrequency.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCodeFrequency.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsCodeFrequency.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"712232a5cba436a950390f1a332f135bd391dfaf","filename":"github/StatsCommitActivity.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCommitActivity.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsCommitActivity.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsCommitActivity.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"e8d16028eb3e9a8a4d76a612f5c4956ecee5ad63","filename":"github/StatsContributor.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsContributor.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsContributor.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsContributor.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"fc41c0f510a95a7fb81c0df16f80186f7e7a4b84","filename":"github/StatsParticipation.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsParticipation.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsParticipation.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsParticipation.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"5aa30163735d1d5ad03233c0f5961e011466f07d","filename":"github/StatsPunchCard.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsPunchCard.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FStatsPunchCard.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FStatsPunchCard.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"591bab2b7420542942c670c038fbbf79cbb955c5","filename":"github/Tag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"d2bac9d0c1ec2da86ce9c1414627a3427226db32","filename":"github/Team.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeam.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeam.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTeam.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"62f8c4f4a46f5ebee5b43d5d6f7b73265786a22d","filename":"github/TeamDiscussion.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeamDiscussion.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTeamDiscussion.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTeamDiscussion.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Adam Baratz #"},{"sha":"2607da9835b5ed04ffcb1f71f36e26e8ce03fba4","filename":"github/TimelineEvent.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTimelineEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Nick Campbell #"},{"sha":"cecaa09d7fd984ebd3596530c8229ba47e7b1703","filename":"github/TimelineEventSource.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEventSource.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTimelineEventSource.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTimelineEventSource.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Nick Campbell #"},{"sha":"d58837ab741237dc112d8a6bd6c9bf85f3f236ee","filename":"github/Topic.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTopic.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FTopic.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FTopic.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"3ac1dde575737fce45a0e2fc8ff2da87d720b20f","filename":"github/UserKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FUserKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FUserKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FUserKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"5f643bcc3dd97e718505e270387a950ce216009e","filename":"github/View.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FView.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FView.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FView.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"d5b7d448ff016bec167d740385f59bcedcba5bce","filename":"github/Workflow.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflow.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflow.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FWorkflow.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"3631f6e2dab7a6b8cbf761209817719b16ba86fa","filename":"github/WorkflowRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflowRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2FWorkflowRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FWorkflowRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"c978fbe999cb9b0073ffebe701d1821e3b608bc1","filename":"github/__init__.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/github%2F__init__.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/github%2F__init__.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2F__init__.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"cac1930fe56305c0913b6f17e1841a0be1d39174","filename":"requirements.txt","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/requirements.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/requirements.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/requirements.txt?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,5 @@\n-requests>=2.14.0,<2.25\n-pyjwt\n+requests>=2.14.0\n+pyjwt<2.0\n sphinx<3\n sphinx-rtd-theme<0.6\n Deprecated"},{"sha":"d8b29be2e07d3e44646e442ea1d60ff161658d0c","filename":"scripts/add_attribute.py","status":"modified","additions":0,"deletions":1,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Fadd_attribute.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Fadd_attribute.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/scripts%2Fadd_attribute.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,4 @@\n #!/usr/bin/env python\n-# -*- coding: utf-8 -*-\n \n ############################ Copyrights and license ############################\n # #"},{"sha":"f7c0fccd1fac061578872af6523b61b7d89d0de0","filename":"scripts/fix_headers.py","status":"modified","additions":0,"deletions":1,"changes":1,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Ffix_headers.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/scripts%2Ffix_headers.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/scripts%2Ffix_headers.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,4 @@\n #!/usr/bin/env python\n-# -*- coding: utf-8 -*-\n \n ############################ Copyrights and license ############################\n # #"},{"sha":"e67d154b15af7bbf362310adc39814e39ff06bc1","filename":"setup.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/setup.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/setup.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/setup.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,4 @@\n #!/usr/bin/env python\n-# -*- coding: utf-8 -*-\n \n ############################ Copyrights and license ############################\n # #\n@@ -45,7 +44,7 @@\n \n import setuptools\n \n-version = \"1.54\"\n+version = \"1.54.1\"\n \n \n if __name__ == \"__main__\":\n@@ -92,15 +91,14 @@\n \"Operating System :: OS Independent\",\n \"Programming Language :: Python\",\n \"Programming Language :: Python :: 3\",\n- \"Programming Language :: Python :: 3.5\",\n \"Programming Language :: Python :: 3.6\",\n \"Programming Language :: Python :: 3.7\",\n \"Programming Language :: Python :: 3.8\",\n \"Programming Language :: Python :: 3.9\",\n \"Topic :: Software Development\",\n ],\n- python_requires=\">=3.5\",\n- install_requires=[\"deprecated\", \"pyjwt\", \"requests>=2.14.0,<2.25\"],\n+ python_requires=\">=3.6\",\n+ install_requires=[\"deprecated\", \"pyjwt<2.0\", \"requests>=2.14.0\"],\n extras_require={\"integrations\": [\"cryptography\"]},\n- tests_require=[\"cryptography\", \"httpretty>=0.9.6\"],\n+ tests_require=[\"cryptography\", \"httpretty>=1.0.3\"],\n )"},{"sha":"f87e113a4fa19cb48bc60bc6b56416e5fb72a52e","filename":"test-requirements.txt","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/test-requirements.txt","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/test-requirements.txt","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/test-requirements.txt?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,4 +1,4 @@\n cryptography\n-httpretty>=0.9.6\n+httpretty>=1.0.3\n pytest>=5.3\n pytest-cov>=2.8"},{"sha":"ce374d54ae35693ae76215a7bb98e9274ea18f6f","filename":"tests/ApplicationOAuth.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FApplicationOAuth.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FApplicationOAuth.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FApplicationOAuth.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Rigas Papathanasopoulos #\n@@ -37,14 +35,14 @@ def testLoginURL(self):\n sample_uri = \"https://myapp.com/some/path\"\n sample_uri_encoded = \"https%3A%2F%2Fmyapp.com%2Fsome%2Fpath\"\n self.assertEqual(\n- self.app.get_login_url(), \"{}?client_id={}\".format(BASE_URL, self.CLIENT_ID)\n+ self.app.get_login_url(), f\"{BASE_URL}?client_id={self.CLIENT_ID}\"\n )\n self.assertTrue(\n- \"redirect_uri={}\".format(sample_uri_encoded)\n+ f\"redirect_uri={sample_uri_encoded}\"\n in self.app.get_login_url(redirect_uri=sample_uri)\n )\n self.assertTrue(\n- \"client_id={}\".format(self.CLIENT_ID)\n+ f\"client_id={self.CLIENT_ID}\"\n in self.app.get_login_url(redirect_uri=sample_uri)\n )\n self.assertTrue(\n@@ -54,7 +52,7 @@ def testLoginURL(self):\n \"login=user\" in self.app.get_login_url(state=\"123abc\", login=\"user\")\n )\n self.assertTrue(\n- \"client_id={}\".format(self.CLIENT_ID)\n+ f\"client_id={self.CLIENT_ID}\"\n in self.app.get_login_url(state=\"123abc\", login=\"user\")\n )\n "},{"sha":"79e1052807622521ef84537a8eeebc61bb0af30f","filename":"tests/AuthenticatedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthenticatedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthenticatedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthenticatedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"dec6b9f39054471ac51d8ff52887efc294cad575","filename":"tests/Authentication.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthentication.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthentication.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthentication.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"2e05cb7d36c8d2b17f22012b90684c9f2d4e4cff","filename":"tests/Authorization.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthorization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FAuthorization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FAuthorization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"4aba0284765ccf698f217ff24b67a05f34fc3f30","filename":"tests/BadAttributes.py","status":"modified","additions":143,"deletions":145,"changes":288,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBadAttributes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBadAttributes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FBadAttributes.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #\n@@ -117,149 +115,149 @@ def testIssue195(self):\n hooks,\n lambda h: h.name,\n [\n- u\"activecollab\",\n- u\"acunote\",\n- u\"agilebench\",\n- u\"agilezen\",\n- u\"amazonsns\",\n- u\"apiary\",\n- u\"apoio\",\n- u\"appharbor\",\n- u\"apropos\",\n- u\"asana\",\n- u\"backlog\",\n- u\"bamboo\",\n- u\"basecamp\",\n- u\"bcx\",\n- u\"blimp\",\n- u\"boxcar\",\n- u\"buddycloud\",\n- u\"bugherd\",\n- u\"bugly\",\n- u\"bugzilla\",\n- u\"campfire\",\n- u\"cia\",\n- u\"circleci\",\n- u\"codeclimate\",\n- u\"codeportingcsharp2java\",\n- u\"codeship\",\n- u\"coffeedocinfo\",\n- u\"conductor\",\n- u\"coop\",\n- u\"copperegg\",\n- u\"cube\",\n- u\"depending\",\n- u\"deployhq\",\n- u\"devaria\",\n- u\"docker\",\n- u\"ducksboard\",\n- u\"email\",\n- u\"firebase\",\n- u\"fisheye\",\n- u\"flowdock\",\n- u\"fogbugz\",\n- u\"freckle\",\n- u\"friendfeed\",\n- u\"gemini\",\n- u\"gemnasium\",\n- u\"geocommit\",\n- u\"getlocalization\",\n- u\"gitlive\",\n- u\"grmble\",\n- u\"grouptalent\",\n- u\"grove\",\n- u\"habitualist\",\n- u\"hakiri\",\n- u\"hall\",\n- u\"harvest\",\n- u\"hipchat\",\n- u\"hostedgraphite\",\n- u\"hubcap\",\n- u\"hubci\",\n- u\"humbug\",\n- u\"icescrum\",\n- u\"irc\",\n- u\"irker\",\n- u\"ironmq\",\n- u\"ironworker\",\n- u\"jabber\",\n- u\"jaconda\",\n- u\"jeapie\",\n- u\"jenkins\",\n- u\"jenkinsgit\",\n- u\"jira\",\n- u\"jqueryplugins\",\n- u\"kanbanery\",\n- u\"kickoff\",\n- u\"leanto\",\n- u\"lechat\",\n- u\"lighthouse\",\n- u\"lingohub\",\n- u\"loggly\",\n- u\"mantisbt\",\n- u\"masterbranch\",\n- u\"mqttpub\",\n- u\"nma\",\n- u\"nodejitsu\",\n- u\"notifo\",\n- u\"ontime\",\n- u\"pachube\",\n- u\"packagist\",\n- u\"phraseapp\",\n- u\"pivotaltracker\",\n- u\"planbox\",\n- u\"planio\",\n- u\"prowl\",\n- u\"puppetlinter\",\n- u\"pushalot\",\n- u\"pushover\",\n- u\"pythonpackages\",\n- u\"railsbp\",\n- u\"railsbrakeman\",\n- u\"rally\",\n- u\"rapidpush\",\n- u\"rationaljazzhub\",\n- u\"rationalteamconcert\",\n- u\"rdocinfo\",\n- u\"readthedocs\",\n- u\"redmine\",\n- u\"rubyforge\",\n- u\"scrumdo\",\n- u\"shiningpanda\",\n- u\"sifter\",\n- u\"simperium\",\n- u\"slatebox\",\n- u\"snowyevening\",\n- u\"socialcast\",\n- u\"softlayermessaging\",\n- u\"sourcemint\",\n- u\"splendidbacon\",\n- u\"sprintly\",\n- u\"sqsqueue\",\n- u\"stackmob\",\n- u\"statusnet\",\n- u\"talker\",\n- u\"targetprocess\",\n- u\"tddium\",\n- u\"teamcity\",\n- u\"tender\",\n- u\"tenxer\",\n- u\"testpilot\",\n- u\"toggl\",\n- u\"trac\",\n- u\"trajectory\",\n- u\"travis\",\n- u\"trello\",\n- u\"twilio\",\n- u\"twitter\",\n- u\"unfuddle\",\n- u\"web\",\n- u\"weblate\",\n- u\"webtranslateit\",\n- u\"yammer\",\n- u\"youtrack\",\n- u\"zendesk\",\n- u\"zohoprojects\",\n+ \"activecollab\",\n+ \"acunote\",\n+ \"agilebench\",\n+ \"agilezen\",\n+ \"amazonsns\",\n+ \"apiary\",\n+ \"apoio\",\n+ \"appharbor\",\n+ \"apropos\",\n+ \"asana\",\n+ \"backlog\",\n+ \"bamboo\",\n+ \"basecamp\",\n+ \"bcx\",\n+ \"blimp\",\n+ \"boxcar\",\n+ \"buddycloud\",\n+ \"bugherd\",\n+ \"bugly\",\n+ \"bugzilla\",\n+ \"campfire\",\n+ \"cia\",\n+ \"circleci\",\n+ \"codeclimate\",\n+ \"codeportingcsharp2java\",\n+ \"codeship\",\n+ \"coffeedocinfo\",\n+ \"conductor\",\n+ \"coop\",\n+ \"copperegg\",\n+ \"cube\",\n+ \"depending\",\n+ \"deployhq\",\n+ \"devaria\",\n+ \"docker\",\n+ \"ducksboard\",\n+ \"email\",\n+ \"firebase\",\n+ \"fisheye\",\n+ \"flowdock\",\n+ \"fogbugz\",\n+ \"freckle\",\n+ \"friendfeed\",\n+ \"gemini\",\n+ \"gemnasium\",\n+ \"geocommit\",\n+ \"getlocalization\",\n+ \"gitlive\",\n+ \"grmble\",\n+ \"grouptalent\",\n+ \"grove\",\n+ \"habitualist\",\n+ \"hakiri\",\n+ \"hall\",\n+ \"harvest\",\n+ \"hipchat\",\n+ \"hostedgraphite\",\n+ \"hubcap\",\n+ \"hubci\",\n+ \"humbug\",\n+ \"icescrum\",\n+ \"irc\",\n+ \"irker\",\n+ \"ironmq\",\n+ \"ironworker\",\n+ \"jabber\",\n+ \"jaconda\",\n+ \"jeapie\",\n+ \"jenkins\",\n+ \"jenkinsgit\",\n+ \"jira\",\n+ \"jqueryplugins\",\n+ \"kanbanery\",\n+ \"kickoff\",\n+ \"leanto\",\n+ \"lechat\",\n+ \"lighthouse\",\n+ \"lingohub\",\n+ \"loggly\",\n+ \"mantisbt\",\n+ \"masterbranch\",\n+ \"mqttpub\",\n+ \"nma\",\n+ \"nodejitsu\",\n+ \"notifo\",\n+ \"ontime\",\n+ \"pachube\",\n+ \"packagist\",\n+ \"phraseapp\",\n+ \"pivotaltracker\",\n+ \"planbox\",\n+ \"planio\",\n+ \"prowl\",\n+ \"puppetlinter\",\n+ \"pushalot\",\n+ \"pushover\",\n+ \"pythonpackages\",\n+ \"railsbp\",\n+ \"railsbrakeman\",\n+ \"rally\",\n+ \"rapidpush\",\n+ \"rationaljazzhub\",\n+ \"rationalteamconcert\",\n+ \"rdocinfo\",\n+ \"readthedocs\",\n+ \"redmine\",\n+ \"rubyforge\",\n+ \"scrumdo\",\n+ \"shiningpanda\",\n+ \"sifter\",\n+ \"simperium\",\n+ \"slatebox\",\n+ \"snowyevening\",\n+ \"socialcast\",\n+ \"softlayermessaging\",\n+ \"sourcemint\",\n+ \"splendidbacon\",\n+ \"sprintly\",\n+ \"sqsqueue\",\n+ \"stackmob\",\n+ \"statusnet\",\n+ \"talker\",\n+ \"targetprocess\",\n+ \"tddium\",\n+ \"teamcity\",\n+ \"tender\",\n+ \"tenxer\",\n+ \"testpilot\",\n+ \"toggl\",\n+ \"trac\",\n+ \"trajectory\",\n+ \"travis\",\n+ \"trello\",\n+ \"twilio\",\n+ \"twitter\",\n+ \"unfuddle\",\n+ \"web\",\n+ \"weblate\",\n+ \"webtranslateit\",\n+ \"yammer\",\n+ \"youtrack\",\n+ \"zendesk\",\n+ \"zohoprojects\",\n ],\n )\n for hook in hooks:"},{"sha":"876d50fe8c3ea4749d8f547d06e055200fc5caff","filename":"tests/Branch.py","status":"modified","additions":18,"deletions":20,"changes":38,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranch.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranch.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FBranch.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -87,10 +85,10 @@ def testEditProtectionDismissalUsersWithUserOwnedBranch(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n- u\"message\": u\"Validation Failed\",\n- u\"errors\": [\n- u\"Only organization repositories can have users and team restrictions\"\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n+ \"message\": \"Validation Failed\",\n+ \"errors\": [\n+ \"Only organization repositories can have users and team restrictions\"\n ],\n },\n )\n@@ -104,10 +102,10 @@ def testEditProtectionPushRestrictionsWithUserOwnedBranch(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n- u\"message\": u\"Validation Failed\",\n- u\"errors\": [\n- u\"Only organization repositories can have users and team restrictions\"\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-branch-protection\",\n+ \"message\": \"Validation Failed\",\n+ \"errors\": [\n+ \"Only organization repositories can have users and team restrictions\"\n ],\n },\n )\n@@ -147,8 +145,8 @@ def testRemoveProtection(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#get-branch-protection\",\n- u\"message\": u\"Branch not protected\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#get-branch-protection\",\n+ \"message\": \"Branch not protected\",\n },\n )\n \n@@ -166,8 +164,8 @@ def testRemoveRequiredStatusChecks(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch\",\n- u\"message\": u\"Required status checks not enabled\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch\",\n+ \"message\": \"Required status checks not enabled\",\n },\n )\n \n@@ -193,8 +191,8 @@ def testEditRequiredPullRequestReviewsWithTooLargeApprovingReviewCount(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n- u\"message\": u\"Invalid request.\\n\\n9 must be less than or equal to 6.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n+ \"message\": \"Invalid request.\\n\\n9 must be less than or equal to 6.\",\n },\n )\n \n@@ -207,8 +205,8 @@ def testEditRequiredPullRequestReviewsWithUserBranchAndDismissalUsers(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n- u\"message\": u\"Dismissal restrictions are supported only for repositories owned by an organization.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch\",\n+ \"message\": \"Dismissal restrictions are supported only for repositories owned by an organization.\",\n },\n )\n \n@@ -295,8 +293,8 @@ def testRemovePushRestrictions(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/branches/#list-team-restrictions-of-protected-branch\",\n- u\"message\": u\"Push restrictions not enabled\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/branches/#list-team-restrictions-of-protected-branch\",\n+ \"message\": \"Push restrictions not enabled\",\n },\n )\n "},{"sha":"65a75d21e85338d8a7d15688bbeed469eaf1756f","filename":"tests/BranchProtection.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranchProtection.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FBranchProtection.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FBranchProtection.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"818371b5ab3f8e3b287e09dda55480a4ad2c83c7","filename":"tests/CheckRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCheckRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Dhruv Manilawala #"},{"sha":"9dafaeb69d5fbf06172bf06bcc81ff7461e62943","filename":"tests/CheckSuite.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckSuite.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCheckSuite.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCheckSuite.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"beb3d4885b8abb39b0f533b638e67fb478fac71b","filename":"tests/Commit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c51588e94135f1015d55dd84828b091e42fa423a","filename":"tests/CommitCombinedStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitCombinedStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitCombinedStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommitCombinedStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Jannis Gebauer #"},{"sha":"8f1a58fb4178c0de6ac540876cc0da5263168ef2","filename":"tests/CommitComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommitComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b94cf424256de155ba8b44a7b5a81a4692cf61de","filename":"tests/CommitStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FCommitStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FCommitStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a29eefdcf85e69f11fcd3166e72201316db0cf81","filename":"tests/ConditionalRequestUpdate.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConditionalRequestUpdate.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConditionalRequestUpdate.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FConditionalRequestUpdate.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 AKFish #"},{"sha":"a0869d3e4d6a43b07569fd9ff90a898f29e55eb9","filename":"tests/Connection.py","status":"modified","additions":4,"deletions":6,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConnection.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FConnection.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FConnection.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Adam Baratz #\n@@ -43,16 +41,16 @@\n \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\n{\\\"body\\\":\\\"BODY TEXT\\\"}\\n\\n\",\n ),\n (\n- u'{\"body\":\"BODY\\xa0TEXT\"}',\n- u\"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\n{\\\"body\\\":\\\"BODY\\xa0TEXT\\\"}\\n\\n\",\n+ '{\"body\":\"BODY\\xa0TEXT\"}',\n+ \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\n{\\\"body\\\":\\\"BODY\\xa0TEXT\\\"}\\n\\n\",\n ),\n (\n \"BODY TEXT\",\n \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\nBODY TEXT\\n\\n\",\n ),\n (\n- u\"BODY\\xa0TEXT\",\n- u\"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\nBODY\\xa0TEXT\\n\\n\",\n+ \"BODY\\xa0TEXT\",\n+ \"\\nGET\\napi.github.com\\nNone\\n/user\\n{'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'}\\nNone\\n200\\n[]\\nBODY\\xa0TEXT\\n\\n\",\n ),\n ],\n )"},{"sha":"1b3c61fba810c9f0b791fb2e56bbce50d75052bd","filename":"tests/ContentFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FContentFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FContentFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FContentFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b0c2fbcb4a800e2f5c4dda05415238e5ef7a04f5","filename":"tests/Deployment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeployment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeployment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FDeployment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"0b4a2266802318f92759749d99340dc208bf09d4","filename":"tests/DeploymentStatus.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeploymentStatus.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDeploymentStatus.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FDeploymentStatus.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Colby Gallup #"},{"sha":"d1c3e752702a9c9441cd67426a28ea3a66b42b38","filename":"tests/Download.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDownload.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FDownload.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FDownload.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"b0a5ee4d9d4a1cf89daa4b840b4efd2e8d16a7ee","filename":"tests/Enterprise.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEnterprise.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEnterprise.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FEnterprise.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"ed2d01b7f8886407ec701fe4485cb3fda4edbb83","filename":"tests/Equality.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEquality.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEquality.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FEquality.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"1be98f42d4b631855b3784e2933b529d14d76d49","filename":"tests/Event.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6b9edc5ee482f23e00e5ef5533584356d942d410","filename":"tests/Exceptions.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExceptions.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExceptions.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FExceptions.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6a8022b582c94f83eb0cd0caa6b8f3b5da630d9a","filename":"tests/ExposeAllAttributes.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExposeAllAttributes.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FExposeAllAttributes.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FExposeAllAttributes.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"fce12927e86852ac0dc8a6289d5bfdd071d5ba39","filename":"tests/Framework.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FFramework.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FFramework.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FFramework.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -132,7 +130,7 @@ def close(self):\n return self.__cnx.close()\n \n def __writeLine(self, line):\n- self.__file.write(str(line) + u\"\\n\")\n+ self.__file.write(str(line) + \"\\n\")\n \n \n class RecordingHttpConnection(RecordingConnection):\n@@ -314,7 +312,7 @@ def __openFile(self, mode):\n if fileName != self.__fileName:\n self.__closeReplayFileIfNeeded()\n self.__fileName = fileName\n- self.__file = io.open(self.__fileName, mode, encoding=\"utf-8\")\n+ self.__file = open(self.__fileName, mode, encoding=\"utf-8\")\n return self.__file\n \n def __closeReplayFileIfNeeded(self):"},{"sha":"a2127d3a07292ce753dac73b27fdb6e9afebbe0e","filename":"tests/Gist.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGist.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGist.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGist.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"0853fc2f6ddcff50e5a9ad667bba9452f4b3b9eb","filename":"tests/GistComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGistComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGistComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGistComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"881378fa7df621a6a891c54291e4df752ee4b1b6","filename":"tests/GitBlob.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitBlob.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitBlob.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitBlob.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"665645374fd9ddc528d2b104b2a26eca927eeb0c","filename":"tests/GitCommit.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitCommit.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitCommit.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitCommit.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"acb8e7cd56054834792baef1809bdc96ce758c0e","filename":"tests/GitMembership.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitMembership.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitMembership.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitMembership.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Steve English #"},{"sha":"726d9cab95a3177ee4c0e21a10817e524220c3cd","filename":"tests/GitRef.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRef.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRef.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitRef.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6e4cc5a8afdfb0d427afc31132c1926cdeb68d94","filename":"tests/GitRelease.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRelease.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitRelease.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitRelease.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2015 Ed Holland #\n@@ -141,7 +139,7 @@ def testAttributes(self):\n self.assertEqual(release.author.type, \"User\")\n self.assertEqual(\n release.html_url,\n- \"https://github.com/{}/{}/releases/tag/{}\".format(user, repo_name, tag),\n+ f\"https://github.com/{user}/{repo_name}/releases/tag/{tag}\",\n )\n self.assertEqual(release.created_at, create_date)\n self.assertEqual(release.published_at, publish_date)"},{"sha":"d827282fd3385b304b6fa6d9afa1f0659e81f3a8","filename":"tests/GitTag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"69718f2ed77322800f9982f1572d9b89eab48d0f","filename":"tests/GitTree.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTree.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGitTree.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGitTree.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"63ea3209955486970f2e64ff248d7acfacc37f7f","filename":"tests/GithubApp.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubApp.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubApp.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubApp.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Raju Subramanian #"},{"sha":"272f50db45fc0011193b978b55cdda588485fdde","filename":"tests/GithubIntegration.py","status":"modified","additions":26,"deletions":26,"changes":52,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubIntegration.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithubIntegration.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithubIntegration.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -51,7 +51,7 @@ def setUp(self):\n self.origin_time = sys.modules[\"time\"].time\n sys.modules[\"time\"].time = lambda: 1550055331.7435968\n \n- class Mock(object):\n+ class Mock:\n def __init__(self):\n self.args = tuple()\n self.kwargs = dict()\n@@ -66,8 +66,8 @@ def json(self):\n @property\n def text(self):\n return (\n- u'{\"token\": \"v1.ce63424bc55028318325caac4f4c3a5378ca0038\",'\n- u'\"expires_at\": \"2019-02-13T11:10:38Z\"}'\n+ '{\"token\": \"v1.ce63424bc55028318325caac4f4c3a5378ca0038\",'\n+ '\"expires_at\": \"2019-02-13T11:10:38Z\"}'\n )\n \n def __call__(self, *args, **kwargs):\n@@ -79,7 +79,7 @@ def __call__(self, *args, **kwargs):\n self.mock = Mock()\n sys.modules[\"requests\"].post = self.mock\n \n- class GetMock(object):\n+ class GetMock:\n def __init__(self):\n self.args = tuple()\n self.kwargs = dict()\n@@ -95,28 +95,28 @@ def json(self):\n @property\n def text(self):\n return (\n- u'{\"id\":111111,\"account\":{\"login\":\"foo\",\"id\":11111111,'\n- u'\"node_id\":\"foobar\",'\n- u'\"avatar_url\":\"https://avatars3.githubusercontent.com/u/11111111?v=4\",'\n- u'\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/foo\",'\n- u'\"html_url\":\"https://github.com/foo\",'\n- u'\"followers_url\":\"https://api.github.com/users/foo/followers\",'\n- u'\"following_url\":\"https://api.github.com/users/foo/following{/other_user}\",'\n- u'\"gists_url\":\"https://api.github.com/users/foo/gists{/gist_id}\",'\n- u'\"starred_url\":\"https://api.github.com/users/foo/starred{/owner}{/repo}\",'\n- u'\"subscriptions_url\":\"https://api.github.com/users/foo/subscriptions\",'\n- u'\"organizations_url\":\"https://api.github.com/users/foo/orgs\",'\n- u'\"repos_url\":\"https://api.github.com/users/foo/repos\",'\n- u'\"events_url\":\"https://api.github.com/users/foo/events{/privacy}\",'\n- u'\"received_events_url\":\"https://api.github.com/users/foo/received_events\",'\n- u'\"type\":\"Organization\",\"site_admin\":false},\"repository_selection\":\"all\",'\n- u'\"access_tokens_url\":\"https://api.github.com/app/installations/111111/access_tokens\",'\n- u'\"repositories_url\":\"https://api.github.com/installation/repositories\",'\n- u'\"html_url\":\"https://github.com/organizations/foo/settings/installations/111111\",'\n- u'\"app_id\":11111,\"target_id\":11111111,\"target_type\":\"Organization\",'\n- u'\"permissions\":{\"issues\":\"write\",\"pull_requests\":\"write\",\"statuses\":\"write\",\"contents\":\"read\",'\n- u'\"metadata\":\"read\"},\"events\":[\"pull_request\",\"release\"],\"created_at\":\"2019-04-17T16:10:37.000Z\",'\n- u'\"updated_at\":\"2019-05-03T06:27:48.000Z\",\"single_file_name\":null}'\n+ '{\"id\":111111,\"account\":{\"login\":\"foo\",\"id\":11111111,'\n+ '\"node_id\":\"foobar\",'\n+ '\"avatar_url\":\"https://avatars3.githubusercontent.com/u/11111111?v=4\",'\n+ '\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/foo\",'\n+ '\"html_url\":\"https://github.com/foo\",'\n+ '\"followers_url\":\"https://api.github.com/users/foo/followers\",'\n+ '\"following_url\":\"https://api.github.com/users/foo/following{/other_user}\",'\n+ '\"gists_url\":\"https://api.github.com/users/foo/gists{/gist_id}\",'\n+ '\"starred_url\":\"https://api.github.com/users/foo/starred{/owner}{/repo}\",'\n+ '\"subscriptions_url\":\"https://api.github.com/users/foo/subscriptions\",'\n+ '\"organizations_url\":\"https://api.github.com/users/foo/orgs\",'\n+ '\"repos_url\":\"https://api.github.com/users/foo/repos\",'\n+ '\"events_url\":\"https://api.github.com/users/foo/events{/privacy}\",'\n+ '\"received_events_url\":\"https://api.github.com/users/foo/received_events\",'\n+ '\"type\":\"Organization\",\"site_admin\":false},\"repository_selection\":\"all\",'\n+ '\"access_tokens_url\":\"https://api.github.com/app/installations/111111/access_tokens\",'\n+ '\"repositories_url\":\"https://api.github.com/installation/repositories\",'\n+ '\"html_url\":\"https://github.com/organizations/foo/settings/installations/111111\",'\n+ '\"app_id\":11111,\"target_id\":11111111,\"target_type\":\"Organization\",'\n+ '\"permissions\":{\"issues\":\"write\",\"pull_requests\":\"write\",\"statuses\":\"write\",\"contents\":\"read\",'\n+ '\"metadata\":\"read\"},\"events\":[\"pull_request\",\"release\"],\"created_at\":\"2019-04-17T16:10:37.000Z\",'\n+ '\"updated_at\":\"2019-05-03T06:27:48.000Z\",\"single_file_name\":null}'\n )\n \n def __call__(self, *args, **kwargs):"},{"sha":"3e7027518c115761e9207dafa316ce1b2c7b68bc","filename":"tests/Github_.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithub_.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FGithub_.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FGithub_.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"86c0257ae135e52ba4372f95077301f16d84a63d","filename":"tests/Hook.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FHook.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FHook.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FHook.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"bb2014b33325a5ff32889967f5811519ebcfa712","filename":"tests/Issue.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"6a4046aa4ffd6b51841f6a996ff45430c5a1fc5e","filename":"tests/Issue131.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue131.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue131.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue131.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"78a24452cf7eaee05881c14f4c499cdf7a29baed","filename":"tests/Issue133.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue133.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue133.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue133.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"13d971c26391346dc77bee50d471fcf8aea8d73b","filename":"tests/Issue134.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue134.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue134.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue134.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"bcc44da7bc3955ab5ead5974714787ecc504a613","filename":"tests/Issue139.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue139.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue139.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue139.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"e5433f4339514de4a25a1516b0e6da58ed6143e1","filename":"tests/Issue140.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue140.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue140.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue140.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"4f5f8fb244fa258f7c65a046c1812967fbf3e654","filename":"tests/Issue142.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue142.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue142.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue142.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"dfe55a44fa37ef82a051c70d71d9a6a37729e750","filename":"tests/Issue158.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue158.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue158.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue158.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"11b57c996ea1a46d149a9eca7b6eb9de5286f5fb","filename":"tests/Issue174.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue174.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue174.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue174.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"9aea863e1e68e1b683b1167f7af70d23be8a7698","filename":"tests/Issue214.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue214.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue214.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue214.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 David Farr #"},{"sha":"988467167f4739f70bb90f14bfc03d1c776ebf8b","filename":"tests/Issue216.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue216.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue216.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue216.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"6b46c2c71f328e160d535f513f415340f9c80c4f","filename":"tests/Issue278.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue278.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue278.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue278.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2014 Vincent Jacques #"},{"sha":"a260fe521bb1b80be5e4ee8877e3f1f67340e3dd","filename":"tests/Issue33.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue33.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue33.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue33.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"105351074187707d09ad4da0d7c6acdcad5bbe39","filename":"tests/Issue494.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue494.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue494.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue494.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Sam Corbett #\n@@ -34,7 +32,7 @@ def setUp(self):\n \n def testRepr(self):\n expected = (\n- u'PullRequest(title=\"Change SetHostnameCustomizer to check if '\n- u'/etc/sysconfig/network exist…\", number=465)'\n+ 'PullRequest(title=\"Change SetHostnameCustomizer to check if '\n+ '/etc/sysconfig/network exist…\", number=465)'\n )\n self.assertEqual(self.pull.__repr__(), expected)"},{"sha":"81c7dd6f53b588772f4bd0b87a12d4cb49653c70","filename":"tests/Issue50.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue50.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue50.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue50.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"d93ca051a950887e12c2d0703174c2335e48dd1b","filename":"tests/Issue54.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue54.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue54.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue54.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f30a738c014c204ca6fce1374a5552b66eb80c6e","filename":"tests/Issue572.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue572.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue572.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue572.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Shinichi TAMURA #"},{"sha":"11fcd49f034a24c83bfa7599dfcd15da679e725c","filename":"tests/Issue80.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue80.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue80.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue80.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"5f31412be0e1c36fa315755a3b9a8f3491e78376","filename":"tests/Issue823.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue823.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue823.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue823.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"d78e755dc9eb828ba1b8d118a23781804daa4964","filename":"tests/Issue87.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue87.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue87.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue87.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a08e0c9dd2c5fcb4cc9c31d6540d88972095e2d5","filename":"tests/Issue937.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue937.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue937.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue937.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Vinay Hegde #"},{"sha":"59f812b656cc41437522df6ea411b06bd368746b","filename":"tests/Issue945.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue945.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssue945.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssue945.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Kelvin Wong (https://github.com/netsgnut) #"},{"sha":"f517a712edbb4da23fc2339586596e72eaf854ac","filename":"tests/IssueComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssueComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"837d7bb00cd21f352e43d0e7fc018e6fb6144d8a","filename":"tests/IssueEvent.py","status":"modified","additions":5,"deletions":7,"changes":12,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueEvent.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FIssueEvent.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FIssueEvent.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -420,8 +418,8 @@ def testEvent_renamed_Attributes(self):\n self.assertEqual(\n self.event_renamed.rename,\n {\n- u\"to\": u\"Adding new attributes to IssueEvent\",\n- u\"from\": u\"Adding new attributes to IssueEvent Object (DO NOT MERGE - SEE NOTES)\",\n+ \"to\": \"Adding new attributes to IssueEvent\",\n+ \"from\": \"Adding new attributes to IssueEvent Object (DO NOT MERGE - SEE NOTES)\",\n },\n )\n self.assertEqual(self.event_renamed.dismissed_review, None)\n@@ -663,9 +661,9 @@ def testEvent_review_dismissed_Attributes(self):\n self.assertEqual(\n self.event_review_dismissed.dismissed_review,\n {\n- u\"dismissal_message\": u\"dismiss\",\n- u\"state\": u\"changes_requested\",\n- u\"review_id\": 145431295,\n+ \"dismissal_message\": \"dismiss\",\n+ \"state\": \"changes_requested\",\n+ \"review_id\": 145431295,\n },\n )\n self.assertEqual(self.event_review_dismissed.lock_reason, None)"},{"sha":"1006554425bd118f8fb263a950fa8e3f712c0d47","filename":"tests/Label.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLabel.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLabel.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FLabel.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"57a956c69cd305e83006f7bd92adcd592e87577a","filename":"tests/License.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLicense.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLicense.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FLicense.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Wan Liuyang #"},{"sha":"3f277f618e36eed68bebae6ae8154a75bbef1ee0","filename":"tests/Logging_.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLogging_.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FLogging_.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FLogging_.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -62,7 +60,7 @@ def debug(\n output,\n ):\n self.verb = verb\n- self.url = \"%s://%s%s\" % (scheme, hostname, fragment)\n+ self.url = f\"{scheme}://{hostname}{fragment}\"\n self.requestHeaders = requestHeaders\n self.input = input_\n self.status = status"},{"sha":"bc19651f45f777ab44b63f9bcea1538ed8dbd367","filename":"tests/Markdown.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMarkdown.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMarkdown.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FMarkdown.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f503a6d275c244fe81dab39c63d8e6d9ab970bd8","filename":"tests/Migration.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMigration.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMigration.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FMigration.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"82da26894cacdee6beaea46cf151c0fed1ea9a25","filename":"tests/Milestone.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMilestone.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FMilestone.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FMilestone.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"42dba7bcc3a664666e86de3e9bef6022ad1db137","filename":"tests/NamedUser.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FNamedUser.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"bd7804dcfc555efb945760f0e236b2638423f986","filename":"tests/NamedUser1430.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser1430.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNamedUser1430.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FNamedUser1430.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Anuj Bansal #"},{"sha":"44f937f2335c0cfd2b8c8f99ff7544f9e099c9f5","filename":"tests/Notification.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNotification.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FNotification.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FNotification.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"de59a52383750e66175c213e542a7aa8fbea711f","filename":"tests/Organization.py","status":"modified","additions":2,"deletions":4,"changes":6,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FOrganization.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -389,8 +387,8 @@ def testInviteUserAsNonOwner(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/orgs/members/#create-organization-invitation\",\n- u\"message\": u\"You must be an admin to create an invitation to an organization.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/orgs/members/#create-organization-invitation\",\n+ \"message\": \"You must be an admin to create an invitation to an organization.\",\n },\n )\n "},{"sha":"55bea2436e4b3e2a53950c0ed7263ffe4e9c00b4","filename":"tests/Organization1437.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization1437.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganization1437.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FOrganization1437.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Anuj Bansal #"},{"sha":"5977198f413ead1f4cba0c76cbf428702c16f67a","filename":"tests/OrganizationHasInMembers.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganizationHasInMembers.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FOrganizationHasInMembers.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FOrganizationHasInMembers.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2016 Matthew Neal #"},{"sha":"ae06e90257846a448d228f98660a6a5f5e291b38","filename":"tests/PaginatedList.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPaginatedList.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPaginatedList.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPaginatedList.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"e5e45ae35d033ca0623c38f1062193cc214b20d8","filename":"tests/Persistence.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPersistence.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPersistence.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPersistence.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"489e0846fe7fe45a2e387d0886a20f53b309c1c6","filename":"tests/Project.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FProject.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n # ########################## Copyrights and license ############################\n # #\n # Copyright 2018 bbi-yggy #"},{"sha":"63ba64e1f02c2c0e6c2998b992841948be6a30d3","filename":"tests/Project1434.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject1434.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProject1434.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FProject1434.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n # ########################## Copyrights and license ############################\n # #\n # Copyright 2020 Anuj Bansal #"},{"sha":"7df02fa58a5cad870c959a9244844ef128281d52","filename":"tests/ProjectColumn.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProjectColumn.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FProjectColumn.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FProjectColumn.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n # ########################## Copyrights and license ############################\n # #\n # This file is part of PyGithub. #"},{"sha":"a52dd3ca526d18b606ce2853d73a4f29d54f18be","filename":"tests/PullRequest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"3570500567dee9a96a819028731a33b63d12d7be","filename":"tests/PullRequest1168.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1168.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1168.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1168.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Olof-Joachim Frahm #"},{"sha":"dd7730d38cc7680148142c6126d2dabe2af2b5b0","filename":"tests/PullRequest1169.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1169.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1169.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1169.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Olof-Joachim Frahm #"},{"sha":"21a698368d0a49174e5e311da4b4a983bfcac5f0","filename":"tests/PullRequest1375.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1375.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1375.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1375.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Olof-Joachim Frahm #"},{"sha":"29006b8c4dbdca6ae7de5b53ed00de68eed2e9d7","filename":"tests/PullRequest1682.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1682.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequest1682.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequest1682.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\r\n-\r\n ############################ Copyrights and license ############################\r\n # #\r\n # Copyright 2020 Victor Zeng #\r"},{"sha":"2c9bb454061201e18d28a0f840533c17fa2f70d8","filename":"tests/PullRequestComment.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestComment.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestComment.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequestComment.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"025af8dbc5a88c682a4bfd5132cae6fc824dfa10","filename":"tests/PullRequestFile.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestFile.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestFile.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequestFile.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"a2e317cc462a0d3277607ffd0a8337fcf576fcc6","filename":"tests/PullRequestReview.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestReview.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FPullRequestReview.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FPullRequestReview.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Aaron Levine #"},{"sha":"d8bd7a3b4ed1a87993cd6ff24ac36e1b3f4a9ab9","filename":"tests/RateLimiting.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRateLimiting.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRateLimiting.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRateLimiting.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"963231b1fd0f37132fe7768db1ec47dad360b502","filename":"tests/RawData.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRawData.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRawData.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRawData.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2013 Vincent Jacques #"},{"sha":"a9aa619a04c960ac6fa9eaf0e906eeb9a1c6b790","filename":"tests/Reaction.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReaction.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReaction.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReaction.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Nicolas Agustín Torres #"},{"sha":"d0b8af387482b241940e6fcfcf4b0b1089c6bc1a","filename":"tests/ReleaseAsset.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReleaseAsset.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FReleaseAsset.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FReleaseAsset.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2017 Chris McBride #"},{"sha":"88e6aa8d43fe4d51e18c48e809275933451cf9da","filename":"tests/Repository.py","status":"modified","additions":11,"deletions":13,"changes":24,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepository.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepository.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRepository.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #\n@@ -473,8 +471,8 @@ def testCollaboratorPermissionNoPushAccess(self):\n self.assertEqual(\n raisedexp.exception.data,\n {\n- u\"documentation_url\": u\"https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level\",\n- u\"message\": u\"Must have push access to view collaborator permission.\",\n+ \"documentation_url\": \"https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level\",\n+ \"message\": \"Must have push access to view collaborator permission.\",\n },\n )\n \n@@ -1094,12 +1092,12 @@ def testGetStargazersWithDates(self):\n stargazers,\n lambda stargazer: (stargazer.starred_at, stargazer.user.login),\n [\n- (datetime.datetime(2014, 8, 13, 19, 22, 5), u\"sAlexander\"),\n- (datetime.datetime(2014, 10, 15, 5, 2, 30), u\"ThomasG77\"),\n- (datetime.datetime(2015, 4, 14, 15, 22, 40), u\"therusek\"),\n- (datetime.datetime(2015, 4, 29, 0, 9, 40), u\"athomann\"),\n- (datetime.datetime(2015, 4, 29, 14, 26, 46), u\"jcapron\"),\n- (datetime.datetime(2015, 5, 9, 19, 14, 45), u\"JoePython1\"),\n+ (datetime.datetime(2014, 8, 13, 19, 22, 5), \"sAlexander\"),\n+ (datetime.datetime(2014, 10, 15, 5, 2, 30), \"ThomasG77\"),\n+ (datetime.datetime(2015, 4, 14, 15, 22, 40), \"therusek\"),\n+ (datetime.datetime(2015, 4, 29, 0, 9, 40), \"athomann\"),\n+ (datetime.datetime(2015, 4, 29, 14, 26, 46), \"jcapron\"),\n+ (datetime.datetime(2015, 5, 9, 19, 14, 45), \"JoePython1\"),\n ],\n )\n self.assertEqual(repr(stargazers[0]), 'Stargazer(user=\"sAlexander\")')\n@@ -1248,7 +1246,7 @@ def testGetDeployments(self):\n \n def testCreateFile(self):\n newFile = \"doc/testCreateUpdateDeleteFile.md\"\n- content = \"Hello world\".encode()\n+ content = b\"Hello world\"\n author = github.InputGitAuthor(\n \"Enix Yu\", \"enix223@163.com\", \"2016-01-15T16:13:30+12:00\"\n )\n@@ -1666,7 +1664,7 @@ def testGetLicense(self):\n \n def testGetTopics(self):\n topic_list = self.repo.get_topics()\n- topic = u\"github\"\n+ topic = \"github\"\n self.assertIn(topic, topic_list)\n \n def testReplaceTopics(self):\n@@ -1691,7 +1689,7 @@ class LazyRepository(Framework.TestCase):\n def setUp(self):\n super().setUp()\n self.user = self.g.get_user()\n- self.repository_name = \"%s/%s\" % (self.user.login, \"PyGithub\")\n+ self.repository_name = \"{}/{}\".format(self.user.login, \"PyGithub\")\n \n def getLazyRepository(self):\n return self.g.get_repo(self.repository_name, lazy=True)"},{"sha":"4e290ab5d901a44e6dfead8253d02aeb871376ed","filename":"tests/RepositoryKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepositoryKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRepositoryKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRepositoryKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"f1c3d2d0af1f013b265408aed52ed8ecd1ec81dd","filename":"tests/RequiredPullRequestReviews.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredPullRequestReviews.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredPullRequestReviews.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRequiredPullRequestReviews.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"882c57c55a0fb838921448798c49261b42d5c118","filename":"tests/RequiredStatusChecks.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredStatusChecks.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRequiredStatusChecks.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRequiredStatusChecks.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Steve Kowalik #"},{"sha":"940d405848b2609feee66e507956aa828120d423","filename":"tests/Retry.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRetry.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FRetry.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FRetry.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"f7e2ffe175a990f0d5b6c24981c10e6993c5bcbf","filename":"tests/Search.py","status":"modified","additions":115,"deletions":117,"changes":232,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSearch.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSearch.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FSearch.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2014 Vincent Jacques #\n@@ -43,41 +41,41 @@ def testPaginateSearchUsers(self):\n users,\n lambda u: u.login,\n [\n- u\"cloudhead\",\n- u\"felixge\",\n- u\"sferik\",\n- u\"rkh\",\n- u\"jezdez\",\n- u\"janl\",\n- u\"marijnh\",\n- u\"nikic\",\n- u\"igorw\",\n- u\"froschi\",\n- u\"svenfuchs\",\n- u\"omz\",\n- u\"chad\",\n- u\"bergie\",\n- u\"roidrage\",\n- u\"pcalcado\",\n- u\"durran\",\n- u\"hukl\",\n- u\"mttkay\",\n- u\"aFarkas\",\n- u\"ole\",\n- u\"hagenburger\",\n- u\"jberkel\",\n- u\"naderman\",\n- u\"joshk\",\n- u\"pudo\",\n- u\"robb\",\n- u\"josephwilk\",\n- u\"hanshuebner\",\n- u\"txus\",\n- u\"paulasmuth\",\n- u\"splitbrain\",\n- u\"langalex\",\n- u\"bendiken\",\n- u\"stefanw\",\n+ \"cloudhead\",\n+ \"felixge\",\n+ \"sferik\",\n+ \"rkh\",\n+ \"jezdez\",\n+ \"janl\",\n+ \"marijnh\",\n+ \"nikic\",\n+ \"igorw\",\n+ \"froschi\",\n+ \"svenfuchs\",\n+ \"omz\",\n+ \"chad\",\n+ \"bergie\",\n+ \"roidrage\",\n+ \"pcalcado\",\n+ \"durran\",\n+ \"hukl\",\n+ \"mttkay\",\n+ \"aFarkas\",\n+ \"ole\",\n+ \"hagenburger\",\n+ \"jberkel\",\n+ \"naderman\",\n+ \"joshk\",\n+ \"pudo\",\n+ \"robb\",\n+ \"josephwilk\",\n+ \"hanshuebner\",\n+ \"txus\",\n+ \"paulasmuth\",\n+ \"splitbrain\",\n+ \"langalex\",\n+ \"bendiken\",\n+ \"stefanw\",\n ],\n )\n self.assertEqual(users.totalCount, 6038)\n@@ -87,36 +85,36 @@ def testGetPageOnSearchUsers(self):\n self.assertEqual(\n [u.login for u in users.get_page(7)],\n [\n- u\"ursachec\",\n- u\"bitboxer\",\n- u\"fs111\",\n- u\"michenriksen\",\n- u\"witsch\",\n- u\"booo\",\n- u\"mortice\",\n- u\"r0man\",\n- u\"MikeBild\",\n- u\"mhagger\",\n- u\"bkw\",\n- u\"fwbrasil\",\n- u\"mschneider\",\n- u\"lydiapintscher\",\n- u\"asksven\",\n- u\"iamtimm\",\n- u\"sneak\",\n- u\"kr1sp1n\",\n- u\"Feh\",\n- u\"GordonLesti\",\n- u\"annismckenzie\",\n- u\"eskimoblood\",\n- u\"tsujigiri\",\n- u\"riethmayer\",\n- u\"lauritzthamsen\",\n- u\"scotchi\",\n- u\"peritor\",\n- u\"toto\",\n- u\"hwaxxer\",\n- u\"lukaszklis\",\n+ \"ursachec\",\n+ \"bitboxer\",\n+ \"fs111\",\n+ \"michenriksen\",\n+ \"witsch\",\n+ \"booo\",\n+ \"mortice\",\n+ \"r0man\",\n+ \"MikeBild\",\n+ \"mhagger\",\n+ \"bkw\",\n+ \"fwbrasil\",\n+ \"mschneider\",\n+ \"lydiapintscher\",\n+ \"asksven\",\n+ \"iamtimm\",\n+ \"sneak\",\n+ \"kr1sp1n\",\n+ \"Feh\",\n+ \"GordonLesti\",\n+ \"annismckenzie\",\n+ \"eskimoblood\",\n+ \"tsujigiri\",\n+ \"riethmayer\",\n+ \"lauritzthamsen\",\n+ \"scotchi\",\n+ \"peritor\",\n+ \"toto\",\n+ \"hwaxxer\",\n+ \"lukaszklis\",\n ],\n )\n \n@@ -128,41 +126,41 @@ def testSearchRepos(self):\n repos,\n lambda r: r.full_name,\n [\n- u\"kennethreitz/legit\",\n- u\"RuudBurger/CouchPotatoV1\",\n- u\"gelstudios/gitfiti\",\n- u\"gpjt/webgl-lessons\",\n- u\"jacquev6/PyGithub\",\n- u\"aaasen/github_globe\",\n- u\"hmason/gitmarks\",\n- u\"dnerdy/factory_boy\",\n- u\"binaryage/drydrop\",\n- u\"bgreenlee/sublime-github\",\n- u\"karan/HackerNewsAPI\",\n- u\"mfenniak/pyPdf\",\n- u\"skazhy/github-decorator\",\n- u\"llvmpy/llvmpy\",\n- u\"lexrupy/gmate\",\n- u\"ask/python-github2\",\n- u\"audreyr/cookiecutter-pypackage\",\n- u\"tabo/django-treebeard\",\n- u\"dbr/tvdb_api\",\n- u\"jchris/couchapp\",\n- u\"joeyespo/grip\",\n- u\"nigelsmall/py2neo\",\n- u\"ask/chishop\",\n- u\"sigmavirus24/github3.py\",\n- u\"jsmits/github-cli\",\n- u\"lincolnloop/django-layout\",\n- u\"amccloud/django-project-skel\",\n- u\"Stiivi/brewery\",\n- u\"webpy/webpy.github.com\",\n- u\"dustin/py-github\",\n- u\"logsol/Github-Auto-Deploy\",\n- u\"cloudkick/libcloud\",\n- u\"berkerpeksag/github-badge\",\n- u\"bitprophet/ssh\",\n- u\"azavea/OpenTreeMap\",\n+ \"kennethreitz/legit\",\n+ \"RuudBurger/CouchPotatoV1\",\n+ \"gelstudios/gitfiti\",\n+ \"gpjt/webgl-lessons\",\n+ \"jacquev6/PyGithub\",\n+ \"aaasen/github_globe\",\n+ \"hmason/gitmarks\",\n+ \"dnerdy/factory_boy\",\n+ \"binaryage/drydrop\",\n+ \"bgreenlee/sublime-github\",\n+ \"karan/HackerNewsAPI\",\n+ \"mfenniak/pyPdf\",\n+ \"skazhy/github-decorator\",\n+ \"llvmpy/llvmpy\",\n+ \"lexrupy/gmate\",\n+ \"ask/python-github2\",\n+ \"audreyr/cookiecutter-pypackage\",\n+ \"tabo/django-treebeard\",\n+ \"dbr/tvdb_api\",\n+ \"jchris/couchapp\",\n+ \"joeyespo/grip\",\n+ \"nigelsmall/py2neo\",\n+ \"ask/chishop\",\n+ \"sigmavirus24/github3.py\",\n+ \"jsmits/github-cli\",\n+ \"lincolnloop/django-layout\",\n+ \"amccloud/django-project-skel\",\n+ \"Stiivi/brewery\",\n+ \"webpy/webpy.github.com\",\n+ \"dustin/py-github\",\n+ \"logsol/Github-Auto-Deploy\",\n+ \"cloudkick/libcloud\",\n+ \"berkerpeksag/github-badge\",\n+ \"bitprophet/ssh\",\n+ \"azavea/OpenTreeMap\",\n ],\n )\n \n@@ -202,7 +200,7 @@ def testSearchTopics(self):\n self.assertListKeyBegin(\n topics,\n lambda r: r.name,\n- [u\"python\", u\"django\", u\"flask\", u\"ruby\", u\"scikit-learn\", u\"wagtail\"],\n+ [\"python\", \"django\", \"flask\", \"ruby\", \"scikit-learn\", \"wagtail\"],\n )\n \n def testPaginateSearchTopics(self):\n@@ -215,20 +213,20 @@ def testSearchCode(self):\n files,\n lambda f: f.name,\n [\n- u\"Commit.setUp.txt\",\n- u\"PullRequest.testGetFiles.txt\",\n- u\"NamedUser.testGetEvents.txt\",\n- u\"PullRequest.testCreateComment.txt\",\n- u\"PullRequestFile.setUp.txt\",\n- u\"Repository.testGetIssuesWithWildcards.txt\",\n- u\"Repository.testGetIssuesWithArguments.txt\",\n- u\"test_ebnf.cpp\",\n- u\"test_abnf.cpp\",\n- u\"PullRequestFile.py\",\n- u\"SystemCalls.py\",\n- u\"tests.py\",\n- u\"LexerTestCase.py\",\n- u\"ParserTestCase.py\",\n+ \"Commit.setUp.txt\",\n+ \"PullRequest.testGetFiles.txt\",\n+ \"NamedUser.testGetEvents.txt\",\n+ \"PullRequest.testCreateComment.txt\",\n+ \"PullRequestFile.setUp.txt\",\n+ \"Repository.testGetIssuesWithWildcards.txt\",\n+ \"Repository.testGetIssuesWithArguments.txt\",\n+ \"test_ebnf.cpp\",\n+ \"test_abnf.cpp\",\n+ \"PullRequestFile.py\",\n+ \"SystemCalls.py\",\n+ \"tests.py\",\n+ \"LexerTestCase.py\",\n+ \"ParserTestCase.py\",\n ],\n )\n self.assertEqual(files[0].repository.full_name, \"jacquev6/PyGithub\")"},{"sha":"f464d8c7756b3f15006b06a97a5554689531a010","filename":"tests/SelfHostedActionsRunner.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSelfHostedActionsRunner.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSelfHostedActionsRunner.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FSelfHostedActionsRunner.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\r\n-\r\n ############################ Copyrights and license ############################\r\n # #\r\n # Copyright 2020 Victor Zeng #\r"},{"sha":"4d97ac970a00ea1787d9dc65ca023be16e892ef6","filename":"tests/SourceImport.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSourceImport.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FSourceImport.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FSourceImport.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Hayden Fuss #"},{"sha":"270e2d88a14564f6097283c84b8dbf1e792ac5fb","filename":"tests/Tag.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTag.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTag.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTag.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"c2d9d46bff5d68844afd16b5b56030afa4b49a75","filename":"tests/Team.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTeam.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTeam.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTeam.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"8bdfeaaf037cdf07efa1b24b42e7a36410ab969d","filename":"tests/Topic.py","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTopic.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTopic.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTopic.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2019 Adam Baratz #\n@@ -55,7 +53,7 @@ def testAllFields(self):\n self.assertEqual(topic.curated, True)\n self.assertEqual(topic.score, 7576.306)\n \n- self.assertEqual(topic.__repr__(), u'Topic(name=\"python\")')\n+ self.assertEqual(topic.__repr__(), 'Topic(name=\"python\")')\n \n def testNamesFromSearchResults(self):\n expected_names = ["},{"sha":"7dfe6dcc7421df0b3a81f06d31b220d6557a8baf","filename":"tests/Traffic.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTraffic.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FTraffic.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FTraffic.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2018 Justin Kufro #"},{"sha":"36cf3d18b5e94b885a11188b72d848bd8d777015","filename":"tests/UserKey.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FUserKey.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FUserKey.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FUserKey.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"4f8ead191a6a86df5b821880cbfabc6be99de8fa","filename":"tests/Workflow.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflow.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflow.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FWorkflow.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"02054bd707942c4f02705bc83c87769e1003390b","filename":"tests/WorkflowRun.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflowRun.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2FWorkflowRun.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2FWorkflowRun.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"6b87e3610b80eb24a45d4bd453c42c9937d8ae7d","filename":"tests/__init__.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2F__init__.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2F__init__.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2F__init__.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2012 Vincent Jacques #"},{"sha":"2d5c77f33a288f18a9b73114572de1c5c3b9ec94","filename":"tests/conftest.py","status":"modified","additions":0,"deletions":2,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tests%2Fconftest.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tests%2Fconftest.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tests%2Fconftest.py?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,5 +1,3 @@\n-# -*- coding: utf-8 -*-\n-\n ############################ Copyrights and license ############################\n # #\n # Copyright 2020 Steve Kowalik #"},{"sha":"a7e67b244bb63cbaec0df7e66aa79d53924d153f","filename":"tox.ini","status":"modified","additions":1,"deletions":2,"changes":3,"blob_url":"https://github.com/PyGithub/PyGithub/blob/34d097ce473601624722b90fc5d0396011dd3acb/tox.ini","raw_url":"https://github.com/PyGithub/PyGithub/raw/34d097ce473601624722b90fc5d0396011dd3acb/tox.ini","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/tox.ini?ref=34d097ce473601624722b90fc5d0396011dd3acb","patch":"@@ -1,12 +1,11 @@\n [tox]\n envlist =\n lint,\n- py{35,36,37,38,39},\n+ py{36,37,38,39},\n docs\n \n [gh-actions]\n python =\n- 3.5: py35\n 3.6: py36, docs, lint\n 3.7: py37\n 3.8: py38"}]} diff --git a/tests/ReplayData/Repository.testCompareCommitsPerPage.txt b/tests/ReplayData/Repository.testCompareCommitsPerPage.txt new file mode 100644 index 0000000000..340d0555bf --- /dev/null +++ b/tests/ReplayData/Repository.testCompareCommitsPerPage.txt @@ -0,0 +1,21 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/compare/v0.6...v0.7?per_page=3&page=1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Tue, 07 Oct 2025 15:12:05 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/"3bf4115d127b920ca16decfef24b8a43c33de5a9b88592b6c196301c1e1f9d76"'), ('Last-Modified', 'Fri, 25 May 2012 17:14:34 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="next", ; rel="first"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4989'), ('X-RateLimit-Reset', '1759853097'), ('X-RateLimit-Used', '11'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'BFFB:353E08:676B0F0:60A2D25:68E52DC4')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7","html_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:4303c5b...PyGithub:ecda065","diff_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch","base_commit":{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0MzAzYzViOTBlMjIxNmQ5MjcxNTVlOTYwOTQzNmNjYjg5ODRjNDk1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"message":"Merge branch 'develop'","tree":{"sha":"f492784d8ca837779650d1fb406a1a3587a764ad","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"936f4a97f1a86392637ec002bbf89ff036a5062d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","html_url":"https://github.com/PyGithub/PyGithub/commit/936f4a97f1a86392637ec002bbf89ff036a5062d"},{"sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","html_url":"https://github.com/PyGithub/PyGithub/commit/2a7e80e6421c5d4d201d60619068dea6bae612cb"}]},"merge_base_commit":{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0MzAzYzViOTBlMjIxNmQ5MjcxNTVlOTYwOTQzNmNjYjg5ODRjNDk1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"message":"Merge branch 'develop'","tree":{"sha":"f492784d8ca837779650d1fb406a1a3587a764ad","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"936f4a97f1a86392637ec002bbf89ff036a5062d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","html_url":"https://github.com/PyGithub/PyGithub/commit/936f4a97f1a86392637ec002bbf89ff036a5062d"},{"sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","html_url":"https://github.com/PyGithub/PyGithub/commit/2a7e80e6421c5d4d201d60619068dea6bae612cb"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"5bb654d26dd014d36794acd1e6ecf3736f12aad7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo1YmI2NTRkMjZkZDAxNGQzNjc5NGFjZDFlNmVjZjM3MzZmMTJhYWQ3","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T12:10:54Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T12:10:54Z"},"message":"Implement the three authentication schemes","tree":{"sha":"59d755d95bc2e2de4dcef70a7c73e81e677f610b","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/59d755d95bc2e2de4dcef70a7c73e81e677f610b"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","html_url":"https://github.com/PyGithub/PyGithub/commit/5bb654d26dd014d36794acd1e6ecf3736f12aad7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495"}]},{"sha":"cb0313157bf904f2d364377d35d9397b269547a5","node_id":"MDY6Q29tbWl0MzU0NDQ5MDpjYjAzMTMxNTdiZjkwNGYyZDM2NDM3N2QzNWQ5Mzk3YjI2OTU0N2E1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:04:22Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:04:22Z"},"message":"Merge branch 'topic/Authentication' into develop","tree":{"sha":"59d755d95bc2e2de4dcef70a7c73e81e677f610b","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/59d755d95bc2e2de4dcef70a7c73e81e677f610b"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/cb0313157bf904f2d364377d35d9397b269547a5","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5","html_url":"https://github.com/PyGithub/PyGithub/commit/cb0313157bf904f2d364377d35d9397b269547a5","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495"},{"sha":"5bb654d26dd014d36794acd1e6ecf3736f12aad7","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/5bb654d26dd014d36794acd1e6ecf3736f12aad7","html_url":"https://github.com/PyGithub/PyGithub/commit/5bb654d26dd014d36794acd1e6ecf3736f12aad7"}]},{"sha":"0cec0d25e606c023a62a4fc7cdc815309ebf6d16","node_id":"MDY6Q29tbWl0MzU0NDQ5MDowY2VjMGQyNWU2MDZjMDIzYTYyYTRmYzdjZGM4MTUzMDllYmY2ZDE2","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:13:33Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:13:33Z"},"message":"Publish version 0.7","tree":{"sha":"78735573611521bb3ade95921c668097e2a4dc5e","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/78735573611521bb3ade95921c668097e2a4dc5e"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","html_url":"https://github.com/PyGithub/PyGithub/commit/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"cb0313157bf904f2d364377d35d9397b269547a5","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/cb0313157bf904f2d364377d35d9397b269547a5","html_url":"https://github.com/PyGithub/PyGithub/commit/cb0313157bf904f2d364377d35d9397b269547a5"}]}],"files":[{"sha":"c1602a737361ca08d8edd03d3d189c6c38b52502","filename":"ReferenceOfClasses.md","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/ReferenceOfClasses.md","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/ReferenceOfClasses.md","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/ReferenceOfClasses.md?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -3,7 +3,7 @@ You obtain instances through calls to `get_` and `create_` methods.\n \n Class `Github`\n ==============\n-* Constructed from user's login and password\n+* Constructed from user's login and password or OAuth token\n * `get_user()`: `AuthenticatedUser`\n * `get_user( login )`: `NamedUser`\n * `get_organization( login )`: `Organization`"},{"sha":"8c8348878598d2878b23bd29c0d1291ec77bc833","filename":"github/Github.py","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FGithub.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FGithub.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FGithub.py?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -2,8 +2,8 @@\n from GithubObjects import *\n \n class Github:\n- def __init__( self, login, password, debugFile = None ):\n- self.__requester = Requester( login, password )\n+ def __init__( self, login_or_token = None, password = None, debugFile = None ):\n+ self.__requester = Requester( login_or_token, password )\n self.__debugFile = debugFile\n \n def _dataRequest( self, verb, url, parameters, data ):"},{"sha":"0034ec872a3c1b90c30f5fb440ce641ba943c856","filename":"github/Requester.py","status":"modified","additions":14,"deletions":3,"changes":17,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FRequester.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/github%2FRequester.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/github%2FRequester.py?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -7,8 +7,15 @@ class UnknownGithubObject( Exception ):\n pass\n \n class Requester:\n- def __init__( self, login, password ):\n- self.__authorizationHeader = \"Basic \" + base64.b64encode( login + \":\" + password ).replace( '\\n', '' )\n+ def __init__( self, login_or_token, password ):\n+ if password is not None:\n+ login = login_or_token\n+ self.__authorizationHeader = \"Basic \" + base64.b64encode( login + \":\" + password ).replace( '\\n', '' )\n+ elif login_or_token is not None:\n+ token = login_or_token\n+ self.__authorizationHeader = \"token \" + token\n+ else:\n+ self.__authorizationHeader = None\n \n def dataRequest( self, verb, url, parameters, input ):\n if parameters is None:\n@@ -46,12 +53,16 @@ def statusRequest( self, verb, url, parameters, input ):\n def __rawRequest( self, verb, url, parameters, input ):\n assert verb in [ \"HEAD\", \"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\" ]\n \n+ headers = dict()\n+ if self.__authorizationHeader is not None:\n+ headers[ \"Authorization\" ] = self.__authorizationHeader\n+\n cnx = httplib.HTTPSConnection( \"api.github.com\", strict = True )\n cnx.request(\n verb,\n self.__completeUrl( url, parameters ),\n json.dumps( input ),\n- { \"Authorization\" : self.__authorizationHeader }\n+ headers\n )\n response = cnx.getresponse()\n "},{"sha":"47e6c6576d5acdd93ff1e47a21954f473e113833","filename":"setup.py","status":"modified","additions":9,"deletions":1,"changes":10,"blob_url":"https://github.com/PyGithub/PyGithub/blob/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/setup.py","raw_url":"https://github.com/PyGithub/PyGithub/raw/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/setup.py","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/setup.py?ref=ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","patch":"@@ -5,7 +5,7 @@\n \n setup(\n name = 'PyGithub',\n- version = '0.6',\n+ version = '0.7',\n description = 'Use the full Github API v3',\n author = 'Vincent Jacques',\n author_email = 'vincent@vincent-jacques.net',\n@@ -26,6 +26,14 @@\n print repo.name\n repo.edit( has_wiki = False )\n \n+ You can also create a Github instance without authentication::\n+\n+ g = Github( \"user\", \"password\" )\n+\n+ Or with an OAuth token::\n+\n+ g = Github( token )\n+\n Reference documentation\n =======================\n "}]} + +https +GET +api.github.com +None +/repositories/3544490/compare/v0.6...v0.7?per_page=3&page=2 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Tue, 07 Oct 2025 15:12:05 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/"875912f7a3aaddf40142170b2b08f152f5a5ded85ad231e913534ab4533ca5b3"'), ('Last-Modified', 'Fri, 25 May 2012 17:14:34 GMT'), ('github-authentication-token-expiration', '2025-11-13 21:31:56 +0100'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('Link', '; rel="last", ; rel="first", ; rel="prev"'), ('x-accepted-github-permissions', 'contents=read'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4988'), ('X-RateLimit-Reset', '1759853097'), ('X-RateLimit-Used', '12'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'BFD0:3EB759:62E49CE:5C84844:68E52DC5')] +{"url":"https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7","html_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7","permalink_url":"https://github.com/PyGithub/PyGithub/compare/PyGithub:4303c5b...PyGithub:ecda065","diff_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff","patch_url":"https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch","base_commit":{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0MzAzYzViOTBlMjIxNmQ5MjcxNTVlOTYwOTQzNmNjYjg5ODRjNDk1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"message":"Merge branch 'develop'","tree":{"sha":"f492784d8ca837779650d1fb406a1a3587a764ad","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"936f4a97f1a86392637ec002bbf89ff036a5062d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","html_url":"https://github.com/PyGithub/PyGithub/commit/936f4a97f1a86392637ec002bbf89ff036a5062d"},{"sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","html_url":"https://github.com/PyGithub/PyGithub/commit/2a7e80e6421c5d4d201d60619068dea6bae612cb"}]},"merge_base_commit":{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","node_id":"MDY6Q29tbWl0MzU0NDQ5MDo0MzAzYzViOTBlMjIxNmQ5MjcxNTVlOTYwOTQzNmNjYjg5ODRjNDk1","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-04-17T17:55:16Z"},"message":"Merge branch 'develop'","tree":{"sha":"f492784d8ca837779650d1fb406a1a3587a764ad","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/f492784d8ca837779650d1fb406a1a3587a764ad"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/4303c5b90e2216d927155e9609436ccb8984c495","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"936f4a97f1a86392637ec002bbf89ff036a5062d","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/936f4a97f1a86392637ec002bbf89ff036a5062d","html_url":"https://github.com/PyGithub/PyGithub/commit/936f4a97f1a86392637ec002bbf89ff036a5062d"},{"sha":"2a7e80e6421c5d4d201d60619068dea6bae612cb","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/2a7e80e6421c5d4d201d60619068dea6bae612cb","html_url":"https://github.com/PyGithub/PyGithub/commit/2a7e80e6421c5d4d201d60619068dea6bae612cb"}]},"status":"ahead","ahead_by":4,"behind_by":0,"total_commits":4,"commits":[{"sha":"ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","node_id":"MDY6Q29tbWl0MzU0NDQ5MDplY2RhMDY1ZTAxODc2MjA5ZDJiZGY1ZmU0ZTkxY2VlOGZmYWE5ZmY3","commit":{"author":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:14:34Z"},"committer":{"name":"Vincent Jacques","email":"vincent@vincent-jacques.net","date":"2012-05-25T17:14:34Z"},"message":"Merge branch 'develop'","tree":{"sha":"78735573611521bb3ade95921c668097e2a4dc5e","url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees/78735573611521bb3ade95921c668097e2a4dc5e"},"url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","html_url":"https://github.com/PyGithub/PyGithub/commit/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/commits/ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7/comments","author":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"4303c5b90e2216d927155e9609436ccb8984c495","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/4303c5b90e2216d927155e9609436ccb8984c495","html_url":"https://github.com/PyGithub/PyGithub/commit/4303c5b90e2216d927155e9609436ccb8984c495"},{"sha":"0cec0d25e606c023a62a4fc7cdc815309ebf6d16","url":"https://api.github.com/repos/PyGithub/PyGithub/commits/0cec0d25e606c023a62a4fc7cdc815309ebf6d16","html_url":"https://github.com/PyGithub/PyGithub/commit/0cec0d25e606c023a62a4fc7cdc815309ebf6d16"}]}]} diff --git a/tests/ReplayData/Repository.testEditWithAllArguments.txt b/tests/ReplayData/Repository.testEditWithAllArguments.txt index cfc480b93e..7e85e09bee 100644 --- a/tests/ReplayData/Repository.testEditWithAllArguments.txt +++ b/tests/ReplayData/Repository.testEditWithAllArguments.txt @@ -4,10 +4,10 @@ api.github.com None /repos/PyGithub/PyGithub {'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -{"has_wiki": false, "name": "PyGithub", "has_issues": true, "homepage": "http://vincent-jacques.net/PyGithub", "private": true, "description": "Description edited by PyGithub", "has_projects": false, "allow_auto_merge": true, "allow_update_branch": true, "allow_forking": true, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true, "is_template": true, "use_squash_pr_title_as_default": true, "squash_merge_commit_title": "PR_TITLE", "squash_merge_commit_message": "COMMIT_MESSAGES", "merge_commit_title": "PR_TITLE", "merge_commit_message": "PR_BODY", "web_commit_signoff_required": true, "has_discussions": false} +{"has_wiki": false, "name": "PyGithub", "has_issues": true, "homepage": "http://vincent-jacques.net/PyGithub", "private": true, "description": "Description edited by PyGithub", "has_projects": false, "allow_auto_merge": true, "allow_update_branch": true, "allow_forking": true, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true, "is_template": true, "use_squash_pr_title_as_default": true, "squash_merge_commit_title": "PR_TITLE", "squash_merge_commit_message": "COMMIT_MESSAGES", "merge_commit_title": "PR_TITLE", "merge_commit_message": "PR_BODY", "web_commit_signoff_required": true, "has_discussions": false, "security_and_analysis": {"secret_scanning": {"status": "enabled"}, "dependabot_security_updates": {"status": "disabled"}}} 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4953'), ('content-length', '1109'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"749313ec2d171323deb61f9f4c85e84f"'), ('date', 'Sat, 26 May 2012 11:22:13 GMT'), ('content-type', 'application/json; charset=utf-8')] -{"clone_url":"https://github.com/PyGithub/PyGithub.git","watchers":13,"updated_at":"2012-05-26T11:22:13Z","permissions":{"pull":true,"admin":true,"push":true},"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub","has_wiki":false,"has_issues":true,"fork":false,"forks":2,"size":412,"git_url":"git://github.com/PyGithub/PyGithub.git","private":false,"open_issues":16,"mirror_url":null,"svn_url":"https://github.com/PyGithub/PyGithub","owner":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"name":"PyGithub","language":"Python","description":"Description edited by PyGithub","ssh_url":"git@github.com:PyGithub/PyGithub.git","pushed_at":"2012-05-26T10:01:38Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"html_url":"https://github.com/PyGithub/PyGithub","full_name":"PyGithub/PyGithub", "has_projects": false, "allow_auto_merge": true, "allow_update_branch": true, "allow_forking": true, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true, "is_template": true, "use_squash_pr_title_as_default": true, "squash_merge_commit_title": "PR_TITLE", "squash_merge_commit_message": "COMMIT_MESSAGES", "merge_commit_title": "PR_TITLE", "merge_commit_message": "PR_BODY", "web_commit_signoff_required": true, "has_discussions": false} +{"clone_url":"https://github.com/PyGithub/PyGithub.git","watchers":13,"updated_at":"2012-05-26T11:22:13Z","permissions":{"pull":true,"admin":true,"push":true},"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub","has_wiki":false,"has_issues":true,"fork":false,"forks":2,"size":412,"git_url":"git://github.com/PyGithub/PyGithub.git","private":false,"open_issues":16,"mirror_url":null,"svn_url":"https://github.com/PyGithub/PyGithub","owner":{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},"name":"PyGithub","language":"Python","description":"Description edited by PyGithub","ssh_url":"git@github.com:PyGithub/PyGithub.git","pushed_at":"2012-05-26T10:01:38Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"html_url":"https://github.com/PyGithub/PyGithub","full_name":"PyGithub/PyGithub", "has_projects": false, "allow_auto_merge": true, "allow_update_branch": true, "allow_forking": true, "allow_squash_merge": true, "allow_merge_commit": true, "allow_rebase_merge": true, "delete_branch_on_merge": true, "is_template": true, "use_squash_pr_title_as_default": true, "squash_merge_commit_title": "PR_TITLE", "squash_merge_commit_message": "COMMIT_MESSAGES", "merge_commit_title": "PR_TITLE", "merge_commit_message": "PR_BODY", "web_commit_signoff_required": true, "has_discussions": false, "security_and_analysis": {"secret_scanning": {"status":"enabled"}, "secret_scanning_push_protection": {"status": "enabled"}, "dependabot_security_updates": {"status": "disabled"}, "secret_scanning_non_provider_patterns": {"status": "disabled"}, "secret_scanning_validity_checks": {"status": "disabled"}}} https PATCH @@ -19,3 +19,14 @@ None 200 [('status', '200 OK'), ('x-ratelimit-remaining', '4952'), ('content-length', '1129'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"c1328d95af7d85267acb5754968b2c0b"'), ('date', 'Sat, 26 May 2012 11:22:13 GMT'), ('content-type', 'application/json; charset=utf-8')] {"clone_url":"https://github.com/PyGithub/PyGithub.git","watchers":13,"updated_at":"2012-05-26T11:22:13Z","permissions":{"pull":true,"admin":true,"push":true},"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub","mirror_url":null,"has_wiki":false,"has_issues":true,"fork":false,"forks":2,"size":412,"private":false,"open_issues":16,"svn_url":"https://github.com/PyGithub/PyGithub","owner":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"name":"PyGithub","language":"Python","description":"Python library implementing the full Github API v3","ssh_url":"git@github.com:PyGithub/PyGithub.git","pushed_at":"2012-05-26T10:01:38Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"git_url":"git://github.com/PyGithub/PyGithub.git","html_url":"https://github.com/PyGithub/PyGithub","full_name":"PyGithub/PyGithub", "has_discussions": false} + +https +PATCH +api.github.com +None +/repos/PyGithub/PyGithub +{'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +{"name": "PyGithub", "security_and_analysis": {"dependabot_security_updates": {"status": "enabled"}}} +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4953'), ('content-length', '1109'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"749313ec2d171323deb61f9f4c85e84f"'), ('date', 'Sat, 26 May 2012 11:22:13 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"clone_url":"https://github.com/PyGithub/PyGithub.git","watchers":13,"updated_at":"2012-05-26T11:22:13Z","permissions":{"pull":true,"admin":true,"push":true},"homepage":"http://vincent-jacques.net/PyGithub","url":"https://api.github.com/repos/PyGithub/PyGithub","mirror_url":null,"has_wiki":false,"has_issues":true,"fork":false,"forks":2,"size":412,"private":false,"open_issues":16,"svn_url":"https://github.com/PyGithub/PyGithub","owner":{"url":"https://api.github.com/users/jacquev6","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"name":"PyGithub","language":"Python","description":"Python library implementing the full Github API v3","ssh_url":"git@github.com:PyGithub/PyGithub.git","pushed_at":"2012-05-26T10:01:38Z","created_at":"2012-02-25T12:53:47Z","id":3544490,"git_url":"git://github.com/PyGithub/PyGithub.git","html_url":"https://github.com/PyGithub/PyGithub","full_name":"PyGithub/PyGithub", "has_discussions": false, "security_and_analysis": {"secret_scanning": {"status":"enabled"}, "secret_scanning_push_protection": {"status": "enabled"}, "dependabot_security_updates": {"status": "enabled"}, "secret_scanning_non_provider_patterns": {"status": "disabled"}, "secret_scanning_validity_checks": {"status": "disabled"}}} diff --git a/tests/ReplayData/Repository.testGetIssuesWithTypeArgument.txt b/tests/ReplayData/Repository.testGetIssuesWithTypeArgument.txt new file mode 100644 index 0000000000..50533f45ba --- /dev/null +++ b/tests/ReplayData/Repository.testGetIssuesWithTypeArgument.txt @@ -0,0 +1,21 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues?type=bug +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Fri, 19 Sep 2025 06:05:32 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/"9af0e29c14b5147fd5c51a879a9475627bd6fdd6ea2343ccce1ab257e98be961"'), ('github-authentication-token-expiration', '2025-10-19 14:18:25 +0900'), ('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', '4903'), ('X-RateLimit-Reset', '1758262130'), ('X-RateLimit-Used', '97'), ('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', 'EB90:31CF24:3BB28B:48E366:68CCF2AC')] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3379","id":3425963739,"node_id":"I_kwDOADYVqs7MNA7b","number":3379,"title":"Property `PaginatedList.totalCount` returns 0 when GitHub deprecation notices exists for API path","user":{"login":"odedperezcodes","id":232807103,"node_id":"U_kgDODeBavw","avatar_url":"https://avatars.githubusercontent.com/u/232807103?v=4","gravatar_id":"","url":"https://api.github.com/users/odedperezcodes","html_url":"https://github.com/odedperezcodes","followers_url":"https://api.github.com/users/odedperezcodes/followers","following_url":"https://api.github.com/users/odedperezcodes/following{/other_user}","gists_url":"https://api.github.com/users/odedperezcodes/gists{/gist_id}","starred_url":"https://api.github.com/users/odedperezcodes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odedperezcodes/subscriptions","organizations_url":"https://api.github.com/users/odedperezcodes/orgs","repos_url":"https://api.github.com/users/odedperezcodes/repos","events_url":"https://api.github.com/users/odedperezcodes/events{/privacy}","received_events_url":"https://api.github.com/users/odedperezcodes/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2025-09-17T11:53:11Z","updated_at":"2025-09-18T13:44:24Z","closed_at":null,"author_association":"NONE","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"## Summary\n`search_issues().totalCount` incorrectly returns `0` instead of the actual count from GitHub API responses when GitHub includes deprecation notices in Link headers.\n\n## Environment\n- **PyGithub Version**: 2.8.1 (also affects 1.55 and likely all versions)\n- **Python Version**: 3.9.12\n- **GitHub API**: Enterprise GitHub (also affects github.com)\n\n## Problem Description\nSince GitHub started including deprecation notices in Link headers (around early September 2025), PyGithub's `search_issues()` method incorrectly returns `totalCount = 0` even when results exist.\n\n### Expected Behavior\n```python\nissues = gh.search_issues(\"commit:EXAMPLE_COMMIT_SHA\")\nprint(issues.totalCount) # Should print: 1\n```\n\n### Actual Behavior\n```python\nissues = gh.search_issues(\"commit:EXAMPLE_COMMIT_SHA\")\nprint(issues.totalCount) # Actually prints: 0\n```\n\n## Root Cause Analysis\n\n**File**: `github/PaginatedList.py`, lines 152-165\n\nThe bug occurs in the `totalCount` property getter:\n\n```python\nif \"link\" not in headers: # Line 152 - ISSUE HERE\n # This path would correctly use data[\"total_count\"]\n if data and \"total_count\" in data:\n self.__totalCount = data[\"total_count\"] # Would work correctly\nelse:\n # Takes this path due to deprecation Link header\n links = self.__parseLinkHeader(headers)\n lastUrl = links.get(\"last\") # Returns None (no pagination links)\n if lastUrl:\n self.__totalCount = int(parse_qs(lastUrl)[\"page\"][0])\n else:\n self.__totalCount = 0 # BUG: Sets to 0 instead of using JSON total_count\n```\n\n**The Issue**: GitHub now includes deprecation notices in Link headers:\n```\nLink: ; rel=\"deprecation\"; type=\"text/html\"\n```\n\nPyGithub incorrectly assumes any Link header means pagination exists, but deprecation notices are not pagination links.\n\n## Reproduction Steps\n\n1. Make any search that returns results:\n ```bash\n curl -H \"Authorization: token YOUR_TOKEN\" \\\n \"https://api.github.com/search/issues?q=commit:EXAMPLE_COMMIT_SHA\"\n ```\n **Returns**: `{\"total_count\": 1, \"items\": [...]}`\n\n2. Use PyGithub:\n ```python\n import github\n from github import Auth\n\n auth = Auth.Token(\"YOUR_TOKEN\")\n gh = github.Github(auth=auth)\n issues = gh.search_issues(\"commit:EXAMPLE_COMMIT_SHA\")\n print(f\"totalCount: {issues.totalCount}\") # Prints 0 instead of 1\n ```\n\n## Evidence\n\n**HTTP Response** (captured with debugging):\n```json\n{\n \"total_count\": 1,\n \"incomplete_results\": false,\n \"items\": [{\"number\": 12345, \"title\": \"Example PR\", ...}]\n}\n```\n\n**Response Headers**:\n```\nLink: ; rel=\"deprecation\"; type=\"text/html\"\n```\n\n**Parsed Links**: `{\"deprecation\": \"https://github.blog/changelog/...\"}`\n**Result**: No \"last\" link found → `totalCount = 0`\n\n## Proposed Fix\n\nChange line 152 in `PaginatedList.py` from:\n```python\nif \"link\" not in headers:\n```\n\nTo:\n```python\nif \"link\" not in headers or not self.__hasPaginationLinks(headers):\n```\n\nWhere `__hasPaginationLinks()` checks for pagination-specific `rel` values (`\"next\"`, `\"prev\"`, `\"last\"`, `\"first\"`), ignoring other Link types like deprecation notices.\n\nAlternative implementation:\n```python\ndef __hasPaginationLinks(self, headers):\n \"\"\"Check if Link header contains pagination links, not just deprecation notices\"\"\"\n if \"link\" not in headers:\n return False\n\n links = self.__parseLinkHeader(headers)\n pagination_rels = {\"next\", \"prev\", \"last\", \"first\"}\n return any(rel in pagination_rels for rel in links.keys())\n```\n\n## Impact\n\nThis bug affects:\n- All search operations (`search_issues`, `search_repositories`, `search_users`, etc.)\n- Any application relying on search result counts\n- Pagination logic when GitHub includes deprecation notices\n\n**Additional Context**: This issue started appearing around early September 2025 when GitHub began including deprecation notices in API responses, breaking existing PyGithub installations that were working fine before.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3373","id":3399666591,"node_id":"I_kwDOADYVqs7Kosuf","number":3373,"title":"Broken links in documentation in 2.8","user":{"login":"skinitimski","id":418155,"node_id":"MDQ6VXNlcjQxODE1NQ==","avatar_url":"https://avatars.githubusercontent.com/u/418155?v=4","gravatar_id":"","url":"https://api.github.com/users/skinitimski","html_url":"https://github.com/skinitimski","followers_url":"https://api.github.com/users/skinitimski/followers","following_url":"https://api.github.com/users/skinitimski/following{/other_user}","gists_url":"https://api.github.com/users/skinitimski/gists{/gist_id}","starred_url":"https://api.github.com/users/skinitimski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/skinitimski/subscriptions","organizations_url":"https://api.github.com/users/skinitimski/orgs","repos_url":"https://api.github.com/users/skinitimski/repos","events_url":"https://api.github.com/users/skinitimski/events{/privacy}","received_events_url":"https://api.github.com/users/skinitimski/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2025-09-09T19:25:13Z","updated_at":"2025-09-09T20:29:51Z","closed_at":null,"author_association":"CONTRIBUTOR","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"docs for 2.7.0 \ndocs for 2.8.0 \n\ngrep \"github.Repository.Repository.get_pulls()\"\n\nIn the 2.7.0 page, the grepped text links to the docs for the Repository object.\n\nIn the 2.8.0 page, there is no link.\n\nSimilarly, the [2.7.0 docs](https://pygithub.readthedocs.io/en/v2.7.0/github_objects/Repository.html#github.Repository.Repository.allow_auto_merge) have a lot to say about the members of Repository, but the [2.8.0 docs](https://pygithub.readthedocs.io/en/v2.8.0/github_objects/Repository.html) show no members at all.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3372","id":3398817538,"node_id":"I_kwDOADYVqs7KldcC","number":3372,"title":"Commit.files does not respect requester.per_page (in forward mode)","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2025-09-09T14:51:27Z","updated_at":"2025-09-17T19:49:40Z","closed_at":null,"author_association":"CONTRIBUTOR","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"Minimal example:\n\n```\nimport logging\nfrom github import Github, Auth\ngh = Github(auth=Auth.Token($token), per_page=100)\ngh.requester._logger.setLevel(logging.DEBUG)\nrepo = gh.get_repo(\"iarspider-cmssw/cmssw\")\nissue = repo.get_issue(38)\npr = repo.get_pull(38)\ncommits = pr.get_commits()\ncommit = commits[0]\nfiles = list(commit.files)\nprint(len(files))\nfiles = list(reversed(commit.files))\nprint(len(files))\n```\n\nRunning this script and filtering the output with `grep '^GET' | awk '{print $1,$2}'`, I get this output:\n\n```\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/pulls/38/commits?per_page=100\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=2\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=3\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=4\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=5\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=6\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=16\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=15\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=14\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=13\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=12\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=11\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=10\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=9\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=8\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=7\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=6\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=5\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=4\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=3\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=2\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=1\n```\n\nNotice that forward iteration ignores per_page, but reverse respects it.\n\nThe [endpoint](https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#get-a-commit) supports `per_page` parameter. ","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/timeline","performed_via_github_app":null,"state_reason":null}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues?state=closed&type=feature +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Fri, 19 Sep 2025 06:05:32 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/"26d3fa6bee18565475975155ab9a2b9bad889b91ce6878fb898942754478e29c"'), ('github-authentication-token-expiration', '2025-10-19 14:18:25 +0900'), ('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', '4902'), ('X-RateLimit-Reset', '1758262130'), ('X-RateLimit-Used', '98'), ('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', 'F943:31CF24:3BB2D9:48E3D0:68CCF2AC')] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3335","id":3326107606,"node_id":"I_kwDOADYVqs7GQF_W","number":3335,"title":"Issue with sub-issues","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","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2025-08-15T19:19:05Z","updated_at":"2025-08-15T20:07:09Z","closed_at":"2025-08-15T20:07:09Z","author_association":"COLLABORATOR","type":{"id":1386165,"node_id":"IT_kwDOAKxBpM4AFSa1","name":"Feature","description":"A request, idea, or new functionality","color":"blue","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-10-08T09:21:54Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":2,"completed":2,"percent_completed":100},"parent_issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":null,"closed_by":{"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","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/timeline","performed_via_github_app":null,"state_reason":"completed"}] diff --git a/tests/ReplayData/Repository.testGetIssuesWithTypeWildcard.txt b/tests/ReplayData/Repository.testGetIssuesWithTypeWildcard.txt new file mode 100644 index 0000000000..5f5effcd7f --- /dev/null +++ b/tests/ReplayData/Repository.testGetIssuesWithTypeWildcard.txt @@ -0,0 +1,21 @@ +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues?type=%2A +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Fri, 19 Sep 2025 06:05: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/"9af0e29c14b5147fd5c51a879a9475627bd6fdd6ea2343ccce1ab257e98be961"'), ('github-authentication-token-expiration', '2025-10-19 14:18:25 +0900'), ('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', '4906'), ('X-RateLimit-Reset', '1758262130'), ('X-RateLimit-Used', '94'), ('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', 'F0B5:14DD7A:56ABA9:6C2F7E:68CCF2A0')] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3379","id":3425963739,"node_id":"I_kwDOADYVqs7MNA7b","number":3379,"title":"Property `PaginatedList.totalCount` returns 0 when GitHub deprecation notices exists for API path","user":{"login":"odedperezcodes","id":232807103,"node_id":"U_kgDODeBavw","avatar_url":"https://avatars.githubusercontent.com/u/232807103?v=4","gravatar_id":"","url":"https://api.github.com/users/odedperezcodes","html_url":"https://github.com/odedperezcodes","followers_url":"https://api.github.com/users/odedperezcodes/followers","following_url":"https://api.github.com/users/odedperezcodes/following{/other_user}","gists_url":"https://api.github.com/users/odedperezcodes/gists{/gist_id}","starred_url":"https://api.github.com/users/odedperezcodes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odedperezcodes/subscriptions","organizations_url":"https://api.github.com/users/odedperezcodes/orgs","repos_url":"https://api.github.com/users/odedperezcodes/repos","events_url":"https://api.github.com/users/odedperezcodes/events{/privacy}","received_events_url":"https://api.github.com/users/odedperezcodes/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2025-09-17T11:53:11Z","updated_at":"2025-09-18T13:44:24Z","closed_at":null,"author_association":"NONE","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"## Summary\n`search_issues().totalCount` incorrectly returns `0` instead of the actual count from GitHub API responses when GitHub includes deprecation notices in Link headers.\n\n## Environment\n- **PyGithub Version**: 2.8.1 (also affects 1.55 and likely all versions)\n- **Python Version**: 3.9.12\n- **GitHub API**: Enterprise GitHub (also affects github.com)\n\n## Problem Description\nSince GitHub started including deprecation notices in Link headers (around early September 2025), PyGithub's `search_issues()` method incorrectly returns `totalCount = 0` even when results exist.\n\n### Expected Behavior\n```python\nissues = gh.search_issues(\"commit:EXAMPLE_COMMIT_SHA\")\nprint(issues.totalCount) # Should print: 1\n```\n\n### Actual Behavior\n```python\nissues = gh.search_issues(\"commit:EXAMPLE_COMMIT_SHA\")\nprint(issues.totalCount) # Actually prints: 0\n```\n\n## Root Cause Analysis\n\n**File**: `github/PaginatedList.py`, lines 152-165\n\nThe bug occurs in the `totalCount` property getter:\n\n```python\nif \"link\" not in headers: # Line 152 - ISSUE HERE\n # This path would correctly use data[\"total_count\"]\n if data and \"total_count\" in data:\n self.__totalCount = data[\"total_count\"] # Would work correctly\nelse:\n # Takes this path due to deprecation Link header\n links = self.__parseLinkHeader(headers)\n lastUrl = links.get(\"last\") # Returns None (no pagination links)\n if lastUrl:\n self.__totalCount = int(parse_qs(lastUrl)[\"page\"][0])\n else:\n self.__totalCount = 0 # BUG: Sets to 0 instead of using JSON total_count\n```\n\n**The Issue**: GitHub now includes deprecation notices in Link headers:\n```\nLink: ; rel=\"deprecation\"; type=\"text/html\"\n```\n\nPyGithub incorrectly assumes any Link header means pagination exists, but deprecation notices are not pagination links.\n\n## Reproduction Steps\n\n1. Make any search that returns results:\n ```bash\n curl -H \"Authorization: token YOUR_TOKEN\" \\\n \"https://api.github.com/search/issues?q=commit:EXAMPLE_COMMIT_SHA\"\n ```\n **Returns**: `{\"total_count\": 1, \"items\": [...]}`\n\n2. Use PyGithub:\n ```python\n import github\n from github import Auth\n\n auth = Auth.Token(\"YOUR_TOKEN\")\n gh = github.Github(auth=auth)\n issues = gh.search_issues(\"commit:EXAMPLE_COMMIT_SHA\")\n print(f\"totalCount: {issues.totalCount}\") # Prints 0 instead of 1\n ```\n\n## Evidence\n\n**HTTP Response** (captured with debugging):\n```json\n{\n \"total_count\": 1,\n \"incomplete_results\": false,\n \"items\": [{\"number\": 12345, \"title\": \"Example PR\", ...}]\n}\n```\n\n**Response Headers**:\n```\nLink: ; rel=\"deprecation\"; type=\"text/html\"\n```\n\n**Parsed Links**: `{\"deprecation\": \"https://github.blog/changelog/...\"}`\n**Result**: No \"last\" link found → `totalCount = 0`\n\n## Proposed Fix\n\nChange line 152 in `PaginatedList.py` from:\n```python\nif \"link\" not in headers:\n```\n\nTo:\n```python\nif \"link\" not in headers or not self.__hasPaginationLinks(headers):\n```\n\nWhere `__hasPaginationLinks()` checks for pagination-specific `rel` values (`\"next\"`, `\"prev\"`, `\"last\"`, `\"first\"`), ignoring other Link types like deprecation notices.\n\nAlternative implementation:\n```python\ndef __hasPaginationLinks(self, headers):\n \"\"\"Check if Link header contains pagination links, not just deprecation notices\"\"\"\n if \"link\" not in headers:\n return False\n\n links = self.__parseLinkHeader(headers)\n pagination_rels = {\"next\", \"prev\", \"last\", \"first\"}\n return any(rel in pagination_rels for rel in links.keys())\n```\n\n## Impact\n\nThis bug affects:\n- All search operations (`search_issues`, `search_repositories`, `search_users`, etc.)\n- Any application relying on search result counts\n- Pagination logic when GitHub includes deprecation notices\n\n**Additional Context**: This issue started appearing around early September 2025 when GitHub began including deprecation notices in API responses, breaking existing PyGithub installations that were working fine before.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3379/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3373","id":3399666591,"node_id":"I_kwDOADYVqs7Kosuf","number":3373,"title":"Broken links in documentation in 2.8","user":{"login":"skinitimski","id":418155,"node_id":"MDQ6VXNlcjQxODE1NQ==","avatar_url":"https://avatars.githubusercontent.com/u/418155?v=4","gravatar_id":"","url":"https://api.github.com/users/skinitimski","html_url":"https://github.com/skinitimski","followers_url":"https://api.github.com/users/skinitimski/followers","following_url":"https://api.github.com/users/skinitimski/following{/other_user}","gists_url":"https://api.github.com/users/skinitimski/gists{/gist_id}","starred_url":"https://api.github.com/users/skinitimski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/skinitimski/subscriptions","organizations_url":"https://api.github.com/users/skinitimski/orgs","repos_url":"https://api.github.com/users/skinitimski/repos","events_url":"https://api.github.com/users/skinitimski/events{/privacy}","received_events_url":"https://api.github.com/users/skinitimski/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2025-09-09T19:25:13Z","updated_at":"2025-09-09T20:29:51Z","closed_at":null,"author_association":"CONTRIBUTOR","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"docs for 2.7.0 \ndocs for 2.8.0 \n\ngrep \"github.Repository.Repository.get_pulls()\"\n\nIn the 2.7.0 page, the grepped text links to the docs for the Repository object.\n\nIn the 2.8.0 page, there is no link.\n\nSimilarly, the [2.7.0 docs](https://pygithub.readthedocs.io/en/v2.7.0/github_objects/Repository.html#github.Repository.Repository.allow_auto_merge) have a lot to say about the members of Repository, but the [2.8.0 docs](https://pygithub.readthedocs.io/en/v2.8.0/github_objects/Repository.html) show no members at all.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3373/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3372","id":3398817538,"node_id":"I_kwDOADYVqs7KldcC","number":3372,"title":"Commit.files does not respect requester.per_page (in forward mode)","user":{"login":"iarspider","id":636602,"node_id":"MDQ6VXNlcjYzNjYwMg==","avatar_url":"https://avatars.githubusercontent.com/u/636602?v=4","gravatar_id":"","url":"https://api.github.com/users/iarspider","html_url":"https://github.com/iarspider","followers_url":"https://api.github.com/users/iarspider/followers","following_url":"https://api.github.com/users/iarspider/following{/other_user}","gists_url":"https://api.github.com/users/iarspider/gists{/gist_id}","starred_url":"https://api.github.com/users/iarspider/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iarspider/subscriptions","organizations_url":"https://api.github.com/users/iarspider/orgs","repos_url":"https://api.github.com/users/iarspider/repos","events_url":"https://api.github.com/users/iarspider/events{/privacy}","received_events_url":"https://api.github.com/users/iarspider/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2025-09-09T14:51:27Z","updated_at":"2025-09-17T19:49:40Z","closed_at":null,"author_association":"CONTRIBUTOR","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"Minimal example:\n\n```\nimport logging\nfrom github import Github, Auth\ngh = Github(auth=Auth.Token($token), per_page=100)\ngh.requester._logger.setLevel(logging.DEBUG)\nrepo = gh.get_repo(\"iarspider-cmssw/cmssw\")\nissue = repo.get_issue(38)\npr = repo.get_pull(38)\ncommits = pr.get_commits()\ncommit = commits[0]\nfiles = list(commit.files)\nprint(len(files))\nfiles = list(reversed(commit.files))\nprint(len(files))\n```\n\nRunning this script and filtering the output with `grep '^GET' | awk '{print $1,$2}'`, I get this output:\n\n```\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/pulls/38/commits?per_page=100\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=2\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=3\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=4\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=5\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?page=6\nGET https://api.github.com/repos/iarspider-cmssw/cmssw/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=16\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=15\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=14\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=13\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=12\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=11\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=10\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=9\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=8\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=7\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=6\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=5\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=4\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=3\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=2\nGET https://api.github.com/repositories/399376380/commits/b6db3e643d2bd16deee12590d1312a3addcd2d75?per_page=100&page=1\n```\n\nNotice that forward iteration ignores per_page, but reverse respects it.\n\nThe [endpoint](https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#get-a-commit) supports `per_page` parameter. ","closed_by":null,"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3372/timeline","performed_via_github_app":null,"state_reason":null}] + +https +GET +api.github.com +None +/repos/PyGithub/PyGithub/issues?state=closed&type=%2A +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Fri, 19 Sep 2025 06:05:21 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"e28e80892b441a543d962d2b1e7b3f7d06493b01b82fd0ab83d0a140642c57b9"'), ('github-authentication-token-expiration', '2025-10-19 14:18:25 +0900'), ('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', '4905'), ('X-RateLimit-Reset', '1758262130'), ('X-RateLimit-Used', '95'), ('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', 'F675:2EAA45:502AB0:65AB37:68CCF2A0')] +[{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3364","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3364/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3364/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3364/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3364","id":3375750938,"node_id":"I_kwDOADYVqs7JNd8a","number":3364,"title":"IssueComment fails for bot users","user":{"login":"arash77","id":2973722,"node_id":"MDQ6VXNlcjI5NzM3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/2973722?v=4","gravatar_id":"","url":"https://api.github.com/users/arash77","html_url":"https://github.com/arash77","followers_url":"https://api.github.com/users/arash77/followers","following_url":"https://api.github.com/users/arash77/following{/other_user}","gists_url":"https://api.github.com/users/arash77/gists{/gist_id}","starred_url":"https://api.github.com/users/arash77/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arash77/subscriptions","organizations_url":"https://api.github.com/users/arash77/orgs","repos_url":"https://api.github.com/users/arash77/repos","events_url":"https://api.github.com/users/arash77/events{/privacy}","received_events_url":"https://api.github.com/users/arash77/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":3330121,"node_id":"MDU6TGFiZWwzMzMwMTIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/bug","name":"bug","color":"e10c02","default":true,"description":null}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2025-09-02T12:08:56Z","updated_at":"2025-09-02T17:30:49Z","closed_at":"2025-09-02T17:30:49Z","author_association":"CONTRIBUTOR","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"**Description:**\n\nAfter upgrading PyGithub to 2.8.0, `IssueComment.user` is no longer deserialized for bot accounts. This causes `BadAttributeException` when trying to access the comment.\n\n**Repro:**\n```python\nfrom github import Github\n\ng = Github(\"token\")\nrepo = g.get_repo(\"owner/repo\")\npr = repo.get_pull(1234)\n\ncomments = pr.get_issue_comments()\nprint(comments[0]) # crashes if comment is from a bot\n```\n**Traceback:**\n```python\ngithub.GithubException.BadAttributeException: (\n {'login': '...[bot]', 'type': 'Bot', ...},\n ,\n None\n)\n```","closed_by":{"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","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3364/reactions","total_count":4,"+1":4,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3364/timeline","performed_via_github_app":null,"state_reason":"completed"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3337","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3337/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3337/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3337/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3337","id":3326109475,"node_id":"I_kwDOADYVqs7GQGcj","number":3337,"title":"More sub-issues","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","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2025-08-15T19:20:14Z","updated_at":"2025-08-15T20:07:33Z","closed_at":"2025-08-15T20:07:33Z","author_association":"COLLABORATOR","type":{"id":1386160,"node_id":"IT_kwDOAKxBpM4AFSaw","name":"Task","description":"A specific piece of work","color":"yellow","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"parent_issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335","issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":1,"blocking":0,"total_blocking":1},"body":null,"closed_by":{"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","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3337/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3337/timeline","performed_via_github_app":null,"state_reason":"completed"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3336","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3336/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3336/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3336/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3336","id":3326109065,"node_id":"I_kwDOADYVqs7GQGWJ","number":3336,"title":"Sub-issue","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","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2025-08-15T19:19:59Z","updated_at":"2025-08-15T20:07:22Z","closed_at":"2025-08-15T20:07:22Z","author_association":"COLLABORATOR","type":{"id":1386160,"node_id":"IT_kwDOAKxBpM4AFSaw","name":"Task","description":"A specific piece of work","color":"yellow","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"parent_issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335","issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":1,"blocking":0,"total_blocking":1},"body":"To generate test data.\n\nBlocks #3337.","closed_by":{"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","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3336/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3336/timeline","performed_via_github_app":null,"state_reason":"completed"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/events","html_url":"https://github.com/PyGithub/PyGithub/issues/3335","id":3326107606,"node_id":"I_kwDOADYVqs7GQF_W","number":3335,"title":"Issue with sub-issues","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","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2025-08-15T19:19:05Z","updated_at":"2025-08-15T20:07:09Z","closed_at":"2025-08-15T20:07:09Z","author_association":"COLLABORATOR","type":{"id":1386165,"node_id":"IT_kwDOAKxBpM4AFSa1","name":"Feature","description":"A request, idea, or new functionality","color":"blue","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-10-08T09:21:54Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":2,"completed":2,"percent_completed":100},"parent_issue_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":null,"closed_by":{"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","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/3335/timeline","performed_via_github_app":null,"state_reason":"completed"},{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28","repository_url":"https://api.github.com/repos/PyGithub/PyGithub","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/labels{/name}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/comments","events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/events","html_url":"https://github.com/PyGithub/PyGithub/issues/28","id":4653757,"node_id":"MDU6SXNzdWU0NjUzNzU3","number":28,"title":"Issue created by PyGithub","user":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":3330121,"node_id":"MDU6TGFiZWwzMzMwMTIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/bug","name":"bug","color":"e10c02","default":true,"description":null},{"id":3376821,"node_id":"MDU6TGFiZWwzMzc2ODIx","url":"https://api.github.com/repos/PyGithub/PyGithub/labels/question","name":"question","color":"02e10c","default":true,"description":null}],"state":"closed","locked":false,"assignee":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"assignees":[{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/8","html_url":"https://github.com/PyGithub/PyGithub/milestone/8","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones/8/labels","id":150933,"node_id":"MDk6TWlsZXN0b25lMTUwOTMz","number":8,"title":"Version 1.4","description":"","creator":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":0,"closed_issues":3,"state":"closed","created_at":"2012-07-24T16:04:28Z","updated_at":"2012-09-11T18:52:13Z","due_on":"2012-08-05T07:00:00Z","closed_at":"2012-08-04T06:11:43Z"},"comments":3,"created_at":"2012-05-19T10:38:23Z","updated_at":"2025-08-15T19:35:40Z","closed_at":"2012-05-26T14:59:33Z","author_association":"MEMBER","type":{"id":1386163,"node_id":"IT_kwDOAKxBpM4AFSaz","name":"Bug","description":"An unexpected problem or behavior","color":"red","created_at":"2024-01-25T12:55:41Z","updated_at":"2024-07-26T10:24:51Z","is_enabled":true},"active_lock_reason":null,"sub_issues_summary":{"total":1,"completed":1,"percent_completed":100},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":1,"blocking":0,"total_blocking":1},"body":"Body edited by PyGithub\n","closed_by":{"login":"jacquev6","id":327146,"node_id":"MDQ6VXNlcjMyNzE0Ng==","avatar_url":"https://avatars.githubusercontent.com/u/327146?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","user_view_type":"public","site_admin":false},"reactions":{"url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/reactions","total_count":2,"+1":0,"-1":0,"laugh":0,"hooray":2,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/28/timeline","performed_via_github_app":null,"state_reason":"completed"}] diff --git a/tests/ReplayData/SecretScanAlert.setUp.txt b/tests/ReplayData/SecretScanAlert.setUp.txt new file mode 100644 index 0000000000..b221dcab80 --- /dev/null +++ b/tests/ReplayData/SecretScanAlert.setUp.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Tue, 26 Aug 2025 00:20: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/"e70ac824e139d8f594e6c5016c0a19557056ad10b3eba5d64be0b268b34f6591"'), ('Last-Modified', 'Mon, 25 Aug 2025 23:28:52 GMT'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 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', '1756169812'), ('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', 'E97B:106132:10D7603:1142D45:68ACFDCE')] +{"id":1007386278,"node_id":"R_kgDOPAt-pg","name":"PyGithub","full_name":"matt-davis27/PyGithub","private":false,"owner":{"login":"matt-davis27","id":35502728,"node_id":"MDQ6VXNlcjM1NTAyNzI4","avatar_url":"https://avatars.githubusercontent.com/u/35502728?v=4","gravatar_id":"","url":"https://api.github.com/users/matt-davis27","html_url":"https://github.com/matt-davis27","followers_url":"https://api.github.com/users/matt-davis27/followers","following_url":"https://api.github.com/users/matt-davis27/following{/other_user}","gists_url":"https://api.github.com/users/matt-davis27/gists{/gist_id}","starred_url":"https://api.github.com/users/matt-davis27/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matt-davis27/subscriptions","organizations_url":"https://api.github.com/users/matt-davis27/orgs","repos_url":"https://api.github.com/users/matt-davis27/repos","events_url":"https://api.github.com/users/matt-davis27/events{/privacy}","received_events_url":"https://api.github.com/users/matt-davis27/received_events","type":"User","user_view_type":"public","site_admin":false},"html_url":"https://github.com/matt-davis27/PyGithub","description":"Typed interactions with the GitHub API v3","fork":true,"url":"https://api.github.com/repos/matt-davis27/PyGithub","forks_url":"https://api.github.com/repos/matt-davis27/PyGithub/forks","keys_url":"https://api.github.com/repos/matt-davis27/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matt-davis27/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matt-davis27/PyGithub/teams","hooks_url":"https://api.github.com/repos/matt-davis27/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/matt-davis27/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/matt-davis27/PyGithub/events","assignees_url":"https://api.github.com/repos/matt-davis27/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/matt-davis27/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/matt-davis27/PyGithub/tags","blobs_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matt-davis27/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/matt-davis27/PyGithub/languages","stargazers_url":"https://api.github.com/repos/matt-davis27/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/matt-davis27/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/matt-davis27/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/matt-davis27/PyGithub/subscription","commits_url":"https://api.github.com/repos/matt-davis27/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/matt-davis27/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/matt-davis27/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/matt-davis27/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/matt-davis27/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/matt-davis27/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matt-davis27/PyGithub/merges","archive_url":"https://api.github.com/repos/matt-davis27/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matt-davis27/PyGithub/downloads","issues_url":"https://api.github.com/repos/matt-davis27/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/matt-davis27/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/matt-davis27/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/matt-davis27/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matt-davis27/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/matt-davis27/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/matt-davis27/PyGithub/deployments","created_at":"2025-06-23T23:14:58Z","updated_at":"2025-08-25T23:28:52Z","pushed_at":"2025-08-25T23:28:48Z","git_url":"git://github.com/matt-davis27/PyGithub.git","ssh_url":"git@github.com:matt-davis27/PyGithub.git","clone_url":"https://github.com/matt-davis27/PyGithub.git","svn_url":"https://github.com/matt-davis27/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":18018,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"","allow_squash_merge":true,"allow_merge_commit":true,"allow_rebase_merge":true,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","parent":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2025-08-25T18:26:34Z","pushed_at":"2025-08-25T19:55:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":20046,"stargazers_count":7490,"watchers_count":7490,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1854,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":357,"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":1854,"open_issues":357,"watchers":7490,"default_branch":"main"},"source":{"id":3544490,"node_id":"MDEwOlJlcG9zaXRvcnkzNTQ0NDkw","name":"PyGithub","full_name":"PyGithub/PyGithub","private":false,"owner":{"login":"PyGithub","id":11288996,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMjg4OTk2","avatar_url":"https://avatars.githubusercontent.com/u/11288996?v=4","gravatar_id":"","url":"https://api.github.com/users/PyGithub","html_url":"https://github.com/PyGithub","followers_url":"https://api.github.com/users/PyGithub/followers","following_url":"https://api.github.com/users/PyGithub/following{/other_user}","gists_url":"https://api.github.com/users/PyGithub/gists{/gist_id}","starred_url":"https://api.github.com/users/PyGithub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PyGithub/subscriptions","organizations_url":"https://api.github.com/users/PyGithub/orgs","repos_url":"https://api.github.com/users/PyGithub/repos","events_url":"https://api.github.com/users/PyGithub/events{/privacy}","received_events_url":"https://api.github.com/users/PyGithub/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/PyGithub/PyGithub","description":"Typed interactions with the GitHub API v3","fork":false,"url":"https://api.github.com/repos/PyGithub/PyGithub","forks_url":"https://api.github.com/repos/PyGithub/PyGithub/forks","keys_url":"https://api.github.com/repos/PyGithub/PyGithub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PyGithub/PyGithub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PyGithub/PyGithub/teams","hooks_url":"https://api.github.com/repos/PyGithub/PyGithub/hooks","issue_events_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/events{/number}","events_url":"https://api.github.com/repos/PyGithub/PyGithub/events","assignees_url":"https://api.github.com/repos/PyGithub/PyGithub/assignees{/user}","branches_url":"https://api.github.com/repos/PyGithub/PyGithub/branches{/branch}","tags_url":"https://api.github.com/repos/PyGithub/PyGithub/tags","blobs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PyGithub/PyGithub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PyGithub/PyGithub/git/refs{/sha}","trees_url":"https://api.github.com/repos/PyGithub/PyGithub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PyGithub/PyGithub/statuses/{sha}","languages_url":"https://api.github.com/repos/PyGithub/PyGithub/languages","stargazers_url":"https://api.github.com/repos/PyGithub/PyGithub/stargazers","contributors_url":"https://api.github.com/repos/PyGithub/PyGithub/contributors","subscribers_url":"https://api.github.com/repos/PyGithub/PyGithub/subscribers","subscription_url":"https://api.github.com/repos/PyGithub/PyGithub/subscription","commits_url":"https://api.github.com/repos/PyGithub/PyGithub/commits{/sha}","git_commits_url":"https://api.github.com/repos/PyGithub/PyGithub/git/commits{/sha}","comments_url":"https://api.github.com/repos/PyGithub/PyGithub/comments{/number}","issue_comment_url":"https://api.github.com/repos/PyGithub/PyGithub/issues/comments{/number}","contents_url":"https://api.github.com/repos/PyGithub/PyGithub/contents/{+path}","compare_url":"https://api.github.com/repos/PyGithub/PyGithub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PyGithub/PyGithub/merges","archive_url":"https://api.github.com/repos/PyGithub/PyGithub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PyGithub/PyGithub/downloads","issues_url":"https://api.github.com/repos/PyGithub/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/PyGithub/PyGithub/pulls{/number}","milestones_url":"https://api.github.com/repos/PyGithub/PyGithub/milestones{/number}","notifications_url":"https://api.github.com/repos/PyGithub/PyGithub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PyGithub/PyGithub/labels{/name}","releases_url":"https://api.github.com/repos/PyGithub/PyGithub/releases{/id}","deployments_url":"https://api.github.com/repos/PyGithub/PyGithub/deployments","created_at":"2012-02-25T12:53:47Z","updated_at":"2025-08-25T18:26:34Z","pushed_at":"2025-08-25T19:55:22Z","git_url":"git://github.com/PyGithub/PyGithub.git","ssh_url":"git@github.com:PyGithub/PyGithub.git","clone_url":"https://github.com/PyGithub/PyGithub.git","svn_url":"https://github.com/PyGithub/PyGithub","homepage":"https://pygithub.readthedocs.io/","size":20046,"stargazers_count":7490,"watchers_count":7490,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":true,"forks_count":1854,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":357,"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":1854,"open_issues":357,"watchers":7490,"default_branch":"main"},"security_and_analysis":{"secret_scanning":{"status":"enabled"},"secret_scanning_push_protection":{"status":"enabled"},"dependabot_security_updates":{"status":"disabled"},"secret_scanning_non_provider_patterns":{"status":"disabled"},"secret_scanning_validity_checks":{"status":"disabled"}},"network_count":1854,"subscribers_count":0} diff --git a/tests/ReplayData/SecretScanAlert.testAttributes.txt b/tests/ReplayData/SecretScanAlert.testAttributes.txt new file mode 100644 index 0000000000..08466b039e --- /dev/null +++ b/tests/ReplayData/SecretScanAlert.testAttributes.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/secret-scanning/alerts/1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 23:37:32 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4991'), ('X-RateLimit-Reset', '1756165394'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '4E3C:162923:9D732E2:A422173:68ACF3BB')] +{"number": 1,"created_at": "2020-11-06T18:18:30Z","url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1","html_url": "https://github.com/matt-davis27/PyGithub/security/secret-scanning/1","locations_url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1/locations","state": "open","resolution": null,"resolved_at": null,"resolved_by": null,"secret_type": "mailchimp_api_key","secret_type_display_name": "Mailchimp API Key","secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2","push_protection_bypassed_by": null,"push_protection_bypassed": false,"push_protection_bypassed_at": null,"push_protection_bypass_request_reviewer": null,"push_protection_bypass_request_reviewer_comment": null,"push_protection_bypass_request_comment": null,"push_protection_bypass_request_html_url": null,"resolution_comment": null,"validity": "unknown","publicly_leaked": false,"multi_repo": false,"is_base64_encoded": false,"first_location_detected": {"path": "/example/secrets.txt","start_line": 1,"end_line": 2,"start_column": 3,"end_column": 4, "blob_sha": "1234","blob_url": "https://api.github.com/repos/matt-davis27/PyGithub/git/blobs/1234","commit_sha": "123","commit_url": "https://api.github.com/repos/matt-davis27/PyGithub/git/commits/123"},"has_more_locations": false} diff --git a/tests/ReplayData/SecretScanAlert.testGetAlertsWithAllArguments.txt b/tests/ReplayData/SecretScanAlert.testGetAlertsWithAllArguments.txt new file mode 100644 index 0000000000..aa7f91abbb --- /dev/null +++ b/tests/ReplayData/SecretScanAlert.testGetAlertsWithAllArguments.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/secret-scanning/alerts?state=resolved&secret_type=adafruit_io_key&resolution=false_positive&sort=created&direction=asc&validity=inactive&is_publicly_leaked=False&is_multi_repo=False&hide_secret=True +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Tue, 26 Aug 2025 00:20:30 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '2'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', '"19f91bbf1b092c1d4b391603b89299b09b8c287a09dd290f45bb24d217789300"'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4993'), ('X-RateLimit-Reset', '1756169812'), ('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'"), ('Server', 'github.com'), ('X-GitHub-Request-Id', 'E97B:106132:10D77DB:1142F49:68ACFDCE')] +[{"number": 2,"created_at": "2020-11-06T18:48:51Z","url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/2","html_url": "https://github.com/matt-davis27/PyGithub/security/secret-scanning/2","locations_url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/2/locations","state": "resolved","resolution": "false_positive","resolved_at": "2020-11-07T02:47:13Z","resolved_by": {"login": "monalisa","id": 2,"node_id": "MDQ6VXNlcjI=","avatar_url": "https://alambic.github.com/avatars/u/2?","gravatar_id": "","url": "https://api.github.com/users/monalisa","html_url": "https://github.com/monalisa","followers_url": "https://api.github.com/users/monalisa/followers","following_url": "https://api.github.com/users/monalisa/following{/other_user}","gists_url": "https://api.github.com/users/monalisa/gists{/gist_id}","starred_url": "https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/monalisa/subscriptions","organizations_url": "https://api.github.com/users/monalisa/orgs","repos_url": "https://api.github.com/users/monalisa/repos","events_url": "https://api.github.com/users/monalisa/events{/privacy}","received_events_url": "https://api.github.com/users/monalisa/received_events","type": "User","site_admin": true},"secret_type": "adafruit_io_key","secret_type_display_name": "Adafruit IO Key","push_protection_bypassed_by": {"login": "monalisa","id": 2,"node_id": "MDQ6VXNlcjI=","avatar_url": "https://alambic.github.com/avatars/u/2?","gravatar_id": "","url": "https://api.github.com/users/monalisa","html_url": "https://github.com/monalisa","followers_url": "https://api.github.com/users/monalisa/followers","following_url": "https://api.github.com/users/monalisa/following{/other_user}","gists_url": "https://api.github.com/users/monalisa/gists{/gist_id}","starred_url": "https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/monalisa/subscriptions","organizations_url": "https://api.github.com/users/monalisa/orgs","repos_url": "https://api.github.com/users/monalisa/repos","events_url": "https://api.github.com/users/monalisa/events{/privacy}","received_events_url": "https://api.github.com/users/monalisa/received_events","type": "User","site_admin": true},"push_protection_bypassed": true,"push_protection_bypassed_at": "2020-11-06T21:48:51Z","push_protection_bypass_request_reviewer": {"login": "octocat","id": 3,"node_id": "MDQ6VXNlcjI=","avatar_url": "https://alambic.github.com/avatars/u/3?","gravatar_id": "","url": "https://api.github.com/users/octocat","html_url": "https://github.com/octocat","followers_url": "https://api.github.com/users/octocat/followers","following_url": "https://api.github.com/users/octocat/following{/other_user}","gists_url": "https://api.github.com/users/octocat/gists{/gist_id}","starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/octocat/subscriptions","organizations_url": "https://api.github.com/users/octocat/orgs","repos_url": "https://api.github.com/users/octocat/repos","events_url": "https://api.github.com/users/octocat/events{/privacy}","received_events_url": "https://api.github.com/users/octocat/received_events","type": "User","site_admin": true},"push_protection_bypass_request_reviewer_comment": "Example response","push_protection_bypass_request_comment": "Example comment","push_protection_bypass_request_html_url": "https://github.com/matt-davis27/PyGithub/secret_scanning_exemptions/1","resolution_comment": "Example comment","validity": "inactive","publicly_leaked": false,"multi_repo": false,"is_base64_encoded": false,"first_location_detected": {"path": "/example/secrets.txt","start_line": 1,"end_line": 1,"start_column": 1,"end_column": 64,"blob_sha": "af5626b4a114abcb82d63db7c8082c3c4756e51b","blob_url": "https://api.github.com/repos/octocat/hello-world/git/blobs/af5626b4a114abcb82d63db7c8082c3c4756e51b","commit_sha": "f14d7debf9775f957cf4f1e8176da0786431f72b","commit_url": "https://api.github.com/repos/octocat/hello-world/git/commits/f14d7debf9775f957cf4f1e8176da0786431f72b"},"has_more_locations": true}] diff --git a/tests/ReplayData/SecretScanAlert.testMultipleAlerts.txt b/tests/ReplayData/SecretScanAlert.testMultipleAlerts.txt new file mode 100644 index 0000000000..a0c0231301 --- /dev/null +++ b/tests/ReplayData/SecretScanAlert.testMultipleAlerts.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/secret-scanning/alerts +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 23:56:53 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '2'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With'), ('ETag', '"19f91bbf1b092c1d4b391603b89299b09b8c287a09dd290f45bb24d217789300"'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '4998'), ('X-RateLimit-Reset', '1756169812'), ('X-RateLimit-Used', '2'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Server', 'github.com'), ('X-GitHub-Request-Id', '783A:20B03C:1054BA4:10B6A70:68ACF844')] +[{"number": 2,"created_at": "2020-11-06T18:48:51Z","url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/2","html_url": "https://github.com/matt-davis27/PyGithub/security/secret-scanning/2","locations_url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/2/locations","state": "resolved","resolution": "false_positive","resolved_at": "2020-11-07T02:47:13Z","resolved_by": {"login": "monalisa","id": 2,"node_id": "MDQ6VXNlcjI=","avatar_url": "https://alambic.github.com/avatars/u/2?","gravatar_id": "","url": "https://api.github.com/users/monalisa","html_url": "https://github.com/monalisa","followers_url": "https://api.github.com/users/monalisa/followers","following_url": "https://api.github.com/users/monalisa/following{/other_user}","gists_url": "https://api.github.com/users/monalisa/gists{/gist_id}","starred_url": "https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/monalisa/subscriptions","organizations_url": "https://api.github.com/users/monalisa/orgs","repos_url": "https://api.github.com/users/monalisa/repos","events_url": "https://api.github.com/users/monalisa/events{/privacy}","received_events_url": "https://api.github.com/users/monalisa/received_events","type": "User","site_admin": true},"secret_type": "adafruit_io_key","secret_type_display_name": "Adafruit IO Key","secret": "aio_XXXXXXXXXXXXXXXXXXXXXXXXXXXX","push_protection_bypassed_by": {"login": "monalisa","id": 2,"node_id": "MDQ6VXNlcjI=","avatar_url": "https://alambic.github.com/avatars/u/2?","gravatar_id": "","url": "https://api.github.com/users/monalisa","html_url": "https://github.com/monalisa","followers_url": "https://api.github.com/users/monalisa/followers","following_url": "https://api.github.com/users/monalisa/following{/other_user}","gists_url": "https://api.github.com/users/monalisa/gists{/gist_id}","starred_url": "https://api.github.com/users/monalisa/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/monalisa/subscriptions","organizations_url": "https://api.github.com/users/monalisa/orgs","repos_url": "https://api.github.com/users/monalisa/repos","events_url": "https://api.github.com/users/monalisa/events{/privacy}","received_events_url": "https://api.github.com/users/monalisa/received_events","type": "User","site_admin": true},"push_protection_bypassed": true,"push_protection_bypassed_at": "2020-11-06T21:48:51Z","push_protection_bypass_request_reviewer": {"login": "octocat","id": 3,"node_id": "MDQ6VXNlcjI=","avatar_url": "https://alambic.github.com/avatars/u/3?","gravatar_id": "","url": "https://api.github.com/users/octocat","html_url": "https://github.com/octocat","followers_url": "https://api.github.com/users/octocat/followers","following_url": "https://api.github.com/users/octocat/following{/other_user}","gists_url": "https://api.github.com/users/octocat/gists{/gist_id}","starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/octocat/subscriptions","organizations_url": "https://api.github.com/users/octocat/orgs","repos_url": "https://api.github.com/users/octocat/repos","events_url": "https://api.github.com/users/octocat/events{/privacy}","received_events_url": "https://api.github.com/users/octocat/received_events","type": "User","site_admin": true},"push_protection_bypass_request_reviewer_comment": "Example response","push_protection_bypass_request_comment": "Example comment","push_protection_bypass_request_html_url": "https://github.com/matt-davis27/PyGithub/secret_scanning_exemptions/1","resolution_comment": "Example comment","validity": "inactive","publicly_leaked": false,"multi_repo": false,"is_base64_encoded": false,"first_location_detected": {"path": "/example/secrets.txt","start_line": 1,"end_line": 1,"start_column": 1,"end_column": 64,"blob_sha": "af5626b4a114abcb82d63db7c8082c3c4756e51b","blob_url": "https://api.github.com/repos/octocat/hello-world/git/blobs/af5626b4a114abcb82d63db7c8082c3c4756e51b","commit_sha": "f14d7debf9775f957cf4f1e8176da0786431f72b","commit_url": "https://api.github.com/repos/octocat/hello-world/git/commits/f14d7debf9775f957cf4f1e8176da0786431f72b"},"has_more_locations": true},{"number": 1,"created_at": "2020-11-06T18:18:30Z","url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1","html_url": "https://github.com/matt-davis27/PyGithub/security/secret-scanning/1","locations_url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1/locations","state": "open","resolution": null,"resolved_at": null,"resolved_by": null,"secret_type": "mailchimp_api_key","secret_type_display_name": "Mailchimp API Key","secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2","push_protection_bypassed_by": null,"push_protection_bypassed": false,"push_protection_bypassed_at": null,"push_protection_bypass_request_reviewer": null,"push_protection_bypass_request_reviewer_comment": null,"push_protection_bypass_request_comment": null,"push_protection_bypass_request_html_url": null,"resolution_comment": null,"validity": "unknown","publicly_leaked": false,"multi_repo": false,"is_base64_encoded": false,"first_location_detected": {"path": "/example/secrets.txt","start_line": 1,"end_line": 2,"start_column": 3,"end_column": 4, "blob_sha": "1234","blob_url": "https://api.github.com/repos/matt-davis27/PyGithub/git/blobs/1234","commit_sha": "123","commit_url": "https://api.github.com/repos/matt-davis27/PyGithub/git/commits/123"},"has_more_locations": false}] diff --git a/tests/ReplayData/SecretScanAlert.testRepr.txt b/tests/ReplayData/SecretScanAlert.testRepr.txt new file mode 100644 index 0000000000..c3eaffb6d6 --- /dev/null +++ b/tests/ReplayData/SecretScanAlert.testRepr.txt @@ -0,0 +1,10 @@ +https +GET +api.github.com +None +/repos/matt-davis27/PyGithub/secret-scanning/alerts/1 +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Date', 'Mon, 25 Aug 2025 23:56:54 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('X-OAuth-Scopes', 'admin:org, repo, workflow'), ('X-Accepted-OAuth-Scopes', 'public_repo, repo, security_events'), ('github-authentication-token-expiration', '2025-09-22 17:03:22 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', '1756169812'), ('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'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('Content-Encoding', 'gzip'), ('Transfer-Encoding', 'chunked'), ('Server', 'github.com'), ('X-GitHub-Request-Id', '783A:20B03C:1054EB0:10B6DC2:68ACF845')] +{"number": 1,"created_at": "2020-11-06T18:18:30Z","url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1","html_url": "https://github.com/matt-davis27/PyGithub/security/secret-scanning/1","locations_url": "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1/locations","state": "open","resolution": null,"resolved_at": null,"resolved_by": null,"secret_type": "mailchimp_api_key","secret_type_display_name": "Mailchimp API Key","secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2","push_protection_bypassed_by": null,"push_protection_bypassed": false,"push_protection_bypassed_at": null,"push_protection_bypass_request_reviewer": null,"push_protection_bypass_request_reviewer_comment": null,"push_protection_bypass_request_comment": null,"push_protection_bypass_request_html_url": null,"resolution_comment": null,"validity": "unknown","publicly_leaked": false,"multi_repo": false,"is_base64_encoded": false,"first_location_detected": {"path": "/example/secrets.txt","start_line": 1,"end_line": 2,"start_column": 3,"end_column": 4, "blob_sha": "1234","blob_url": "https://api.github.com/repos/matt-davis27/PyGithub/git/blobs/1234","commit_sha": "123","commit_url": "https://api.github.com/repos/matt-davis27/PyGithub/git/commits/123"},"has_more_locations": false} diff --git a/tests/ReplayData/Team.testMembers.txt b/tests/ReplayData/Team.testMembers.txt index fddc3ca4b8..d085230a16 100644 --- a/tests/ReplayData/Team.testMembers.txt +++ b/tests/ReplayData/Team.testMembers.txt @@ -35,9 +35,9 @@ https PUT api.github.com None -/organizations/1234567/team/12345678/members/jacquev6 -{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} -None +/organizations/1234567/team/12345678/memberships/jacquev6 +{'Content-Type': 'application/json', 'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +{"role": "member"} 204 [('status', '204 No Content'), ('x-ratelimit-remaining', '4971'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"d41d8cd98f00b204e9800998ecf8427e"'), ('date', 'Sat, 26 May 2012 21:09:55 GMT')] @@ -68,7 +68,7 @@ https DELETE api.github.com None -/organizations/1234567/team/12345678/members/jacquev6 +/organizations/1234567/team/12345678/memberships/jacquev6 {'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} None 204 diff --git a/tests/ReplayData/Workflow.testCreateDispatchException.txt b/tests/ReplayData/Workflow.testCreateDispatchException.txt new file mode 100644 index 0000000000..8b8a8bfc93 --- /dev/null +++ b/tests/ReplayData/Workflow.testCreateDispatchException.txt @@ -0,0 +1,32 @@ +https +GET +api.github.com +None +/repos/test-org/test-repo +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Mon, 06 May 2024 19:51:59 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"8039ee84b4eb207b1398275d957b94ee80320c859f018fad7c1f5000605cce41"'), ('Last-Modified', 'Mon, 06 May 2024 19:34:50 GMT'), ('X-OAuth-Scopes', 'repo, workflow'), ('X-Accepted-OAuth-Scopes', 'repo'), ('github-authentication-token-expiration', '2024-05-13 19:47:28 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '3537'), ('X-RateLimit-Reset', '1715026915'), ('X-RateLimit-Used', '1463'), ('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', 'E3A5:292E30:123CE55:1DCE5F8:663934DF')] +{"id":787458459,"node_id":"R_kgDOLu-pmw","name":"test-repo","full_name":"test-org/test-repo","private":true,"owner":{"login":"test-org","id":127791185,"node_id":"O_kgDOB53wUQ","avatar_url":"https://avatars.githubusercontent.com/u/127791185?v=4","gravatar_id":"","url":"https://api.github.com/users/test-org","html_url":"https://github.com/test-org","followers_url":"https://api.github.com/users/test-org/followers","following_url":"https://api.github.com/users/test-org/following{/other_user}","gists_url":"https://api.github.com/users/test-org/gists{/gist_id}","starred_url":"https://api.github.com/users/test-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-org/subscriptions","organizations_url":"https://api.github.com/users/test-org/orgs","repos_url":"https://api.github.com/users/test-org/repos","events_url":"https://api.github.com/users/test-org/events{/privacy}","received_events_url":"https://api.github.com/users/test-org/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/test-org/test-repo","description":"","fork":false,"url":"https://api.github.com/repos/test-org/test-repo","forks_url":"https://api.github.com/repos/test-org/test-repo/forks","keys_url":"https://api.github.com/repos/test-org/test-repo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/test-org/test-repo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/test-org/test-repo/teams","hooks_url":"https://api.github.com/repos/test-org/test-repo/hooks","issue_events_url":"https://api.github.com/repos/test-org/test-repo/issues/events{/number}","events_url":"https://api.github.com/repos/test-org/test-repo/events","assignees_url":"https://api.github.com/repos/test-org/test-repo/assignees{/user}","branches_url":"https://api.github.com/repos/test-org/test-repo/branches{/branch}","tags_url":"https://api.github.com/repos/test-org/test-repo/tags","blobs_url":"https://api.github.com/repos/test-org/test-repo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/test-org/test-repo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/test-org/test-repo/git/refs{/sha}","trees_url":"https://api.github.com/repos/test-org/test-repo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/test-org/test-repo/statuses/{sha}","languages_url":"https://api.github.com/repos/test-org/test-repo/languages","stargazers_url":"https://api.github.com/repos/test-org/test-repo/stargazers","contributors_url":"https://api.github.com/repos/test-org/test-repo/contributors","subscribers_url":"https://api.github.com/repos/test-org/test-repo/subscribers","subscription_url":"https://api.github.com/repos/test-org/test-repo/subscription","commits_url":"https://api.github.com/repos/test-org/test-repo/commits{/sha}","git_commits_url":"https://api.github.com/repos/test-org/test-repo/git/commits{/sha}","comments_url":"https://api.github.com/repos/test-org/test-repo/comments{/number}","issue_comment_url":"https://api.github.com/repos/test-org/test-repo/issues/comments{/number}","contents_url":"https://api.github.com/repos/test-org/test-repo/contents/{+path}","compare_url":"https://api.github.com/repos/test-org/test-repo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/test-org/test-repo/merges","archive_url":"https://api.github.com/repos/test-org/test-repo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/test-org/test-repo/downloads","issues_url":"https://api.github.com/repos/test-org/test-repo/issues{/number}","pulls_url":"https://api.github.com/repos/test-org/test-repo/pulls{/number}","milestones_url":"https://api.github.com/repos/test-org/test-repo/milestones{/number}","notifications_url":"https://api.github.com/repos/test-org/test-repo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/test-org/test-repo/labels{/name}","releases_url":"https://api.github.com/repos/test-org/test-repo/releases{/id}","deployments_url":"https://api.github.com/repos/test-org/test-repo/deployments","created_at":"2024-04-16T15:01:55Z","updated_at":"2024-05-06T19:34:50Z","pushed_at":"2024-05-06T19:34:47Z","git_url":"git://github.com/test-org/test-repo.git","ssh_url":"git@github.com:test-org/test-repo.git","clone_url":"https://github.com/test-org/test-repo.git","svn_url":"https://github.com/test-org/test-repo","homepage":null,"size":151,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":2,"license":null,"allow_forking":false,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"private","forks":0,"open_issues":2,"watchers":0,"default_branch":"main","permissions":{"admin":true,"maintain":true,"push":true,"triage":true,"pull":true},"temp_clone_token":"ABL6CD5QFVJTVVBLN6QCDWTGHE3AW","allow_squash_merge":true,"allow_merge_commit":false,"allow_rebase_merge":false,"allow_auto_merge":false,"delete_branch_on_merge":false,"allow_update_branch":false,"use_squash_pr_title_as_default":false,"squash_merge_commit_message":"COMMIT_MESSAGES","squash_merge_commit_title":"COMMIT_OR_PR_TITLE","merge_commit_message":"PR_TITLE","merge_commit_title":"MERGE_MESSAGE","custom_properties":{},"organization":{"login":"test-org","id":127791185,"node_id":"O_kgDOB53wUQ","avatar_url":"https://avatars.githubusercontent.com/u/127791185?v=4","gravatar_id":"","url":"https://api.github.com/users/test-org","html_url":"https://github.com/test-org","followers_url":"https://api.github.com/users/test-org/followers","following_url":"https://api.github.com/users/test-org/following{/other_user}","gists_url":"https://api.github.com/users/test-org/gists{/gist_id}","starred_url":"https://api.github.com/users/test-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-org/subscriptions","organizations_url":"https://api.github.com/users/test-org/orgs","repos_url":"https://api.github.com/users/test-org/repos","events_url":"https://api.github.com/users/test-org/events{/privacy}","received_events_url":"https://api.github.com/users/test-org/received_events","type":"Organization","site_admin":false},"security_and_analysis":{"advanced_security":{"status":"enabled"},"secret_scanning":{"status":"enabled"},"secret_scanning_push_protection":{"status":"enabled"},"dependabot_security_updates":{"status":"enabled"},"secret_scanning_validity_checks":{"status":"enabled"}},"network_count":0,"subscribers_count":1} + +https +GET +api.github.com +None +/repos/test-org/test-repo/actions/workflows/workflow-with-params.yaml +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python'} +None +200 +[('Server', 'GitHub.com'), ('Date', 'Mon, 06 May 2024 19:51:59 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Transfer-Encoding', 'chunked'), ('Cache-Control', 'private, max-age=60, s-maxage=60'), ('Vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With'), ('ETag', 'W/"5cc7d3a55ef0d203fad9ca46895cac5068a14e366a07923cc382cbdd6aca9fe9"'), ('X-OAuth-Scopes', 'repo, workflow'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2024-05-13 19:47:28 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '3536'), ('X-RateLimit-Reset', '1715026915'), ('X-RateLimit-Used', '1464'), ('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', 'E3A6:67ECE:12E64E4:1EEF523:663934DF')] +{"id":96985305,"node_id":"W_kwDOLu-pm84Fx-DZ","name":"Release","path":".github/workflows/workflow-with-params.yaml","state":"active","created_at":"2024-05-06T15:34:47.000-04:00","updated_at":"2024-05-06T15:34:47.000-04:00","url":"https://api.github.com/repos/test-org/test-repo/actions/workflows/96985305","html_url":"https://github.com/test-org/test-repo/blob/main/.github/workflows/workflow-with-params.yaml","badge_url":"https://github.com/test-org/test-repo/workflows/Release/badge.svg"} + +https +POST +api.github.com +None +/repos/test-org/test-repo/actions/workflows/96985305/dispatches +{'Authorization': 'token private_token_removed', 'User-Agent': 'PyGithub/Python', 'Content-Type': 'application/json'} +{"ref": "main", "inputs": {}} +422 +[('Server', 'GitHub.com'), ('Date', 'Mon, 06 May 2024 19:51:59 GMT'), ('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', '165'), ('X-OAuth-Scopes', 'repo, workflow'), ('X-Accepted-OAuth-Scopes', ''), ('github-authentication-token-expiration', '2024-05-13 19:47:28 UTC'), ('X-GitHub-Media-Type', 'github.v3; format=json'), ('x-github-api-version-selected', '2022-11-28'), ('X-RateLimit-Limit', '5000'), ('X-RateLimit-Remaining', '3535'), ('X-RateLimit-Reset', '1715026915'), ('X-RateLimit-Used', '1465'), ('X-RateLimit-Resource', 'core'), ('Access-Control-Expose-Headers', 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset'), ('Access-Control-Allow-Origin', '*'), ('Strict-Transport-Security', 'max-age=31536000; includeSubdomains; preload'), ('X-Frame-Options', 'deny'), ('X-Content-Type-Options', 'nosniff'), ('X-XSS-Protection', '0'), ('Referrer-Policy', 'origin-when-cross-origin, strict-origin-when-cross-origin'), ('Content-Security-Policy', "default-src 'none'"), ('Vary', 'Accept-Encoding, Accept, X-Requested-With'), ('X-GitHub-Request-Id', 'E3A7:3C06C6:2683B81:4131A81:663934DF')] +{"message":"Required input 'mandatory-parameter' not provided","documentation_url":"https://docs.github.com/rest/actions/workflows#create-a-workflow-dispatch-event"} diff --git a/tests/Repository.py b/tests/Repository.py index deaa388006..6934155833 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -78,8 +78,11 @@ # Copyright 2025 Jason M. Gates # # Copyright 2025 Matt Ball <96152357+mball-agathos@users.noreply.github.com> # # Copyright 2025 Mikhail f. Shiryaev # +# Copyright 2025 Ryosuke <88011751+nrysk@users.noreply.github.com> # # Copyright 2025 Tan An Nie <121005973+tanannie22@users.noreply.github.com> # # Copyright 2025 Zdenek Styblik <6183869+zstyblik@users.noreply.github.com> # +# Copyright 2026 Enrico Minack # +# Copyright 2026 Matt Davis <35502728+matt-davis27@users.noreply.github.com> # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -106,6 +109,8 @@ import github import github.Repository +import github.Requester +from github.GithubObject import is_undefined from . import Framework @@ -306,6 +311,10 @@ def testEditWithAllArguments(self): merge_commit_title="PR_TITLE", merge_commit_message="PR_BODY", web_commit_signoff_required=True, + security_and_analysis={ + "secret_scanning": {"status": "enabled"}, + "dependabot_security_updates": {"status": "disabled"}, + }, ) self.assertEqual(self.repo.description, "Description edited by PyGithub") self.repo.edit("PyGithub", "Python library implementing the full Github API v3") @@ -328,6 +337,10 @@ def testEditWithAllArguments(self): self.assertEqual(self.repo.merge_commit_title, "PR_TITLE") self.assertEqual(self.repo.merge_commit_message, "PR_BODY") self.assertTrue(self.repo.web_commit_signoff_required) + self.assertEqual(self.repo.security_and_analysis.secret_scanning.status, "enabled") + self.assertEqual(self.repo.security_and_analysis.dependabot_security_updates.status, "disabled") + self.repo.edit("PyGithub", security_and_analysis={"dependabot_security_updates": {"status": "enabled"}}) + self.assertEqual(self.repo.security_and_analysis.dependabot_security_updates.status, "enabled") def testEditWithDefaultBranch(self): self.assertEqual(self.repo.master_branch, None) @@ -653,6 +666,12 @@ def testRepoSecrets(self, encrypt): for matched_repo_secret in matched_repo_secrets: matched_repo_secret.delete() + def testLazySecret(self): + secret = self.g.withLazy(True).get_repo("lazy/repo").get_secret("secret name") + self.assertEqual(str(secret), 'Secret(name="secret name")') + self.assertEqual(secret.name, "secret name") + self.assertEqual(secret.url, "/repos/lazy/repo/actions/secrets/secret%20name") + def testCodeScanAlerts(self): codescan_alerts = self.repo.get_codescan_alerts() self.assertListKeyEqual( @@ -663,7 +682,7 @@ def testCodeScanAlerts(self): ], ) codescan_alert = codescan_alerts[0] - self.assertEqual(repr(codescan_alert), "CodeScanAlert(number=6)") + self.assertEqual(repr(codescan_alert), 'CodeScanAlert(number=6, id="py/rule-id")') self.assertEqual(codescan_alert.state, "open") self.assertEqual( codescan_alert.url, @@ -809,50 +828,102 @@ def testCollaboratorPermissionNoPushAccess(self): ) def testCompare(self): - comparison = self.repo.compare("v0.6", "v0.7") - self.assertEqual(comparison.status, "ahead") - self.assertEqual(comparison.ahead_by, 4) - self.assertEqual(comparison.behind_by, 0) - self.assertEqual( - comparison.diff_url, - "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff", - ) - self.assertEqual( - comparison.html_url, - "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7", - ) - self.assertEqual( - comparison.url, - "https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7", - ) - self.assertEqual( - comparison.patch_url, - "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch", - ) - self.assertEqual( - comparison.permalink_url, - "https://github.com/PyGithub/PyGithub/compare/jacquev6:4303c5b...jacquev6:ecda065", - ) - self.assertEqual(comparison.total_commits, 4) + with self.captureRequests() as requests: + comparison = self.repo.compare("v0.6", "v0.7") + self.assertEqual(comparison.status, "ahead") + self.assertEqual(comparison.ahead_by, 4) + self.assertEqual(comparison.behind_by, 0) + self.assertEqual( + comparison.diff_url, + "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff", + ) + self.assertEqual( + comparison.html_url, + "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7", + ) + self.assertEqual( + comparison.url, + "https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7", + ) + self.assertEqual( + comparison.patch_url, + "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch", + ) + self.assertEqual( + comparison.permalink_url, + "https://github.com/PyGithub/PyGithub/compare/PyGithub:4303c5b...PyGithub:ecda065", + ) + self.assertEqual(comparison.total_commits, 4) + self.assertListKeyEqual( + comparison.files, + lambda f: f.filename, + [ + "ReferenceOfClasses.md", + "github/Github.py", + "github/Requester.py", + "setup.py", + ], + ) + self.assertEqual(comparison.base_commit.sha, "4303c5b90e2216d927155e9609436ccb8984c495") + self.assertListKeyEqual( + comparison.commits, + lambda c: c.sha, + [ + "5bb654d26dd014d36794acd1e6ecf3736f12aad7", + "cb0313157bf904f2d364377d35d9397b269547a5", + "0cec0d25e606c023a62a4fc7cdc815309ebf6d16", + "ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7", + ], + ) + self.assertListKeyEqual( - comparison.files, - lambda f: f.filename, - [ - "ReferenceOfClasses.md", - "github/Github.py", - "github/Requester.py", - "setup.py", - ], - ) - self.assertEqual(comparison.base_commit.sha, "4303c5b90e2216d927155e9609436ccb8984c495") + requests, + lambda r: r.url, + ["/repos/PyGithub/PyGithub/compare/v0.6...v0.7?page=1"], + ) + + def testCompareCommitsPerPage(self): + with self.captureRequests() as requests: + comparison = self.repo.compare("v0.6", "v0.7", comparison_commits_per_page=3) + + self.assertEqual( + comparison.diff_url, + "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.diff", + ) + self.assertEqual( + comparison.html_url, + "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7", + ) + self.assertEqual( + comparison.url, + "https://api.github.com/repos/PyGithub/PyGithub/compare/v0.6...v0.7", + ) + self.assertEqual( + comparison.patch_url, + "https://github.com/PyGithub/PyGithub/compare/v0.6...v0.7.patch", + ) + self.assertEqual( + comparison.permalink_url, + "https://github.com/PyGithub/PyGithub/compare/PyGithub:4303c5b...PyGithub:ecda065", + ) + self.assertEqual(comparison.total_commits, 4) + self.assertListKeyEqual( + comparison.commits, + lambda c: c.sha, + [ + "5bb654d26dd014d36794acd1e6ecf3736f12aad7", + "cb0313157bf904f2d364377d35d9397b269547a5", + "0cec0d25e606c023a62a4fc7cdc815309ebf6d16", + "ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7", + ], + ) + self.assertListKeyEqual( - comparison.commits, - lambda c: c.sha, + requests, + lambda r: r.url, [ - "5bb654d26dd014d36794acd1e6ecf3736f12aad7", - "cb0313157bf904f2d364377d35d9397b269547a5", - "0cec0d25e606c023a62a4fc7cdc815309ebf6d16", - "ecda065e01876209d2bdf5fe4e91cee8ffaa9ff7", + "/repos/PyGithub/PyGithub/compare/v0.6...v0.7?page=1&per_page=3", + "/repositories/3544490/compare/v0.6...v0.7?page=2&per_page=3", ], ) @@ -1285,6 +1356,26 @@ def testGetIssuesWithWildcards(self): ) self.assertListKeyEqual(self.repo.get_issues(assignee="none"), lambda i: i.id, [3619973]) + def testGetIssuesWithTypeArgument(self): + self.assertListKeyEqual( + self.repo.get_issues(type="bug"), + lambda i: i.id, + [3425963739, 3399666591, 3398817538], + ) + self.assertListKeyEqual(self.repo.get_issues(type="feature", state="closed"), lambda i: i.id, [3326107606]) + + def testGetIssuesWithTypeWildcard(self): + self.assertListKeyEqual( + self.repo.get_issues(type="*"), + lambda i: i.id, + [3425963739, 3399666591, 3398817538], + ) + self.assertListKeyEqual( + self.repo.get_issues(type="*", state="closed"), + lambda i: i.id, + [3375750938, 3326109475, 3326109065, 3326107606, 4653757], + ) + def testGetKeys(self): self.assertListKeyEqual(self.repo.get_keys(), lambda k: k.title, ["Key added through PyGithub"]) @@ -1303,7 +1394,10 @@ def testGetLabels(self): ) def testGetLanguages(self): - self.assertEqual(self.repo.get_languages(), {"Python": 127266, "Shell": 673}) + self.assertEqual( + self.repo.get_languages(), + {"Python": 127266, "Shell": 673, "url": "https://api.github.com/repos/PyGithub/PyGithub/languages"}, + ) def testGetMilestones(self): self.assertListKeyEqual(self.repo.get_milestones(), lambda m: m.id, [93547]) @@ -1992,7 +2086,8 @@ def testUnsubscribePubSubHubbub(self): self.repo.unsubscribe_from_hub("push", "http://requestb.in/1bc1sc61") def testStatisticsContributors(self): - stats = self.repo.get_stats_contributors() + with mock.patch("github.Requester.Consts.PROCESSING_202_WAIT_TIME", 0): + stats = self.repo.get_stats_contributors() seenJacquev6 = False for s in stats: adTotal = 0 @@ -2011,7 +2106,8 @@ def testStatisticsContributors(self): self.assertTrue(seenJacquev6) def testStatisticsCommitActivity(self): - stats = self.repo.get_stats_commit_activity() + with mock.patch("github.Requester.Consts.PROCESSING_202_WAIT_TIME", 0): + stats = self.repo.get_stats_commit_activity() self.assertEqual( stats[0].week, datetime(2012, 11, 18, 0, 0, tzinfo=timezone.utc), @@ -2020,7 +2116,8 @@ def testStatisticsCommitActivity(self): self.assertEqual(stats[0].days, [0, 7, 3, 9, 7, 3, 0]) def testStatisticsCodeFrequency(self): - stats = self.repo.get_stats_code_frequency() + with mock.patch("github.Requester.Consts.PROCESSING_202_WAIT_TIME", 0): + stats = self.repo.get_stats_code_frequency() self.assertEqual( stats[0].week, datetime(2012, 2, 12, 0, 0, tzinfo=timezone.utc), @@ -2029,7 +2126,8 @@ def testStatisticsCodeFrequency(self): self.assertEqual(stats[0].deletions, -2098) def testStatisticsParticipation(self): - stats = self.repo.get_stats_participation() + with mock.patch("github.Requester.Consts.PROCESSING_202_WAIT_TIME", 0): + stats = self.repo.get_stats_participation() self.assertEqual( stats.owner, [ @@ -2146,7 +2244,8 @@ def testStatisticsParticipation(self): ) def testStatisticsPunchCard(self): - stats = self.repo.get_stats_punch_card() + with mock.patch("github.Requester.Consts.PROCESSING_202_WAIT_TIME", 0): + stats = self.repo.get_stats_punch_card() self.assertEqual(stats.get(4, 12), 7) self.assertEqual(stats.get(6, 18), 2) @@ -2180,6 +2279,12 @@ def testRepoVariable(self): self.assertTrue(variable.edit("variable-value123")) variable.delete() + def testGetLazyVariable(self): + var = self.g.withLazy(True).get_repo("lazy/repo").get_variable("var name") + self.assertEqual(str(var), 'Variable(name="var name")') + self.assertEqual(var.name, "var name") + self.assertEqual(var.url, "/repos/lazy/repo/actions/variables/var%20name") + def testRepoVariables(self): # GitHub will always capitalize the variable name variables = (("VARIABLE_NAME_ONE", "variable-value-one"), ("VARIABLE_NAME_TWO", "variable-value-two")) @@ -2249,7 +2354,11 @@ def testTransferOwnershipInvalidOwner(self): def testGetAutomatedSecurityFixes(self): self.assertDictEqual( self.repo.get_automated_security_fixes(), - {"enabled": True, "paused": False}, + { + "enabled": True, + "paused": False, + "url": "https://api.github.com/repos/PyGithub/PyGithub/automated-security-fixes", + }, ) @@ -2264,6 +2373,66 @@ def getLazyRepository(self): def getEagerRepository(self): return self.g.get_repo(self.repository_name, lazy=False) + def testLazyAttributes(self): + repo = self.g.withLazy(True).get_repo("lazy/repo") + self.assertEqual(str(repo), 'Repository(full_name="lazy/repo")') + self.assertEqual(repo._identity, "lazy/repo") + self.assertTrue(is_undefined(repo._id)) + self.assertEqual(repo.name, "repo") + self.assertEqual(repo.full_name, "lazy/repo") + self.assertEqual(repo.url, "/repos/lazy/repo") + + repo = self.g.withLazy(True).get_repo(42) + self.assertEqual(str(repo), "Repository(id=42)") + self.assertEqual(repo._identity, "42") + self.assertEqual(repo.id, 42) + self.assertTrue(is_undefined(repo._name)) + self.assertTrue(is_undefined(repo._full_name)) + self.assertEqual(repo.url, "/repositories/42") + + def testCreatFromUrl(self): + requester = mock.Mock(github.Requester.Requester, base_url="https://test.ing/api/", is_not_lazy=False) + + for base_url in [requester.base_url[:-1], ""]: + repo = github.Repository.Repository(requester, url=f"{base_url}/repositories/12345") + self.assertEqual(repo.url, f"{base_url}/repositories/12345", msg=f"base url: '{base_url}'") + self.assertEqual(repo.id, 12345) + self.assertTrue(is_undefined(repo._full_name)) + self.assertTrue(is_undefined(repo._name)) + + repo = github.Repository.Repository(requester, url=f"{base_url}/repos/login/name") + self.assertEqual(repo.url, f"{base_url}/repos/login/name", msg=f"base url: '{base_url}'") + self.assertTrue(is_undefined(repo._id)) + self.assertEqual(repo.full_name, "login/name") + self.assertEqual(repo.name, "name") + + repo = github.Repository.Repository(requester, url=f"{base_url}/repos/login/12345") + self.assertEqual(repo.url, f"{base_url}/repos/login/12345", msg=f"base url: '{base_url}'") + self.assertTrue(is_undefined(repo._id)) + self.assertEqual(repo.full_name, "login/12345") + self.assertEqual(repo.name, "12345") + + def testCreatFromAttributes(self): + requester = mock.Mock(github.Requester.Requester, base_url="https://test.ing/api/", is_not_lazy=False) + + repo = github.Repository.Repository(requester, attributes={"id": 12345}) + self.assertEqual(repo.url, "/repositories/12345") + self.assertEqual(repo.id, 12345) + self.assertTrue(is_undefined(repo._full_name)) + self.assertTrue(is_undefined(repo._name)) + + repo = github.Repository.Repository(requester, attributes={"owner": {"login": "login"}, "name": "name"}) + self.assertEqual(repo.url, "/repos/login/name") + self.assertTrue(is_undefined(repo._id)) + self.assertEqual(repo.full_name, "login/name") + self.assertEqual(repo.name, "name") + + repo = github.Repository.Repository(requester, attributes={"full_name": "full/name"}) + self.assertEqual(repo.url, "/repos/full/name") + self.assertTrue(is_undefined(repo._id)) + self.assertEqual(repo.full_name, "full/name") + self.assertEqual(repo.name, "name") + def testGetIssues(self): lazy_repo = self.getLazyRepository() issues = lazy_repo.get_issues() diff --git a/tests/RepositoryKey.py b/tests/RepositoryKey.py index 5558047e00..ee06b92be6 100644 --- a/tests/RepositoryKey.py +++ b/tests/RepositoryKey.py @@ -80,6 +80,12 @@ def testAttributes(self): datetime(2024, 4, 13, 10, 0, 21, tzinfo=timezone.utc), ) + def testLazyAttributes(self): + issue = self.g.withLazy(True).get_repo("lazy/repo").get_key(42) + self.assertEqual(str(issue), "RepositoryKey(title=None, id=42)") + self.assertEqual(issue.id, 42) + self.assertEqual(issue.url, "/repos/lazy/repo/keys/42") + def testYetUnusedKey(self): self.assertEqual(self.yet_unused_key.id, 98051552) self.assertEqual( diff --git a/tests/Requester.py b/tests/Requester.py index beaad99a82..09c09a26e7 100644 --- a/tests/Requester.py +++ b/tests/Requester.py @@ -8,6 +8,7 @@ # Copyright 2025 Enrico Minack # # Copyright 2025 Jakub Smolar # # Copyright 2025 Timothy Klopotoski # +# Copyright 2026 Enrico Minack # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -168,15 +169,15 @@ def testAddParametersToUrl(self): gr.Requester.add_parameters_to_url("https://github.com/api", {"per_page": 10}), ) self.assertEqual( - "https://github.com/api?per_page=10&page=2", + "https://github.com/api?page=2&per_page=10", 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", + "https://github.com/api?page=2&per_page=10", 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", + "https://github.com/api?page=2&per_page=10", gr.Requester.add_parameters_to_url("https://github.com/api?per_page=10&page=1", {"page": 2}), ) self.assertEqual( @@ -271,18 +272,19 @@ def testHostnameHasDomain(self): assert self.g.requester.__hostnameHasDomain("ghe.local", "ghe.local") assert self.g.requester.__hostnameHasDomain("api.ghe.local", "ghe.local") assert self.g.requester.__hostnameHasDomain("api.prod.ghe.local", "prod.ghe.local") - assert self.g.requester.__hostnameHasDomain("github.com", ("github.com", "githubusercontent.com")) - assert self.g.requester.__hostnameHasDomain("api.github.com", ("github.com", "githubusercontent.com")) - assert self.g.requester.__hostnameHasDomain("githubusercontent.com", ("github.com", "githubusercontent.com")) + assert self.g.requester.__hostnameHasDomain("github.com", ["github.com", "githubusercontent.com"]) + assert self.g.requester.__hostnameHasDomain("api.github.com", ["github.com", "githubusercontent.com"]) + assert self.g.requester.__hostnameHasDomain("githubusercontent.com", ["github.com", "githubusercontent.com"]) assert self.g.requester.__hostnameHasDomain( - "objects.githubusercontent.com", ("github.com", "githubusercontent.com") + "objects.githubusercontent.com", ["github.com", "githubusercontent.com"] ) assert self.g.requester.__hostnameHasDomain("maliciousgithub.com", "github.com") is False - assert self.g.requester.__hostnameHasDomain("abc.def", ("github.com", "githubusercontent.com")) is False + assert self.g.requester.__hostnameHasDomain("abc.def", ["github.com", "githubusercontent.com"]) is False def testAssertUrlAllowed(self): # default github.com requester requester = self.g.requester + self.assertEqual(set(requester.__domains), {"github.com", "githubusercontent.com"}) for allowed in [ "https://api.github.com/request", @@ -308,6 +310,7 @@ def testAssertUrlAllowed(self): # custom (Enterprise) requester with prefix requester = github.Github(base_url="https://prod.ghe.local/github-api/").requester + self.assertEqual(set(requester.__domains), {"prod.ghe.local"}) for allowed in [ "https://prod.ghe.local/github-api/request", @@ -335,6 +338,37 @@ def testAssertUrlAllowed(self): requester.__assertUrlAllowed(not_allowed) self.assertEqual(exc.exception.args, (arg,)) + # custom (Enterprise) requester with api subdomain and prefix + requester = github.Github(base_url="https://api.prod.ghe.local/github-api/").requester + self.assertEqual(set(requester.__domains), {"api.prod.ghe.local", "prod.ghe.local"}) + + for allowed in [ + "https://api.prod.ghe.local/github-api/request", + "https://prod.ghe.local/path", + "https://uploads.prod.ghe.local/path", + "https://status.prod.ghe.local/path", + ]: + requester.__assertUrlAllowed(allowed) + + for not_allowed, arg in [ + ("https://api.prod.ghe.local/path", "/path"), + ("https://ghe.local/path", "ghe.local"), + ("https://api.github.com/request", "api.github.com"), + ("https://github.com/path", "github.com"), + ("https://uploads.github.com/path", "uploads.github.com"), + ("https://status.github.com/path", "status.github.com"), + ("https://githubusercontent.com/path", "githubusercontent.com"), + ("https://objects.githubusercontent.com/path", "objects.githubusercontent.com"), + ( + "https://release-assets.githubusercontent.com/path", + "release-assets.githubusercontent.com", + ), + ("https://example.com/", "example.com"), + ]: + with self.assertRaises(AssertionError) as exc: + requester.__assertUrlAllowed(not_allowed) + self.assertEqual(exc.exception.args, (arg,)) + def testMakeAbsoluteUrl(self): # default github.com requester requester = self.g.requester diff --git a/tests/SecretScanAlert.py b/tests/SecretScanAlert.py new file mode 100644 index 0000000000..4322c38f3f --- /dev/null +++ b/tests/SecretScanAlert.py @@ -0,0 +1,138 @@ +############################ Copyrights and license ############################ +# # +# Copyright 2026 Matt Davis <35502728+matt-davis27@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 . # +# # +################################################################################ + +from __future__ import annotations + +from datetime import datetime, timezone + +import github.PaginatedList +import github.SecretScanAlert + +from . import Framework + + +class SecretScanAlert(Framework.TestCase): + alert: github.SecretScanAlert.SecretScanAlert + + def setUp(self): + super().setUp() + self.repo = self.g.get_repo("matt-davis27/PyGithub") + + def testAttributes(self): + alert = self.repo.get_secret_scanning_alert(1) + self.assertEqual(alert.number, 1) + self.assertEqual(alert.created_at, datetime(2020, 11, 6, 18, 18, 30, tzinfo=timezone.utc)) + self.assertEqual(alert.url, "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1") + self.assertEqual(alert.html_url, "https://github.com/matt-davis27/PyGithub/security/secret-scanning/1") + self.assertEqual( + alert.locations_url, "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1/locations" + ) + self.assertEqual(alert.state, "open") + self.assertIsNone(alert.resolution) + self.assertIsNone(alert.resolved_at) + self.assertIsNone(alert.resolved_by) + self.assertEqual(alert.secret_type, "mailchimp_api_key") + self.assertEqual(alert.secret, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2") + self.assertIsNone(alert.push_protection_bypassed_by) + self.assertFalse(alert.push_protection_bypassed) + self.assertIsNone(alert.push_protection_bypassed_at) + self.assertIsNone(alert.push_protection_bypass_request_reviewer) + self.assertIsNone(alert.push_protection_bypass_request_reviewer_comment) + self.assertIsNone(alert.push_protection_bypass_request_comment) + self.assertIsNone(alert.push_protection_bypass_request_html_url) + self.assertIsNone(alert.resolution_comment) + self.assertEqual(alert.validity, "unknown") + self.assertFalse(alert.publicly_leaked) + self.assertFalse(alert.multi_repo) + self.assertFalse(alert.is_base64_encoded) + self.assertEqual(alert.first_location_detected.path, "/example/secrets.txt") + self.assertEqual(alert.first_location_detected.start_line, 1) + self.assertEqual(alert.first_location_detected.end_line, 2) + self.assertEqual(alert.first_location_detected.start_column, 3) + self.assertEqual(alert.first_location_detected.end_column, 4) + self.assertFalse(alert.has_more_locations) + + def testMultipleAlerts(self): + multiple_alerts = self.repo.get_secret_scanning_alerts() + self.assertIsInstance(multiple_alerts, github.PaginatedList.PaginatedList) + self.assertIsInstance(multiple_alerts[0], github.SecretScanAlert.SecretScanAlert) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 2) + + test_alert = alert_list[ + -1 + ] # Alerts are returned in descending order, so the first alert is the most recent and the last alert is the oldest + # Everything below is the same as testAttributes. This is just to make sure the list works. + self.assertEqual(test_alert.number, 1) + self.assertEqual(test_alert.created_at, datetime(2020, 11, 6, 18, 18, 30, tzinfo=timezone.utc)) + self.assertEqual(test_alert.url, "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1") + self.assertEqual(test_alert.html_url, "https://github.com/matt-davis27/PyGithub/security/secret-scanning/1") + self.assertEqual( + test_alert.locations_url, + "https://api.github.com/repos/matt-davis27/PyGithub/secret-scanning/alerts/1/locations", + ) + self.assertEqual(test_alert.state, "open") + self.assertIsNone(test_alert.resolution) + self.assertIsNone(test_alert.resolved_at) + self.assertIsNone(test_alert.resolved_by) + self.assertEqual(test_alert.secret_type, "mailchimp_api_key") + self.assertEqual(test_alert.secret, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2") + self.assertIsNone(test_alert.push_protection_bypassed_by) + self.assertFalse(test_alert.push_protection_bypassed) + self.assertIsNone(test_alert.push_protection_bypassed_at) + self.assertIsNone(test_alert.push_protection_bypass_request_reviewer) + self.assertIsNone(test_alert.push_protection_bypass_request_reviewer_comment) + self.assertIsNone(test_alert.push_protection_bypass_request_comment) + self.assertIsNone(test_alert.push_protection_bypass_request_html_url) + self.assertIsNone(test_alert.resolution_comment) + self.assertEqual(test_alert.validity, "unknown") + self.assertFalse(test_alert.publicly_leaked) + self.assertFalse(test_alert.multi_repo) + self.assertFalse(test_alert.is_base64_encoded) + self.assertEqual(test_alert.first_location_detected.path, "/example/secrets.txt") + self.assertEqual(test_alert.first_location_detected.start_line, 1) + self.assertEqual(test_alert.first_location_detected.end_line, 2) + self.assertEqual(test_alert.first_location_detected.start_column, 3) + self.assertEqual(test_alert.first_location_detected.end_column, 4) + self.assertFalse(test_alert.has_more_locations) + + def testRepr(self): + alert = self.repo.get_secret_scanning_alert(1) + self.assertEqual(repr(alert), "SecretScanAlert(number=1)") + + def testGetAlertsWithAllArguments(self): + multiple_alerts = self.repo.get_secret_scanning_alerts( + state="resolved", + secret_type="adafruit_io_key", + resolution="false_positive", + sort="created", + direction="asc", + validity="inactive", + is_publicly_leaked=False, + is_multi_repo=False, + hide_secret=True, + ) + alert_list = [alert for alert in multiple_alerts] + self.assertEqual(len(alert_list), 1) + + test_alert = alert_list[-1] + self.assertIsNone(test_alert.secret) # Because hide_secret is True diff --git a/tests/Team.py b/tests/Team.py index a4234f136d..578b522978 100644 --- a/tests/Team.py +++ b/tests/Team.py @@ -70,6 +70,7 @@ def setUp(self): def testAttributes(self): self.assertEqual(self.team.created_at, datetime(2024, 6, 18, 10, 27, 23, tzinfo=timezone.utc)) self.assertEqual(self.team.description, "a team") + self.assertIsNone(self.team.enterprise_id) self.assertIsNone(self.team.group_id) self.assertIsNone(self.team.group_name) self.assertEqual(self.team.html_url, "https://github.com/orgs/BeaverSoftware/teams/team-slug") @@ -83,6 +84,7 @@ def testAttributes(self): self.assertEqual(self.team.node_id, "AbCdEfG") self.assertEqual(self.team.notification_setting, "notifications_disabled") self.assertEqual(self.team.organization.login, "BeaverSoftware") + self.assertIsNone(self.team.organization_id) self.assertIsNone(self.team.organization_selection_type) self.assertIsNone(self.team.parent) self.assertEqual(self.team.permission, "pull") @@ -92,6 +94,7 @@ def testAttributes(self): self.assertEqual(self.team.repositories_url, "https://api.github.com/organizations/1234567/team/12345678/repos") self.assertEqual(self.team.slug, "team-slug") self.assertIsNone(self.team.sync_to_organizations) + self.assertIsNone(self.team.type) self.assertEqual(self.team.updated_at, datetime(2024, 6, 18, 10, 27, 23, tzinfo=timezone.utc)) self.assertEqual(self.team.url, "https://api.github.com/organizations/1234567/team/12345678") self.assertEqual(self.team.organization, self.org) @@ -100,6 +103,13 @@ def testAttributes(self): self.assertEqual(repr(self.team), 'Team(name="Team", id=12345678)') self.assertEqual(self.team.html_url, "https://github.com/orgs/BeaverSoftware/teams/team-slug") + def testLazyAttributes(self): + team = self.g.withLazy(True).get_organization("org").get_team(42) + self.assertEqual(str(team), "Team(name=None, id=42)") + self.assertEqual(team._identity, 42) + self.assertEqual(team.id, 42) + self.assertEqual(team.url, "/teams/42") + def testDiscussions(self): discussions = list(self.team.get_discussions()) self.assertEqual(len(discussions), 1) @@ -133,10 +143,10 @@ def testMembers(self): user = self.g.get_user("jacquev6") self.assertListKeyEqual(self.team.get_members(), None, []) self.assertFalse(self.team.has_in_members(user)) - self.team.add_to_members(user) + self.team.add_membership(user) self.assertListKeyEqual(self.team.get_members(), lambda u: u.login, ["jacquev6"]) self.assertTrue(self.team.has_in_members(user)) - self.team.remove_from_members(user) + self.team.remove_membership(user) self.assertListKeyEqual(self.team.get_members(), None, []) self.assertFalse(self.team.has_in_members(user)) self.team.add_membership(user, "maintainer") diff --git a/tests/Workflow.py b/tests/Workflow.py index 8c16433cd5..10da80dd01 100644 --- a/tests/Workflow.py +++ b/tests/Workflow.py @@ -19,6 +19,7 @@ # Copyright 2024 Enrico Minack # # Copyright 2025 Enrico Minack # # Copyright 2025 Nick McClorey <32378821+nickrmcclorey@users.noreply.github.com># +# Copyright 2026 Denis Blanchette # # # # This file is part of PyGithub. # # http://pygithub.readthedocs.io/ # @@ -42,6 +43,8 @@ from datetime import datetime, timezone +from github import GithubException + from . import Framework @@ -82,6 +85,18 @@ def testAttributes(self): "https://github.com/PyGithub/PyGithub/workflows/check/badge.svg", ) + def testLazyAttributes(self): + workflow = self.g.withLazy(True).get_repo("PyGithub/PyGithub").get_workflow("check.yml") + self.assertEqual( + str(workflow), 'Workflow(url="/repos/PyGithub/PyGithub/actions/workflows/check.yml", name=None)' + ) + self.assertEqual(workflow.url, "/repos/PyGithub/PyGithub/actions/workflows/check.yml") + + workflow = self.g.withLazy(True).get_repo("PyGithub/PyGithub").get_workflow(42) + self.assertEqual(str(workflow), 'Workflow(url="/repos/PyGithub/PyGithub/actions/workflows/42", name=None)') + self.assertEqual(workflow.id, 42) + self.assertEqual(workflow.url, "/repos/PyGithub/PyGithub/actions/workflows/42") + def testGetRunsWithNoArguments(self): self.assertListKeyEqual( self.workflow.get_runs(), @@ -142,6 +157,13 @@ def testCreateDispatchForNonTriggerEnabled(self): workflow = self.g.get_repo("wrecker/PyGithub").get_workflow("check.yml") self.assertFalse(workflow.create_dispatch("main")) + def testCreateDispatchException(self): + workflow = self.g.get_repo("test-org/test-repo").get_workflow("workflow-with-params.yaml") + with self.assertRaises(GithubException) as raisedexp: + workflow.create_dispatch("main", throw=True) + self.assertEqual(raisedexp.exception.status, 422) + self.assertEqual(raisedexp.exception.data["message"], "Required input 'mandatory-parameter' not provided") + def testDisable(self): workflow = self.g.get_repo("nickrmcclorey/PyGithub").get_workflow("ci.yml") self.assertTrue(workflow.disable()) diff --git a/tox.ini b/tox.ini index 8139076d0b..89fedc1645 100644 --- a/tox.ini +++ b/tox.ini @@ -1,26 +1,26 @@ [tox] envlist = lint, - py{38,39,310,311,312,313}, + py{39,310,311,312,313,314}, docs [gh-actions] # this make sure each ci job only run tests once. # keey it sync with workflows/ci.yaml matrix python = - 3.8: py38 3.9: py39 3.10: py310 3.11: py311 3.12: py312 3.13: py313 + 3.14: py314 [testenv] deps = -rrequirements/test.txt commands = pytest --junit-xml pytest.xml --cov=github --cov-report=xml {posargs} [testenv:lint] -basepython = python3.8 +basepython = python3.9 skip_install = true deps = -r requirements/types.txt @@ -32,6 +32,7 @@ commands = mypy github tests [testenv:docs] +deps = -rrequirements/docs.txt basepython = python3.13 skip_install = true commands = sphinx-build doc build