PyGithub Versions Save

Typed interactions with the GitHub API v3

v2.3.0

1 month ago

New features

  • Support oauth for enterprise @EnricoMi (#2780)
  • Support creation of Dependabot Organization and Repository Secrets @thomascrowley (#2874)

Improvements

  • Create release with optional name and message when generate_release_notes is true @heitorpolidoro (#2868)
  • Add missing attributes to WorkflowJob @xvega (#2921)
  • Add created and check_suite_id filter for Repository Workflow runs @treee111 (#2891)
  • Assert requester argument type in Auth @EnricoMi (#2912)

Bug Fixes

  • Revert having allowed values for add_to_collaborators @jodelasur (#2905)

Maintenance

  • Fix imports in authentication docs @wurstbrot (#2923)
  • CI: add docformatter to precommit @Borda (#2614)
  • Add .swp fils to .gitignore @boomanaiden154 (#2903)
  • Fix instructions building docs in CONTRIBUTING.md @wakamex (#2900)
  • Explicitly name the modules built in pyproject.toml @treee111 (#2894)

v2.2.0

3 months ago

Breaking Changes

The github.Comparison.Comparison instance returned by Repository.compare provides a commits property that used to return a list[github.Commit.Commit], which has now been changed to PaginatedList[github.Commit.Commit]. This breaks user code that assumes a list:

commits = repo.compare("v0.6", "v0.7").commits
no_of_commits = len(commits)  # will raise a TypeError

This will raise a TypeError: object of type 'PaginatedList' has no len(), as the returned PaginatedList does not support the len() method. Use the totalCount property instead:

commits = repo.compare("v0.6", "v0.7").commits
no_of_commits = commits.totalCount

New features

  • Add support to call GraphQL API

Improvements

Bug Fixes

Maintenance

Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.1.1...v2.2.0

v2.1.1

7 months ago

Bug Fixes

  • Require urllib 1.26.0 or greater (#2774) (001c0852)

Maintenance

  • Fix pypi-release workflow, allow for manual run (#2771) (035c88f1)

v2.1.0.post0

7 months ago

Important

Request throttling

This release introduces a default throttling mechanism to mitigate secondary rate limit errors and comply with Github's best practices: https://docs.github.com/en/rest/guides/best-practices-for-integrators?apiVersion=2022-11-28#dealing-with-secondary-rate-limits

The default throttling of 1 second between writes and 0.25 second between any requests can be configured for github.Github and github.GithubIntegration:

g = github.Github(seconds_between_requests=0.25, seconds_between_writes=1)

Set these parameters to None to disable throttling and restore earlier behavior.

Request retry

This release introduces a default retry mechanism to retry retry-able 403 responses (primary and secondary rate limit errors only) and any 5xx response.

Class github.GithubRetry implements this behavior, and can be configured via the retry argument of github.Github and github.GithubIntegration. Retry behavior is configured similar to urllib3.Retry: https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html

g = github.Github(retry=github.GithubRetry())

Set this parameter to None to disable retry mechanism and restore earlier behaviour.

Breaking Changes

Timestamps

Any timestamps returned by this library are datetime with timezone information, usually UTC. Before this release, timestamps used to be naive datetime instances without timezone. Comparing (other than ==) these timestamps with naive datetime instances used to work but will now break. Add a timezone information to your datetime instances before comparison:

if g.get_repo("PyGithub/PyGithub").created_at < datetime(2012, 2, 26, tzinfo=timezone.utc):
  ...

Netrc authentication

A Netrc file (e.g. ~/.netrc) does not override PyGithub authentication, anymore. If you require authentication through Netrc, then this is a breaking change. Use a github.Auth.NetrcAuth instance to use Netrc credentials:

>>> auth = Auth.NetrcAuth()
>>> g = Github(auth=auth)
>>> g.get_user().login
'login'

Repository.create_pull

Merged overloaded create_pull methods

def create_pull(self, issue, base, head)
def create_pull(self, title, body, base, head, maintainer_can_modify=NotSet, draft=False)

into

def create_pull(self, base, head, *, title=NotSet, body=NotSet, maintainer_can_modify=NotSet, draft=NotSet, issue=NotSet)

Please update your usage of Repository.create_pull accordingly.

New features

  • Throttle requests to mitigate RateLimitExceededExceptions (#2145) (99155806)
  • Retry retryable 403 (rate limit) (#2387) (0bb72ca0)
  • Close connections after use (#2724) (73236e23)

Improvements

  • Make datetime objects timezone-aware (#2565) (0177f7c5)
  • Make Branch.edit_* functions return objects (#2748) (8dee53a8)
  • Add license attribute to Repository (#2721) (26d353e7)
  • Add missing attributes to Repository (#2742) (65cfeb1b)
  • Add is_alphanumeric attribute to Autolink and Repository.create_autolink (#2630) (b6a28a26)
  • Suppress requests fallback to netrc, provide github.Auth.Netrc (#2739) (ac36f6a9)
  • Pass Requester arguments to AppInstallationAuth.__integration (#2695) (8bf542ae)
  • Adding feature for enterprise consumed license (#2626) (a7bfdf2d)
  • Search Workflows by Name (#2711) (eadc241e)
  • Add Secret and Variable classes (#2623) (bcca758d)
  • Add Autolink API link (#2632) (aedfa0b9)
  • Add required_linear_history attribute to BranchProtection (#2643) (7a80fad9)
  • Add retry issue to GithubException, don't log it (#2611) (de80ff4b)
  • Add message property to GithubException (#2591) (f087cad3)
  • Add support for repo and org level actions variables (#2580) (91b3f40f)
  • Add missing arguments to Workflow.get_runs() (#2346) (766df993)
  • Add github.Rate.used field (#2531) (c4c2e527)

Bug Fixes

  • Fix Branch.bypass_pull_request_allowances failing with "nil is not an object" (#2535) (c5542a6a)
  • Fix required_conversation_resolution assertion (#2715) (54f22267)
  • Fix assertion creating pull request review comment (#2641) (2fa568b6)
  • Safely coerce responseHeaders to int (#2697) (adbfce92)
  • Fix assertion for subject_type in creating pull request review comment (#2642) (4933459e)
  • Use timezone-aware reset datetime in GithubRetry.py (#2610) (950a6949)
  • Fix Branch.bypass_pull_request_allowances failing with "nil is not an object" (#2535) (c5542a6a)

Maintenance

  • Epic mass-merge .pyi type stubs back to .py sources (#2636)
  • Move to main default branch (#2566) (e66c163a)
  • Force Unix EOL (#2573) (094538e1)
  • Close replay test data file silently when test is failing already (#2747) (6d871d56)
  • CI: Make CI support merge queue (#2644) (a91debf1)
  • CI: Run CI on release branches (#2708) (9a88b6b1)
  • CI: remove conflict label workflow (#2669) (95d8b83c)
  • Fix pip install command in README.md (#2731) (2cc1ba2c)
  • Update add_attribute.py to latest conding style (#2631) (e735972e)
  • CI: Improve ruff DX (#2667) (48d2009c)
  • CI: Increase wait and retries of labels action (#2670) (ff0f31c2)
  • Replace flake8 with ruff (#2617) (42c3b47c)
  • CI: update labels action name and version (#2654) (c5c83eb5)
  • CI: label PRs that have conflicts (#2622) (1d637e4b)
  • Unify requirements files location & source in setup.py (#2598) (2edc0f8f)
  • Enable mypy disallow_untyped_defs (#2609) (294c0cc9)
  • Enable mypy check_untyped_defs (#2607) (8816889a)
  • Set line length to 120 characters (#2599) (13e178a3)
  • CI: Build and check package before release (#2593) (3c880e76)
  • Use typing_extensions for TypedDict (#2592) (5fcb0c7d)
  • CI: Update action actions/setup-python (#2382) (2e5cd31e)
  • Add more methods and attributes to Repository.pyi (#2581) (72840de4)
  • CI: Make pytest color logs (#2597) (73241102)
  • precommit: move flake8 as last (#2595) (11bb6bd7)
  • Test on Windows and macOS, don't fail fast (#2590) (5c600894)
  • Remove symlinks from test data (#2588) (8d3b9057)

v2.0.1-preview

9 months ago

Bug Fixes

  • Safely coerce responseHeaders to int (#2697) (64705bfd)

v1.59.1

9 months ago

Bug Fixes

  • Safely coerce responseHeaders to int (#2697) (adbfce92)

v2.0.0-preview.1

10 months ago

Bug Fixes

  • Add retry issue to GithubException, don't log it (#2611) (3f0c1a6b)
  • Use timezone-aware reset datetime in GithubRetry.py (#2610) (0a7b7bac)

v2.0.0-preview

10 months ago

Important

Request throttling

This release introduces a default throttling mechanism to mitigate secondary rate limit errors and comply with Github's best practices: https://docs.github.com/en/rest/guides/best-practices-for-integrators?apiVersion=2022-11-28#dealing-with-secondary-rate-limits

The default throttling of 1 second between writes and 0.25 second between any requests can be configured for github.Github and github.GithubIntegration:

g = github.Github(seconds_between_requests=0.25, seconds_between_writes=1)

Set these parameters to None to disable throttling and restore earlier behavior.

Request retry

This release introduces a default retry mechanism to retry retry-able 403 responses (primary and secondary rate limit errors only) and any 5xx response.

Class github.GithubRetry implements this behavior, and can be configured via the retry argument of github.Github and github.GithubIntegration. Retry behavior is configured similar to urllib3.Retry: https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html

g = github.Github(retry=github.GithubRetry())

Set this parameter to None to disable retry mechanism and restore earlier behaviour.

Breaking Changes

Any timestamps returned by this library are datetime with timezone information, usually UTC. Before this release, timestamps used to be naive datetime instances without timezone. Comparing (other than ==) these timestamps with naive datetime instances used to work but will now break. Add a timezone information to your datetime instances before comparison:

if g.get_repo("PyGithub/PyGithub").created_at < datetime(2012, 2, 26, tzinfo=timezone.utc):
    ...

New features

  • Throttle requests to mitigate RateLimitExceededExceptions (#2145) (99155806)
  • Retry retryable 403 (rate limit) (#2387) (0bb72ca0)

Improvements

  • Make datetime objects timezone-aware (#2565) (0177f7c5)

Bug Fixes

  • Fix Branch.bypass_pull_request_allowances failing with "nil is not an object" (#2535) (c5542a6a)

Maintenance

  • Move to main default branch (#2566) (e66c163a)
  • Force Unix EOL (#2573) (094538e1)
  • Merge Artifact type stub back to source (#2553)

v1.59.0

10 months ago

Important

This release introduces new way of authentication. All authentication-related arguments github.Github(login_or_token=…, password=…, jwt=…, app_auth=…) and github.GithubIntegration(integration_id=…, private_key=…, jwt_expiry=…, jwt_issued_at=…, jwt_algorithm=…) are replaced by a single auth=… argument. Module github.Auth provides classes for all supported ways of authentication: Login, Token, AppAuth, AppAuthToken, AppInstallationAuth, AppUserAuth. Old arguments are deprecated but continue to work. They are scheduled for removal for version 2.0 release.

This project has decided to move all typing information from .pyi files into the respective .py source files. This will happen gradually over time.

Breaking Changes

  • The position argument in github.PullRequest.create_review_comment(position=…) has been renamed to line. This breaks user code that calls create_review_comment with keyword argument position. Call with line=… instead. Calling this method with positional arguments is not breaking.
  • The jwt_expiry, jwt_issued_at and jwt_algorithm arguments in github.GithubIntegration() have changed their position. User code calling github.GithubIntegration(…) with these arguments as positional arguments breaks. Please use keyword arguments: github.GithubIntegration(…, jwt_expiry=…, jwt_issued_at=…, jwt_algorithm=…).
  • The since argument in github.PullRequest.get_review_comments(…) has changed position.User code callinggithub.PullRequest.get_review_comments(…)with this argument as positional argument breaks. Please use keyword argument:github.PullRequest.get_review_comments(since=…)`.

Deprecations

  • The use of github.Github(login_or_token=…) is deprecated, use github.Github(auth=github.Auth.Login(…)) or github.Github(auth=github.Auth.Token(…)) instead.
  • The use of github.Github(password=…) is deprecated, use github.Github(auth=github.Auth.Login(…)) instead.
  • The use of github.Github(jwt=…) is deprecated, use github.Github(auth=github.AppAuth(…)) or github.Github(auth=github.AppAuthToken(…)) instead.
  • The use of github.Github(app_auth=…) is deprecated, use github.Github(auth=github.Auth.AppInstallationAuth(…)) instead.
  • The use of github.GithubIntegration(integration_id=…, private_key=…, jwt_expiry=…, jwt_issued_at=…, jwt_algorithm=…) is deprecated, use github.GithubIntegration(auth=github.Auth.AppAuth(…)) instead.
  • The use of github.GithubIntegration.create_jwt is deprecated, use github.Github(auth=github.Auth.AppAuth), github.Auth.AppAuth.token or github.Auth.AppAuth.create_jwt(expiration) instead.
  • The use of AppAuthentication is deprecated, use github.Auth.AppInstallationAuth instead.
  • The use of github.Github.get_app() without providing argument slug is deprecated, use github.GithubIntegration(auth=github.Auth.AppAuth(…)).get_app().

Bug Fixes

  • Test and fix UTC issue with AppInstallationAuth (#2561) (ff3b80f8)
  • Make Requester.__createException robust against missing message and body (#2159) (7be3f763)
  • Fix auth issues with Installation.get_repos (#2547) (64075120)
  • Fix broken urls in docstrings (#2393) (f82ad61c)
  • Raise error on unsupported redirects, log supported redirects (#2524) (17cd0b79)
  • Fix GithubIntegration that uses expiring jwt (#2460) (5011548c)
  • Add expiration argument back to GithubIntegration.create_jwt (#2439) (822fc05c)
  • Add crypto extras to pyjwt, which pulls in cryptogaphy package (#2443) (554b2b28)
  • Remove RLock from Requester (#2446) (45f3d723)
  • Move CI to Python 3.11 release and 3.12 dev (#2434) (e414c322)
  • Pass Requester base URL to integration (#2420) (bdceae2f)

Improvements

  • Add Webhook Deliveries (#2508) (517ad336)
  • Add support for workflow jobs and steps (#1951) (804c3107)
  • Add support for get_app() with App authentication (#2549) (6d4b6d14)
  • Allow multiline comments in PullRequest (#2540) (6a21761e)
  • Implement AppUserAuth for Github App user tokens (#2546) (f291a368)
  • Add support for environments (#2223) (0384e2fd)
  • Add support for new RepositoryAdvisories API :tada: (#2483) (daf62bd4)
  • Make MainClass.get_app return completed GithubApp when slug is given (#2543) (84912a67)
  • Add authentication classes, move auth logic there (#2528) (fc2d0e15)
  • Add sort order and direction for getting comments (#2544) (a8e7c423)
  • Add name filter to Repository.get_artifacts() (#2459) (9f52e948)
  • Add name, display_title and path attributes to WorkflowRun (#2397) (10816389)
  • Add new create_fork arguments (#2493) (b94a83cb)
  • add ref to Deployment (#2489) (e8075c41)
  • Add query check_suite_id integer to Workflow.get_runs (#2466) (a4854519)
  • Add generate_release_notes parameter to create_git_release and create_git_tag_and_release (#2417) (49b3ae16)
  • Add example for Pull Request comments to documentation (#2390) (c2f12bdc)
  • Add allow_auto_merge support to Repository (#2477) (8c4b9465)
  • Add artifact_id argument to Repository.get_artifact() (#2458) (4fa0a5f3)
  • Add missing attributes to Branch (#2512) (e296dbdb)
  • Add allow_update_branch option to Organization (#2465) (bab4180f)
  • Add support for Issue.state_reason #2370 (#2392) (5aa544a1)
  • Add parameters to Repository.get_workflow_runs (#2408) (4198dbfb)

Maintenance

  • Add type stub for MainClass.get_project_column (#2502) (d514222c)
  • Sync GithubIntegration init arguments with github.Github (#2556) (ea45237d)
  • Update MAINTAINERS (#2545) (f4e9dcb3)
  • Link to stable docs, update introduction in package used by pypi, move auth arg front (#2557) (006766f9)
  • Merge PaginatedList.pyi back to source (#2555) (cb50dec5)
  • Merge GithubObject.pyi/Requester.pyi stubs back to source (#2463) (b6258f4b)
  • [CI] Moving linting into separate workflow (#2522) (52fc1077)
  • Merging 1.58.x patch release notes into master (#2525) (217d4241)
  • Merge AppAuthentication.pyi to source (#2519) (8e8cfb30)
  • Merge GithubException.pyi stubs back to source (#2464) (03a2f696)
  • Add missing fields from GithubCredentials.py to CONTRIBUTING.md (#2482) (297317ba)
  • Update docstring and typing for allow_forking and allow_update_branch (Repository) (#2529) (600217f0)
  • Bump actions/checkout from 2 to 3.1.0 (#2327) (300c5015)
  • RTD: install current project (def5223c)
  • Add current dir sys.path as well (9c96faa7)
  • Use use_scm_version to get current version from git tag (#2429) (3ea91a3a)

v1.58.2

1 year ago

Fixes

  • Fix GithubIntegration that uses expiring jwt @EnricoMi (#2460)