{"id":968,"name":"cryptography","ecosystem":"pip","repository_url":"https://github.com/pyca/cryptography","issues_count":10641,"created_at":"2025-06-06T15:01:39.325Z","updated_at":"2025-06-06T15:01:39.325Z","purl":"pkg:pypi/cryptography","metadata":{"id":2683636,"name":"cryptography","ecosystem":"pypi","description":"cryptography is a package which provides cryptographic recipes and primitives to Python developers.","homepage":null,"licenses":"Apache-2.0 OR BSD-3-Clause","normalized_licenses":["Apache-2.0","BSD-3-Clause"],"repository_url":"https://github.com/pyca/cryptography","keywords_array":[],"namespace":null,"versions_count":142,"first_release_published_at":"2014-01-08T23:17:39.000Z","latest_release_published_at":"2025-05-25T14:16:12.000Z","latest_release_number":"45.0.3","last_synced_at":"2025-06-06T01:31:01.723Z","created_at":"2022-04-10T10:29:12.911Z","updated_at":"2025-06-06T01:31:01.723Z","registry_url":"https://pypi.org/project/cryptography/","install_command":"pip install cryptography --index-url https://pypi.org/simple","documentation_url":"https://cryptography.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Natural Language :: English","Operating System :: MacOS :: MacOS X","Operating System :: Microsoft :: Windows","Operating System :: POSIX","Operating System :: POSIX :: BSD","Operating System :: POSIX :: Linux","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Programming Language :: Python :: Implementation :: CPython","Programming Language :: Python :: Implementation :: PyPy","Topic :: Security :: Cryptography"],"normalized_name":"cryptography"},"repo_metadata":{"id":9926844,"uuid":"11939484","full_name":"pyca/cryptography","owner":"pyca","description":"cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.","archived":false,"fork":false,"pushed_at":"2024-10-29T11:33:44.000Z","size":56737,"stargazers_count":6646,"open_issues_count":45,"forks_count":1524,"subscribers_count":130,"default_branch":"main","last_synced_at":"2024-10-29T13:10:47.492Z","etag":null,"topics":["cryptography","python"],"latest_commit_sha":null,"homepage":"https://cryptography.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyca.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.rst","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2013-08-07T02:23:38.000Z","updated_at":"2024-10-29T11:33:47.000Z","dependencies_parsed_at":"2023-09-24T14:02:14.320Z","dependency_job_id":"d5dc0f8b-3770-41b4-846d-990eeae096ae","html_url":"https://github.com/pyca/cryptography","commit_stats":{"total_commits":9815,"total_committers":318,"mean_commits":"30.864779874213838","dds":0.6791645440652063,"last_synced_commit":"a70c92c01faf75a32abc0836fd525154d0583b9d"},"previous_names":[],"tags_count":127,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyca","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222062278,"owners_count":16924718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"pyca","name":"Python Cryptographic Authority","uuid":"5615737","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/5615737?v=4","repositories_count":7,"last_synced_at":"2024-03-25T19:58:32.183Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pyca","funding_links":[],"total_stars":9342,"followers":129,"following":0,"created_at":"2022-11-02T16:22:49.629Z","updated_at":"2024-03-25T19:58:34.188Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyca","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyca/repositories"},"tags":[{"name":"42.0.5","sha":"33833f031d9d36234e11d9671be150d53b9e598d","kind":"tag","published_at":"2024-02-24T01:04:41.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/42.0.5","html_url":"https://github.com/pyca/cryptography/releases/tag/42.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.5/manifests"},{"name":"42.0.4","sha":"fe18470f7d05f963e7267e34fdf985d81ea6ceea","kind":"tag","published_at":"2024-02-21T02:55:17.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/42.0.4","html_url":"https://github.com/pyca/cryptography/releases/tag/42.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.4/manifests"},{"name":"42.0.3","sha":"c49a7a5271178c6e8ef36fa1c499f62c63ec19b9","kind":"tag","published_at":"2024-02-16T03:42:36.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/42.0.3","html_url":"https://github.com/pyca/cryptography/releases/tag/42.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.3/manifests"},{"name":"42.0.2","sha":"2202123b50de1b8788f909a3e5afe350c56ad81e","kind":"tag","published_at":"2024-01-30T17:24:55.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/42.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/42.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.2/manifests"},{"name":"42.0.1","sha":"337437dc2e62772bde4ad5544f4b1db9ee7572d9","kind":"tag","published_at":"2024-01-25T02:32:06.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/42.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/42.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.1/manifests"},{"name":"42.0.0","sha":"4e64baf360a3a89bd92582f59344c12b5c0bd3fd","kind":"tag","published_at":"2024-01-23T01:07:16.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/42.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/42.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/42.0.0/manifests"},{"name":"41.0.7","sha":"4054596afc6f2b6cfcc54f56c35c34e0e429cb66","kind":"tag","published_at":"2023-11-28T00:35:07.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.7","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.7/manifests"},{"name":"41.0.6","sha":"f09c261ca10a31fe41b1262306db7f8f1da0e48a","kind":"tag","published_at":"2023-11-27T19:38:42.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.6","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.6/manifests"},{"name":"41.0.5","sha":"5012bedaef2dc60af3955306774b77ef379116e3","kind":"tag","published_at":"2023-10-24T16:02:19.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.5","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.5/manifests"},{"name":"41.0.4","sha":"fc11bce6930e591ce26a2317b31b9ce2b3e25512","kind":"tag","published_at":"2023-09-19T16:20:30.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.4","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.4/manifests"},{"name":"41.0.3","sha":"b22271cf3c3dd8dc8978f8f4b00b5c7060b6538d","kind":"tag","published_at":"2023-08-01T20:02:21.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.3","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.3/manifests"},{"name":"41.0.2","sha":"7431db737cf0407560fac689d24f1d2e5efc349d","kind":"tag","published_at":"2023-07-11T03:13:51.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.2/manifests"},{"name":"41.0.1","sha":"d02de9f26e9a2353e89427c1cea8b9ed2bae969e","kind":"tag","published_at":"2023-06-01T12:20:02.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.1/manifests"},{"name":"41.0.0","sha":"c4d494fd3ee907316bd846e90cbf4a8df75a25ac","kind":"tag","published_at":"2023-05-30T21:37:07.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/41.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/41.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/41.0.0/manifests"},{"name":"40.0.2","sha":"f816b457494e010b655cd7fdcd30e3446f86a703","kind":"tag","published_at":"2023-04-14T12:23:51.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/40.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/40.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/40.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/40.0.2/manifests"},{"name":"40.0.1","sha":"9dd0b26c48f567d5a7c4a0bc9f45ef2176a2d4a4","kind":"tag","published_at":"2023-03-25T01:12:42.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/40.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/40.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/40.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/40.0.1/manifests"},{"name":"40.0.0","sha":"45e37718098edca2c5ac2135394bcf17fd7982f0","kind":"tag","published_at":"2023-03-24T04:23:41.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/40.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/40.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/40.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/40.0.0/manifests"},{"name":"39.0.2","sha":"125b149dc0bd9db33b08455b66c0f1586b8ce257","kind":"tag","published_at":"2023-03-02T20:51:49.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/39.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/39.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/39.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/39.0.2/manifests"},{"name":"39.0.1","sha":"d6951dca25de45abd52da51b608055371fbcde4e","kind":"tag","published_at":"2023-02-07T19:21:00.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/39.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/39.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/39.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/39.0.1/manifests"},{"name":"39.0.0","sha":"338a65a7df74e189f6b5d1d3a6315ffa911b21c2","kind":"tag","published_at":"2023-01-02T03:08:05.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/39.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/39.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/39.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/39.0.0/manifests"},{"name":"38.0.4","sha":"c18d0567386414efa3caef7ed586c4ca75bf3a8b","kind":"tag","published_at":"2022-11-27T18:53:48.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/38.0.4","html_url":"https://github.com/pyca/cryptography/releases/tag/38.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.4/manifests"},{"name":"38.0.3","sha":"7d9c6c3d6a211091281c1cbe2a2fa1597ffb7c49","kind":"tag","published_at":"2022-11-01T21:21:32.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/38.0.3","html_url":"https://github.com/pyca/cryptography/releases/tag/38.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.3/manifests"},{"name":"38.0.2","sha":"277ee0d58c6c8cfc9517df35c8a020bea33bddf4","kind":"tag","published_at":"2022-10-11T18:06:19.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/38.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/38.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.2/manifests"},{"name":"38.0.1","sha":"3ff52182ba6e7f1a063079d48ed5c21616918d70","kind":"tag","published_at":"2022-09-07T12:24:19.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/38.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/38.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.1/manifests"},{"name":"38.0.0","sha":"52d6f1a491f6ade379ace124b843ffba9fb4ab4f","kind":"tag","published_at":"2022-09-06T23:50:39.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/38.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/38.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/38.0.0/manifests"},{"name":"37.0.4","sha":"7ad17d819affb996c6681c6aac57e43184c54865","kind":"tag","published_at":"2022-07-05T13:23:49.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/37.0.4","html_url":"https://github.com/pyca/cryptography/releases/tag/37.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.4/manifests"},{"name":"37.0.3","sha":"b71c39202ba2d7dfb7a89215e04946e7fbf92896","kind":"tag","published_at":"2022-06-21T18:55:28.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/37.0.3","html_url":"https://github.com/pyca/cryptography/releases/tag/37.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.3/manifests"},{"name":"37.0.2","sha":"5954a52f0900569a83138d71ec1c04971452ea5b","kind":"tag","published_at":"2022-05-04T00:34:56.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/37.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/37.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.2/manifests"},{"name":"37.0.1","sha":"3fb93cfde75d073a91bc4a73a51f62962092501e","kind":"tag","published_at":"2022-04-27T22:26:21.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/37.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/37.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.1/manifests"},{"name":"37.0.0","sha":"e0f6f38433e3a1cb57509dec1bec9107cbbe827d","kind":"tag","published_at":"2022-04-26T14:05:57.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/37.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/37.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/37.0.0/manifests"},{"name":"36.0.2","sha":"df06889f348d7c3b7e9c35e4e5a1b1480f0b2c5a","kind":"tag","published_at":"2022-03-15T22:10:42.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/36.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/36.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/36.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/36.0.2/manifests"},{"name":"36.0.1","sha":"3fd9d5a8424eef3e08260a622ae3644777ac5339","kind":"tag","published_at":"2021-12-14T22:01:48.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/36.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/36.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/36.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/36.0.1/manifests"},{"name":"36.0.0","sha":"5d21990c32d0f93df4e54ef4ee7ff3a2dae3c3da","kind":"tag","published_at":"2021-11-21T21:29:14.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/36.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/36.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/36.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/36.0.0/manifests"},{"name":"35.0.0","sha":"c7fbef767a94ee1569ae0630006fdb144d6a4e8d","kind":"tag","published_at":"2021-09-30T01:20:47.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/35.0.0","html_url":"https://github.com/pyca/cryptography/releases/tag/35.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/35.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/35.0.0/manifests"},{"name":"3.4.8","sha":"70ccc2542cf3bf374861b55f6527424307722763","kind":"tag","published_at":"2021-08-24T17:18:00.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.8","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.8/manifests"},{"name":"3.4.7","sha":"a19014a087759f3df72b2cd70ed7a0d8a6481340","kind":"tag","published_at":"2021-03-25T17:20:38.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.7","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.7/manifests"},{"name":"3.4.6","sha":"75b002ae7fb1f263fdd4983d0c23493878e127fe","kind":"tag","published_at":"2021-02-16T20:27:54.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.6","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.6/manifests"},{"name":"3.4.5","sha":"4d77fb9d3edab81652210da81a5af7fe6aa79d60","kind":"tag","published_at":"2021-02-13T22:35:05.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.5","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.5/manifests"},{"name":"3.4.4","sha":"4a3018e6ae3e04a250be9fd1c1a1ad115727f517","kind":"tag","published_at":"2021-02-09T19:28:03.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.4","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.4/manifests"},{"name":"3.4.3","sha":"86c9e4a763579d6b2369db83064c0c4b8e9c1c77","kind":"tag","published_at":"2021-02-09T04:28:32.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.3","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.3/manifests"},{"name":"3.4.2","sha":"74a3df42c43d341014a4a6f111804f304a446902","kind":"tag","published_at":"2021-02-08T16:27:23.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.2","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.2/manifests"},{"name":"3.4.1","sha":"ebde3be7ef92658bfbc322476a6f2604f41639fb","kind":"tag","published_at":"2021-02-07T21:54:54.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4.1","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4.1/manifests"},{"name":"3.4","sha":"2c11ad53c07179e03ea2f60813cb52d83f766292","kind":"tag","published_at":"2021-02-07T18:29:36.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.4","html_url":"https://github.com/pyca/cryptography/releases/tag/3.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.4/manifests"},{"name":"3.3.2","sha":"82b6ce28389f0a317bc55ba2091a74b346db7cae","kind":"tag","published_at":"2021-02-07T16:39:48.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.3.2","html_url":"https://github.com/pyca/cryptography/releases/tag/3.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.3.2/manifests"},{"name":"3.3.1","sha":"1ff0d50948bbb6f2aa53d5648f1188a567d941cd","kind":"tag","published_at":"2020-12-10T02:17:18.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.3.1","html_url":"https://github.com/pyca/cryptography/releases/tag/3.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.3.1/manifests"},{"name":"3.3","sha":"7e8fff73cf0c597fe2df34daf2027506f84b9d3b","kind":"tag","published_at":"2020-12-09T00:29:24.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.3","html_url":"https://github.com/pyca/cryptography/releases/tag/3.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.3/manifests"},{"name":"3.2.1","sha":"0c7592c34fd58f0634f493d6ce542ab35d940b26","kind":"tag","published_at":"2020-10-28T03:17:49.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.2.1","html_url":"https://github.com/pyca/cryptography/releases/tag/3.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.2.1/manifests"},{"name":"3.2","sha":"c9e65222c91df8b6f61650a3460e30232962c1e0","kind":"tag","published_at":"2020-10-26T02:11:09.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.2","html_url":"https://github.com/pyca/cryptography/releases/tag/3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.2/manifests"},{"name":"3.1.1","sha":"d4e17ea937a50d69f615f7fe53d0482bd8660bb9","kind":"tag","published_at":"2020-09-22T16:54:53.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.1.1","html_url":"https://github.com/pyca/cryptography/releases/tag/3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.1.1/manifests"},{"name":"3.1","sha":"ba2c0e5e3e4fb242b80474d2ff7368c91e7ebeaf","kind":"tag","published_at":"2020-08-27T04:34:43.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.1","html_url":"https://github.com/pyca/cryptography/releases/tag/3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.1/manifests"},{"name":"3.0","sha":"b0d9bdcfc9659fffcb1d539cb00130f8fda3d011","kind":"tag","published_at":"2020-07-20T21:41:23.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/3.0","html_url":"https://github.com/pyca/cryptography/releases/tag/3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/3.0/manifests"},{"name":"2.9.2","sha":"9263178a208716bfb7b0e4fbe6aadf8c942e8547","kind":"tag","published_at":"2020-04-22T22:28:15.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.9.2","html_url":"https://github.com/pyca/cryptography/releases/tag/2.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.9.2/manifests"},{"name":"2.9.1","sha":"6199f620ed4e765cc57f49c366f46a576bf17f3d","kind":"tag","published_at":"2020-04-21T15:22:55.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.9.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.9.1/manifests"},{"name":"2.9","sha":"81b7fc65460247c4212efd9484779d8b3e516c26","kind":"tag","published_at":"2020-04-02T19:44:26.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.9","html_url":"https://github.com/pyca/cryptography/releases/tag/2.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.9/manifests"},{"name":"2.8","sha":"25494f96d57b8995ee2fde099146b1192582ee1b","kind":"tag","published_at":"2019-10-17T13:00:55.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.8","html_url":"https://github.com/pyca/cryptography/releases/tag/2.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.8/manifests"},{"name":"2.7","sha":"9c2637d7ee1e5e7ce66fb8838f6b3f1e8c106242","kind":"tag","published_at":"2019-05-30T23:36:14.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.7","html_url":"https://github.com/pyca/cryptography/releases/tag/2.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.7/manifests"},{"name":"2.6.1","sha":"e4570532541be7284f7d6660a429eb12edf8b027","kind":"tag","published_at":"2019-02-27T23:28:21.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.6.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.6.1/manifests"},{"name":"2.6","sha":"da259203be156990efff49c0ad8d1afaba1791cc","kind":"tag","published_at":"2019-02-27T14:00:25.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.6","html_url":"https://github.com/pyca/cryptography/releases/tag/2.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.6/manifests"},{"name":"2.5","sha":"83aa36dd407d0eb9a10e20cc35c51274174cd5bc","kind":"tag","published_at":"2019-01-22T16:44:26.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.5","html_url":"https://github.com/pyca/cryptography/releases/tag/2.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.5/manifests"},{"name":"2.4.2","sha":"704fe0fcaf206462b6a994ab69ad302601d9fad3","kind":"tag","published_at":"2018-11-21T03:08:45.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.4.2","html_url":"https://github.com/pyca/cryptography/releases/tag/2.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.4.2/manifests"},{"name":"2.4.1","sha":"db08466131a2d495e4bf58e34bf8d0090be04a2d","kind":"tag","published_at":"2018-11-12T01:02:03.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.4.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.4.1/manifests"},{"name":"2.4","sha":"5e52fdc5f8f3b6c970051c1bf3325b2d0ed8a5db","kind":"tag","published_at":"2018-11-12T00:12:27.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.4","html_url":"https://github.com/pyca/cryptography/releases/tag/2.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.4/manifests"},{"name":"2.3.1","sha":"16f43545751bb24cee79cccba453d49992a7cc6c","kind":"tag","published_at":"2018-08-14T17:37:25.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.3.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.3.1/manifests"},{"name":"2.3","sha":"0a846e294806478770469219a26cd49dcb5502d7","kind":"tag","published_at":"2018-07-18T11:57:58.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.3","html_url":"https://github.com/pyca/cryptography/releases/tag/2.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.3/manifests"},{"name":"2.2.2","sha":"4ec6a48d5cb99636fe8e99e29d1a9221dcce8fde","kind":"tag","published_at":"2018-03-27T16:43:12.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.2.2","html_url":"https://github.com/pyca/cryptography/releases/tag/2.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.2.2/manifests"},{"name":"2.2.1","sha":"4eaa511c62ecaf2f3d0b31a8b4f90fa0114e4468","kind":"tag","published_at":"2018-03-20T23:56:23.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.2.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.2.1/manifests"},{"name":"2.2","sha":"4601fbab9552b0fc938ae3864e9c14e4476231c0","kind":"tag","published_at":"2018-03-19T02:57:11.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.2","html_url":"https://github.com/pyca/cryptography/releases/tag/2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.2/manifests"},{"name":"2.1.4","sha":"ed5a7717a50edd3b0a9b7c729b2281dabd18390d","kind":"tag","published_at":"2017-11-30T01:55:02.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.1.4","html_url":"https://github.com/pyca/cryptography/releases/tag/2.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.4/manifests"},{"name":"2.1.3","sha":"2219ea7609eaacfa2d09f80d1baf60be7af5eaca","kind":"tag","published_at":"2017-11-02T19:01:15.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.1.3","html_url":"https://github.com/pyca/cryptography/releases/tag/2.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.3/manifests"},{"name":"2.1.2","sha":"106de1cb976c8ab7057484cb555979bb27e2430e","kind":"tag","published_at":"2017-10-24T15:47:33.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.1.2","html_url":"https://github.com/pyca/cryptography/releases/tag/2.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.2/manifests"},{"name":"2.1.1","sha":"85fa6ce5b29f94e27f1b712da015c2039cd108f9","kind":"tag","published_at":"2017-10-12T05:14:32.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.1.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1.1/manifests"},{"name":"2.1","sha":"0ed0e7e87b5e83270f4aca4efc630790c1fea429","kind":"tag","published_at":"2017-10-11T12:48:20.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.1/manifests"},{"name":"2.0.3","sha":"87a6dcae8a527d6e0b5c8feabfa768cd8fa6e264","kind":"tag","published_at":"2017-08-03T21:51:48.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.0.3","html_url":"https://github.com/pyca/cryptography/releases/tag/2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0.3/manifests"},{"name":"2.0.2","sha":"38a2d0b94852bcd4d017ee77cb6dec8dee3ce2ae","kind":"tag","published_at":"2017-07-27T03:25:52.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0.2/manifests"},{"name":"2.0.1","sha":"e758aa6066f79a4181ba8183112e1f4477bcce1b","kind":"tag","published_at":"2017-07-26T20:16:14.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0.1/manifests"},{"name":"2.0","sha":"9799e580c6b073a0a612bdc4f120365940d0da3d","kind":"tag","published_at":"2017-07-17T15:24:46.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/2.0","html_url":"https://github.com/pyca/cryptography/releases/tag/2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/2.0/manifests"},{"name":"1.9","sha":"23ead43fd70df17828937dac9521df1753ce9407","kind":"tag","published_at":"2017-05-30T02:20:21.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.9","html_url":"https://github.com/pyca/cryptography/releases/tag/1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.9/manifests"},{"name":"1.8.2","sha":"bd54a2c68f7771abde5ef9e8c30a1f73d5614e47","kind":"tag","published_at":"2017-05-26T06:36:22.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.8.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.8.2/manifests"},{"name":"1.8.1","sha":"6c5a519f9b382a1746c1bda5f01aaeb2809250ef","kind":"tag","published_at":"2017-03-10T03:59:27.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.8.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.8.1/manifests"},{"name":"1.8","sha":"928e4ee28564359973298624cf023ae5ea7f62c3","kind":"tag","published_at":"2017-03-10T02:57:55.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.8","html_url":"https://github.com/pyca/cryptography/releases/tag/1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.8/manifests"},{"name":"1.7.2","sha":"86b8b865b622fa8e81bb6f436c064a1e9476b4fd","kind":"tag","published_at":"2017-01-27T15:13:56.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.7.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.7.2/manifests"},{"name":"1.7.1","sha":"605b918a9df69cfb1773d4b16ee03b42a002ec88","kind":"tag","published_at":"2016-12-13T22:53:44.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.7.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.7.1/manifests"},{"name":"1.7","sha":"5df72e82c0156b0e60d355c5c03c85dcf2e694fb","kind":"tag","published_at":"2016-12-12T18:18:24.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.7","html_url":"https://github.com/pyca/cryptography/releases/tag/1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.7/manifests"},{"name":"1.6","sha":"4a2f36bc11342ca15cb49bfc313c20bbd4a045ae","kind":"tag","published_at":"2016-11-22T03:11:32.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.6","html_url":"https://github.com/pyca/cryptography/releases/tag/1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.6/manifests"},{"name":"1.5.3","sha":"090ece652bf47ee5bd081b6eab4c8e6953276752","kind":"tag","published_at":"2016-11-06T04:08:15.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.5.3","html_url":"https://github.com/pyca/cryptography/releases/tag/1.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5.3/manifests"},{"name":"1.5.2","sha":"cad77746539f504d53eb1bf9b278ec081ab8040a","kind":"tag","published_at":"2016-09-26T20:22:54.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.5.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5.2/manifests"},{"name":"1.5.1","sha":"1ed0235eae895d09b4702d8cf592050fbe9364ef","kind":"tag","published_at":"2016-09-22T20:08:34.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.5.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5.1/manifests"},{"name":"1.5","sha":"c0ee738a8460dc3551758400772978ed62a84d46","kind":"tag","published_at":"2016-08-26T15:13:13.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.5","html_url":"https://github.com/pyca/cryptography/releases/tag/1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.5/manifests"},{"name":"1.4","sha":"69365ce2041081fe6b109496bbb9c56f86ccb7b5","kind":"tag","published_at":"2016-06-04T17:07:02.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.4","html_url":"https://github.com/pyca/cryptography/releases/tag/1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.4/manifests"},{"name":"1.3.4","sha":"35fedcb1966dcaf610df79dbaaaf3545d3dbb189","kind":"tag","published_at":"2016-06-03T03:09:11.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.3.4","html_url":"https://github.com/pyca/cryptography/releases/tag/1.3.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.4/manifests"},{"name":"1.3.3","sha":"9863d7334864a3eb5e43a2e698a32a4e6b6c7b14","kind":"tag","published_at":"2016-06-02T21:43:44.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.3.3","html_url":"https://github.com/pyca/cryptography/releases/tag/1.3.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.3/manifests"},{"name":"1.3.2","sha":"afcd8f5ad8eb21f13be308c5183ef34ad28f9987","kind":"tag","published_at":"2016-05-04T16:09:45.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.3.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.2/manifests"},{"name":"1.3.1","sha":"17259f2d701979fdd5647574dec77ec08199e551","kind":"tag","published_at":"2016-03-21T21:45:42.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.3.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3.1/manifests"},{"name":"1.3","sha":"bf1566ec4be14110cbca5a36ee339a76ac9f6272","kind":"tag","published_at":"2016-03-18T13:10:53.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.3","html_url":"https://github.com/pyca/cryptography/releases/tag/1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.3/manifests"},{"name":"1.2.3","sha":"cd7ee203c8459ff74a2cd782013ba1c05793130c","kind":"tag","published_at":"2016-03-02T02:10:58.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.2.3","html_url":"https://github.com/pyca/cryptography/releases/tag/1.2.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2.3/manifests"},{"name":"1.2.2","sha":"5b32344deadf371f3a5301ac4c71508eb1a6cf17","kind":"tag","published_at":"2016-01-29T19:27:02.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.2.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2.2/manifests"},{"name":"1.2.1","sha":"80543674d13b44ca9030b83443a1d922d492df1e","kind":"tag","published_at":"2016-01-08T21:28:50.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.2.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2.1/manifests"},{"name":"1.2","sha":"a617ee9d10f875b88db0c76eb18734537bc83904","kind":"tag","published_at":"2016-01-08T15:38:44.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.2/manifests"},{"name":"1.1.2","sha":"d0237e6dcdbbedaa50f88b6cf821f9944b734678","kind":"tag","published_at":"2015-12-10T19:54:44.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.1.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.1.2/manifests"},{"name":"1.1.1","sha":"a9d5ffb0c4dda2e5ddc6f14ec68be99ddc3d69b1","kind":"tag","published_at":"2015-11-19T04:01:52.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.1.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.1.1/manifests"},{"name":"1.1","sha":"246a44e78c0d370452b3c5508d5fdabbb1b04c99","kind":"tag","published_at":"2015-10-28T22:26:34.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.1/manifests"},{"name":"1.0.2","sha":"612e72e2d794c58bc413a3062e664dcc1a1259ee","kind":"tag","published_at":"2015-09-27T13:52:09.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/1.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.0.2/manifests"},{"name":"1.0.1","sha":"34cb7cd8bc9c4c6dad38c3ea5285996cbea60162","kind":"tag","published_at":"2015-09-06T01:54:02.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.0.1/manifests"},{"name":"1.0","sha":"4abba0474a751192b5abbd5a97c1817021aae337","kind":"tag","published_at":"2015-08-12T13:38:22.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/1.0","html_url":"https://github.com/pyca/cryptography/releases/tag/1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/1.0/manifests"},{"name":"0.9.3","sha":"c08a0dcf09ffa517a2c7df6d2fe7fcfabd6e14e4","kind":"tag","published_at":"2015-07-09T14:41:31.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.9.3","html_url":"https://github.com/pyca/cryptography/releases/tag/0.9.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9.3/manifests"},{"name":"0.9.2","sha":"b2ac9e59e069aa973c837da202cb459cb733530f","kind":"tag","published_at":"2015-07-03T22:57:29.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.9.2","html_url":"https://github.com/pyca/cryptography/releases/tag/0.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9.2/manifests"},{"name":"0.9.1","sha":"bd17d14bd05d49e3a851cabbc863f74ee5c86702","kind":"tag","published_at":"2015-06-06T21:23:18.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.9.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9.1/manifests"},{"name":"0.9","sha":"6199d8f04310aa22e862f8936fe47d895788daf3","kind":"tag","published_at":"2015-05-14T01:39:47.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.9","html_url":"https://github.com/pyca/cryptography/releases/tag/0.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.9/manifests"},{"name":"0.8.2","sha":"8622f0e8c530a7326d885aeb47daa081e66b5ab1","kind":"tag","published_at":"2015-04-11T01:52:50.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.8.2","html_url":"https://github.com/pyca/cryptography/releases/tag/0.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.8.2/manifests"},{"name":"0.8.1","sha":"53f947e99e972ef669f833a19b3d36e3fbd7b5da","kind":"tag","published_at":"2015-03-20T15:22:46.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.8.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.8.1/manifests"},{"name":"0.8","sha":"3dd326767b34980f3095c67251d77a86bc9202fe","kind":"tag","published_at":"2015-03-09T04:49:31.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.8","html_url":"https://github.com/pyca/cryptography/releases/tag/0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.8/manifests"},{"name":"0.7.2","sha":"9ac7d55150c8410a08ee3b00b89bfeac3dbd8e8f","kind":"tag","published_at":"2015-01-16T14:15:57.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.7.2","html_url":"https://github.com/pyca/cryptography/releases/tag/0.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.7.2/manifests"},{"name":"0.7.1","sha":"9a4f1a0f6c89e3e56b955e5acc6c0001e418443d","kind":"tag","published_at":"2014-12-29T01:47:43.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.7.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.7.1/manifests"},{"name":"0.7","sha":"4597edf00274c71c1f71f0e75d0c6bcfd62dcb8a","kind":"tag","published_at":"2014-12-18T03:26:41.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.7","html_url":"https://github.com/pyca/cryptography/releases/tag/0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.7/manifests"},{"name":"0.6.1","sha":"3406be8667d35ed55ef8dc64822e9009d0386696","kind":"tag","published_at":"2014-10-16T04:10:17.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.6.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.6.1/manifests"},{"name":"0.6","sha":"b2ab5ef112f8de507d2db72fdf4a5fa698a954e0","kind":"tag","published_at":"2014-09-30T02:27:05.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.6","html_url":"https://github.com/pyca/cryptography/releases/tag/0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.6/manifests"},{"name":"0.5.4","sha":"93281bfa89342ed9ccf48cb391b1f19cdb4fe78c","kind":"tag","published_at":"2014-08-21T06:02:10.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.5.4","html_url":"https://github.com/pyca/cryptography/releases/tag/0.5.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.4/manifests"},{"name":"0.5.3","sha":"c787791c8fed109e128b577cfb7594d2aab8e3b6","kind":"tag","published_at":"2014-08-07T15:25:32.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.5.3","html_url":"https://github.com/pyca/cryptography/releases/tag/0.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.3/manifests"},{"name":"0.5.2","sha":"544523f97f182157f8b27342ae11ef3520a49c62","kind":"tag","published_at":"2014-07-10T01:24:36.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.5.2","html_url":"https://github.com/pyca/cryptography/releases/tag/0.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.2/manifests"},{"name":"0.5.1","sha":"d329d535d0a1598eae8dd63fd6d65ab7f5d30ad4","kind":"tag","published_at":"2014-07-08T03:01:25.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.5.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5.1/manifests"},{"name":"0.5","sha":"e4b1e854e0482ae4bc363f7938ad5b214c124d9f","kind":"tag","published_at":"2014-07-07T18:03:34.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.5","html_url":"https://github.com/pyca/cryptography/releases/tag/0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.5/manifests"},{"name":"0.4","sha":"0520c2973509f6a45d2ad06dc2d84a85958887b3","kind":"tag","published_at":"2014-05-03T14:33:59.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.4","html_url":"https://github.com/pyca/cryptography/releases/tag/0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.4/manifests"},{"name":"0.3","sha":"e0d2e1ea7367e05197634c8c869678b7b169c102","kind":"tag","published_at":"2014-03-27T21:01:33.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.3","html_url":"https://github.com/pyca/cryptography/releases/tag/0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.3/manifests"},{"name":"0.2.2","sha":"f36fcdbd055c236641e8704bfa559d8bbf274b61","kind":"tag","published_at":"2014-03-04T01:53:58.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.2.2","html_url":"https://github.com/pyca/cryptography/releases/tag/0.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.2.2/manifests"},{"name":"0.2.1","sha":"aa4692c112d756fc12980f7039b030caec27bc0d","kind":"tag","published_at":"2014-02-22T21:35:44.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.2.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.2.1/manifests"},{"name":"0.2","sha":"6a364d5262905d00ae422d24d91af822b87e899d","kind":"tag","published_at":"2014-02-20T19:46:18.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.2","html_url":"https://github.com/pyca/cryptography/releases/tag/0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.2/manifests"},{"name":"0.1","sha":"ec688200e2dde5cef94fe2eb60fa2f8f820eab47","kind":"tag","published_at":"2014-01-08T23:15:49.000Z","download_url":"https://codeload.github.com/pyca/cryptography/tar.gz/0.1","html_url":"https://github.com/pyca/cryptography/releases/tag/0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyca%2Fcryptography/tags/0.1/manifests"}]},"repo_metadata_updated_at":"2024-10-30T00:55:48.279Z","dependent_packages_count":3396,"downloads":374813273,"downloads_period":"last-month","dependent_repos_count":131580,"rankings":{"downloads":0.0027512486083267453,"dependent_repos_count":0.006786413233872639,"dependent_packages_count":0.008620578972757136,"stargazers_count":0.7545757849770821,"forks_count":1.5489529664879578,"docker_downloads_count":0.0014673325911075978,"average":0.3871923874785173},"purl":"pkg:pypi/cryptography","advisories":[{"uuid":"GSA_kwCzR0hTQS03OXY0LTY1eGctcHE0Z84ABEUU","url":"https://github.com/advisories/GHSA-79v4-65xg-pq4g","title":"Vulnerable OpenSSL included in cryptography wheels","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 42.0.0-44.0.0 are vulnerable to a security issue. More details about the vulnerability itself can be found in https://openssl-library.org/news/secadv/20250211.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.","origin":"UNSPECIFIED","severity":"LOW","published_at":"2025-02-11T18:06:42.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-79v4-65xg-pq4g","https://openssl-library.org/news/secadv/20250211.txt","https://nvd.nist.gov/vuln/detail/CVE-2024-12797","https://github.com/openssl/openssl/commit/738d4f9fdeaad57660dcba50a619fafced3fd5e9","https://github.com/openssl/openssl/commit/798779d43494549b611233f92652f0da5328fbe7","https://github.com/openssl/openssl/commit/87ebd203feffcf92ad5889df92f90bb0ee10a699","http://www.openwall.com/lists/oss-security/2025/02/11/3","http://www.openwall.com/lists/oss-security/2025/02/11/4","https://github.com/advisories/GHSA-79v4-65xg-pq4g"],"source_kind":"github","identifiers":["GHSA-79v4-65xg-pq4g","CVE-2024-12797"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"44.0.1","vulnerable_version_range":"\u003e= 42.0.0, \u003c 44.0.1"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2025-02-11T19:07:29.680Z","updated_at":"2025-02-12T18:20:08.000Z","epss_percentage":0.0013,"epss_percentile":0.33844},{"uuid":"GSA_kwCzR0hTQS1oNGdoLXFxNDUtdmgyN84AA_QU","url":"https://github.com/advisories/GHSA-h4gh-qq45-vh27","title":"pyca/cryptography has a vulnerable OpenSSL included in cryptography wheels","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 37.0.0-43.0.0 are vulnerable to a security issue. More details about the vulnerability itself can be found in https://openssl-library.org/news/secadv/20240903.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.\n","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2024-09-03T21:59:48.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-h4gh-qq45-vh27","https://openssl-library.org/news/secadv/20240903.txt","https://github.com/advisories/GHSA-h4gh-qq45-vh27"],"source_kind":"github","identifiers":["GHSA-h4gh-qq45-vh27"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"43.0.1","vulnerable_version_range":"\u003e= 37.0.0, \u003c 43.0.1"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2024-09-03T22:05:59.113Z","updated_at":"2024-09-03T21:59:48.000Z","epss_percentage":null,"epss_percentile":null},{"uuid":"GSA_kwCzR0hTQS1xM2NqLTJyMzQtMmN3Y84AAbxz","url":"https://github.com/advisories/GHSA-q3cj-2r34-2cwc","title":"Improper input validation in cryptography","description":"HKDF in cryptography before 1.5.3 returns an empty byte-string if used with a length less than algorithm.digest_size.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2022-05-17T02:51:56.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.7,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N","references":["https://nvd.nist.gov/vuln/detail/CVE-2016-9243","https://github.com/pyca/cryptography/issues/3211","https://github.com/pyca/cryptography/commit/b924696b2e8731f39696584d12cceeb3aeb2d874","https://cryptography.io/en/latest/changelog","http://www.openwall.com/lists/oss-security/2016/11/09/2","http://www.ubuntu.com/usn/USN-3138-1","https://cryptography.io/en/latest/changelog/#v1-5-3","https://github.com/advisories/GHSA-q3cj-2r34-2cwc","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2017-8.yaml","http://www.securityfocus.com/bid/94216","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/5R2ZOBMPWDFFHUZ6QOZZY36A6H5CGJXL","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/U23KDR2M2N7W2ZSREG63BVW7D4VC6CIZ","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/WQ5G7KHKZC4SI23JE7277KZXM57GEQKT","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/5R2ZOBMPWDFFHUZ6QOZZY36A6H5CGJXL","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/U23KDR2M2N7W2ZSREG63BVW7D4VC6CIZ","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/WQ5G7KHKZC4SI23JE7277KZXM57GEQKT"],"source_kind":"github","identifiers":["GHSA-q3cj-2r34-2cwc","CVE-2016-9243"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":44.53695197393215,"packages":[{"versions":[{"first_patched_version":"1.5.3","vulnerable_version_range":"\u003c 1.5.3"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2022-12-21T16:12:18.669Z","updated_at":"2024-09-13T20:08:28.000Z","epss_percentage":0.01644,"epss_percentile":0.80875},{"uuid":"GSA_kwCzR0hTQS1jZjdwLWdtMm0tODMzbc4AA0t4","url":"https://github.com/advisories/GHSA-cf7p-gm2m-833m","title":"cryptography mishandles SSH certificates","description":"The cryptography package before 41.0.2 for Python mishandles SSH certificates that have critical options.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2023-07-14T21:31:08.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.7,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N","references":["https://nvd.nist.gov/vuln/detail/CVE-2023-38325","https://github.com/pyca/cryptography/issues/9207","https://github.com/pyca/cryptography/pull/9208","https://github.com/pyca/cryptography/compare/41.0.1...41.0.2","https://pypi.org/project/cryptography/#history","https://github.com/pyca/cryptography/commit/1ca7adc97b76a9dfbd3d850628b613eb93b78fc3","https://github.com/pyca/cryptography/pull/7960","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2023-112.yaml","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/NMCCTYY3CSNQBFFYYC5DAV6KATHWCUZK","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/NMCCTYY3CSNQBFFYYC5DAV6KATHWCUZK","https://security.netapp.com/advisory/ntap-20230824-0010","https://github.com/advisories/GHSA-cf7p-gm2m-833m"],"source_kind":"github","identifiers":["GHSA-cf7p-gm2m-833m","CVE-2023-38325"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":44.53695197393215,"packages":[{"versions":[{"first_patched_version":"41.0.2","vulnerable_version_range":"\u003e= 40.0.0, \u003c 41.0.2"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-07-14T23:03:45.263Z","updated_at":"2024-09-13T20:06:13.000Z","epss_percentage":0.00791,"epss_percentile":0.72554},{"uuid":"GSA_kwCzR0hTQS13N3BwLW04d2Ytdmo2cs4AAxeE","url":"https://github.com/advisories/GHSA-w7pp-m8wf-vj6r","title":"Cipher.update_into can corrupt memory if passed an immutable python object as the outbuf","description":"Previously, `Cipher.update_into` would accept Python objects which implement the buffer protocol, but provide only immutable buffers:\n\n```pycon\n\u003e\u003e\u003e outbuf = b\"\\x00\" * 32\n\u003e\u003e\u003e c = ciphers.Cipher(AES(b\"\\x00\" * 32), modes.ECB()).encryptor()\n\u003e\u003e\u003e c.update_into(b\"\\x00\" * 16, outbuf)\n16\n\u003e\u003e\u003e outbuf\nb'\\xdc\\x95\\xc0x\\xa2@\\x89\\x89\\xadH\\xa2\\x14\\x92\\x84 \\x87\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n```\n\nThis would allow immutable objects (such as `bytes`) to be mutated, thus violating fundamental rules of Python. This is a soundness bug -- it allows programmers to misuse an API, it cannot be exploited by attacker controlled data alone.\n\nThis now correctly raises an exception.\n\nThis issue has been present since `update_into` was originally introduced in cryptography 1.8.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2023-02-07T20:54:10.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":6.9,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N","references":["https://github.com/pyca/cryptography/security/advisories/GHSA-w7pp-m8wf-vj6r","https://nvd.nist.gov/vuln/detail/CVE-2023-23931","https://github.com/pyca/cryptography/commit/d6951dca25de45abd52da51b608055371fbcde4e","https://github.com/pyca/cryptography/pull/8230","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2023-11.yaml","https://github.com/advisories/GHSA-w7pp-m8wf-vj6r"],"source_kind":"github","identifiers":["GHSA-w7pp-m8wf-vj6r","CVE-2023-23931"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":35.32241018622205,"packages":[{"versions":[{"first_patched_version":"39.0.1","vulnerable_version_range":"\u003e= 1.8, \u003c 39.0.1"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-02-07T21:03:06.064Z","updated_at":"2025-05-20T01:11:33.997Z","epss_percentage":0.00737,"epss_percentile":0.71625},{"uuid":"GSA_kwCzR0hTQS14NHFyLTJmdmYtM21yNc4AAxfn","url":"https://github.com/advisories/GHSA-x4qr-2fvf-3mr5","title":"Vulnerable OpenSSL included in cryptography wheels","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 0.8.1-39.0.0  are vulnerable to a security issue. More details about the vulnerabilities themselves can be found in https://www.openssl.org/news/secadv/20221213.txt and https://www.openssl.org/news/secadv/20230207.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2023-02-08T22:17:06.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-x4qr-2fvf-3mr5","https://nvd.nist.gov/vuln/detail/CVE-2023-0286","https://rustsec.org/advisories/RUSTSEC-2023-0006.html","https://www.openssl.org/news/secadv/20230207.txt","https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=2c6c9d439b484e1ba9830d8454a34fa4f80fdfe9","https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=2f7530077e0ef79d98718138716bc51ca0cad658","https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=fd2af07dc083a350c959147097003a14a5e8ac4d","https://access.redhat.com/security/cve/cve-2023-0286","https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.6.2-relnotes.txt","https://ftp.openbsd.org/pub/OpenBSD/patches/7.2/common/018_x509.patch.sig","https://security.gentoo.org/glsa/202402-08","https://github.com/advisories/GHSA-x4qr-2fvf-3mr5"],"source_kind":"github","identifiers":["GHSA-x4qr-2fvf-3mr5","CVE-2023-0286"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"300.0.12","vulnerable_version_range":"\u003e= 300.0.0, \u003c 300.0.12"},{"first_patched_version":"111.25.0","vulnerable_version_range":"\u003c 111.25.0"}],"ecosystem":"cargo","package_name":"openssl-src"},{"versions":[{"first_patched_version":"39.0.1","vulnerable_version_range":"\u003e= 0.8.1, \u003c 39.0.1"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-02-08T23:03:18.370Z","updated_at":"2025-05-20T01:11:58.159Z","epss_percentage":0.91013,"epss_percentile":0.99606},{"uuid":"MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLWhnZ20tanBnMy12NDc2","url":"https://github.com/advisories/GHSA-hggm-jpg3-v476","title":"RSA decryption vulnerable to Bleichenbacher timing vulnerability","description":"RSA decryption was vulnerable to Bleichenbacher timing vulnerabilities, which would impact people using RSA decryption in online scenarios. This is fixed in cryptography 3.2. ","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2020-10-27T20:33:13.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.2,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N","references":["https://github.com/pyca/cryptography/security/advisories/GHSA-hggm-jpg3-v476","https://github.com/pyca/cryptography/commit/58494b41d6ecb0f56b7c5f05d5f5e3ca0320d494","https://nvd.nist.gov/vuln/detail/CVE-2020-25659","https://www.oracle.com/security-alerts/cpuapr2022.html","https://www.oracle.com/security-alerts/cpujul2022.html","https://github.com/pyca/cryptography/pull/5507","https://github.com/advisories/GHSA-hggm-jpg3-v476","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2021-62.yaml","https://pypi.org/project/cryptography"],"source_kind":"github","identifiers":["GHSA-hggm-jpg3-v476","CVE-2020-25659"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":41.977357032901566,"packages":[{"versions":[{"first_patched_version":"3.2","vulnerable_version_range":"\u003c 3.2"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2022-12-21T16:13:13.271Z","updated_at":"2024-11-18T16:26:10.000Z","epss_percentage":0.00343,"epss_percentile":0.55927},{"uuid":"GSA_kwCzR0hTQS02dnF3LTN2NWotNTR4NM4AA5bN","url":"https://github.com/advisories/GHSA-6vqw-3v5j-54x4","title":"cryptography NULL pointer dereference with pkcs12.serialize_key_and_certificates when called with a non-matching certificate and private key and an hmac_hash override","description":"If `pkcs12.serialize_key_and_certificates` is called with both:\n\n1. A certificate whose public key did not match the provided private key\n2. An `encryption_algorithm` with `hmac_hash` set (via `PrivateFormat.PKCS12.encryption_builder().hmac_hash(...)`\n\nThen a NULL pointer dereference would occur, crashing the Python process.\n\nThis has been resolved, and now a `ValueError` is properly raised.\n\nPatched in https://github.com/pyca/cryptography/pull/10423","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2024-02-21T18:04:40.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-6vqw-3v5j-54x4","https://github.com/pyca/cryptography/pull/10423","https://github.com/pyca/cryptography/commit/97d231672763cdb5959a3b191e692a362f1b9e55","https://nvd.nist.gov/vuln/detail/CVE-2024-26130","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2024-225.yaml","https://github.com/advisories/GHSA-6vqw-3v5j-54x4"],"source_kind":"github","identifiers":["GHSA-6vqw-3v5j-54x4","CVE-2024-26130"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"42.0.4","vulnerable_version_range":"\u003e= 38.0.0, \u003c 42.0.4"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2024-02-21T19:04:44.408Z","updated_at":"2025-02-06T18:07:26.000Z","epss_percentage":0.00257,"epss_percentile":0.48893},{"uuid":"MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLXJobTktcDl3NS1md203","url":"https://github.com/advisories/GHSA-rhm9-p9w5-fwm7","title":"PyCA Cryptography symmetrically encrypting large values can lead to integer overflow","description":"cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. When certain sequences of `update()` calls with large values (multiple GBs) for symetric encryption or decryption occur, it's possible for an integer overflow to happen, leading to mishandling of buffers. This is patched in version 3.3.2 and newer.\n","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2021-02-10T01:32:27.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.8,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N","references":["https://github.com/pyca/cryptography/security/advisories/GHSA-rhm9-p9w5-fwm7","https://nvd.nist.gov/vuln/detail/CVE-2020-36242","https://github.com/pyca/cryptography/issues/5615","https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst","https://github.com/pyca/cryptography/commit/82b6ce28389f0a317bc55ba2091a74b346db7cae","https://github.com/pyca/cryptography/compare/3.3.1...3.3.2","https://www.oracle.com/security-alerts/cpuapr2022.html","https://www.oracle.com/security-alerts/cpujul2022.html","https://github.com/advisories/GHSA-rhm9-p9w5-fwm7","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2021-63.yaml","https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/L7RGQLK4J5ZQFRLKCHVVG6BKZTUQMG7E","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/L7RGQLK4J5ZQFRLKCHVVG6BKZTUQMG7E"],"source_kind":"github","identifiers":["GHSA-rhm9-p9w5-fwm7","CVE-2020-36242"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":45.048870962138274,"packages":[{"versions":[{"first_patched_version":"3.3.2","vulnerable_version_range":"\u003e= 3.1, \u003c 3.3.2"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2022-12-21T16:12:32.811Z","updated_at":"2025-05-20T01:09:28.307Z","epss_percentage":0.01307,"epss_percentile":0.78723},{"uuid":"GSA_kwCzR0hTQS12OGdyLW01MzMtZ2hqOc4AA1_w","url":"https://github.com/advisories/GHSA-v8gr-m533-ghj9","title":"Vulnerable OpenSSL included in cryptography wheels","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 2.5-41.0.3 are vulnerable to several security issues. More details about the vulnerabilities themselves can be found in https://www.openssl.org/news/secadv/20230908.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.","origin":"UNSPECIFIED","severity":"LOW","published_at":"2023-09-21T17:07:01.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-v8gr-m533-ghj9","https://github.com/pyca/cryptography/commit/fc11bce6930e591ce26a2317b31b9ce2b3e25512","https://github.com/advisories/GHSA-v8gr-m533-ghj9"],"source_kind":"github","identifiers":["GHSA-v8gr-m533-ghj9"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"41.0.4","vulnerable_version_range":"\u003e= 2.5, \u003c 41.0.4"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-09-21T18:05:56.673Z","updated_at":"2023-09-21T17:07:01.000Z","epss_percentage":null,"epss_percentile":null},{"uuid":"GSA_kwCzR0hTQS0zd3c0LWdnNGYtanI3Zs4AA5Eq","url":"https://github.com/advisories/GHSA-3ww4-gg4f-jr7f","title":"Python Cryptography package vulnerable to Bleichenbacher timing oracle attack","description":"A flaw was found in the python-cryptography package. This issue may allow a remote attacker to decrypt captured messages in TLS servers that use RSA key exchanges, which may lead to exposure of confidential or sensitive data.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2024-02-05T21:30:31.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.7,"cvss_vector":"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","references":["https://nvd.nist.gov/vuln/detail/CVE-2023-50782","https://access.redhat.com/security/cve/CVE-2023-50782","https://bugzilla.redhat.com/show_bug.cgi?id=2254432","https://github.com/pyca/cryptography/issues/9785","https://github.com/advisories/GHSA-3ww4-gg4f-jr7f"],"source_kind":"github","identifiers":["GHSA-3ww4-gg4f-jr7f","CVE-2023-50782"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":44.53695197393215,"packages":[{"versions":[{"first_patched_version":"42.0.0","vulnerable_version_range":"\u003c 42.0.0"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2024-02-06T00:04:47.789Z","updated_at":"2024-08-08T05:10:55.000Z","epss_percentage":0.00521,"epss_percentile":0.65731},{"uuid":"MDE2OlNlY3VyaXR5QWR2aXNvcnlHSFNBLWZjZjktM3F3My1neG1q","url":"https://github.com/advisories/GHSA-fcf9-3qw3-gxmj","title":"PyCA Cryptography vulnerable to GCM tag forgery","description":"A flaw was found in python-cryptography versions between \u003e=1.9.0 and \u003c2.3. The finalize_with_tag API did not enforce a minimum tag length. If a user did not validate the input length prior to passing it to finalize_with_tag an attacker could craft an invalid payload with a shortened tag (e.g. 1 byte) such that they would have a 1 in 256 chance of passing the MAC check. GCM tag forgeries can cause key leakage.","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2018-07-31T18:28:09.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":8.7,"cvss_vector":"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","references":["https://nvd.nist.gov/vuln/detail/CVE-2018-10903","https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2018-10903","https://github.com/pyca/cryptography/pull/4342","https://github.com/pyca/cryptography/commit/d4378e42937b56f473ddade2667f919ce32208cb","https://access.redhat.com/errata/RHSA-2018:3600","https://github.com/advisories/GHSA-fcf9-3qw3-gxmj","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2018-52.yaml","https://usn.ubuntu.com/3720-1"],"source_kind":"github","identifiers":["GHSA-fcf9-3qw3-gxmj","CVE-2018-10903"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":44.53695197393215,"packages":[{"versions":[{"first_patched_version":"2.3","vulnerable_version_range":"\u003e= 1.9.0, \u003c 2.3"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2022-12-21T16:13:36.794Z","updated_at":"2024-09-13T18:13:04.000Z","epss_percentage":0.00327,"epss_percentile":0.54837},{"uuid":"GSA_kwCzR0hTQS1qZmhtLTVnaGgtMmY5N84AA3Zw","url":"https://github.com/advisories/GHSA-jfhm-5ghh-2f97","title":"cryptography vulnerable to NULL-dereference when loading PKCS7 certificates","description":"### Summary\n\nCalling `load_pem_pkcs7_certificates` or `load_der_pkcs7_certificates` could lead to a NULL-pointer dereference and segfault.\n\n### PoC\nHere is a Python code that triggers the issue:\n```python\nfrom cryptography.hazmat.primitives.serialization.pkcs7 import load_der_pkcs7_certificates, load_pem_pkcs7_certificates\n\npem_p7 = b\"\"\"\n-----BEGIN PKCS7-----\nMAsGCSqGSIb3DQEHAg==\n-----END PKCS7-----\n\"\"\"\n\nder_p7 = b\"\\x30\\x0B\\x06\\x09\\x2A\\x86\\x48\\x86\\xF7\\x0D\\x01\\x07\\x02\"\n\nload_pem_pkcs7_certificates(pem_p7)\nload_der_pkcs7_certificates(der_p7)\n```\n\n### Impact\nExploitation of this vulnerability poses a serious risk of Denial of Service (DoS) for any application attempting to deserialize a PKCS7 blob/certificate. The consequences extend to potential disruptions in system availability and stability.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2023-11-28T20:46:46.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-jfhm-5ghh-2f97","https://github.com/pyca/cryptography/commit/f09c261ca10a31fe41b1262306db7f8f1da0e48a","https://nvd.nist.gov/vuln/detail/CVE-2023-49083","https://github.com/pyca/cryptography/pull/9926","http://www.openwall.com/lists/oss-security/2023/11/29/2","https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2023-254.yaml","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/QMNTYMUGFJSDBYBU22FUYBHFRZODRKXV","https://github.com/advisories/GHSA-jfhm-5ghh-2f97"],"source_kind":"github","identifiers":["GHSA-jfhm-5ghh-2f97","CVE-2023-49083"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"41.0.6","vulnerable_version_range":"\u003e= 3.1, \u003c 41.0.6"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-11-28T21:06:00.277Z","updated_at":"2024-02-20T18:14:36.000Z","epss_percentage":0.00457,"epss_percentile":0.62805},{"uuid":"GSA_kwCzR0hTQS1qbTc3LXFwaGYtYzR3OM4AA0_V","url":"https://github.com/advisories/GHSA-jm77-qphf-c4w8","title":"pyca/cryptography's wheels include vulnerable OpenSSL","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 0.8-41.0.2 are vulnerable to several security issues. More details about the vulnerabilities themselves can be found in https://www.openssl.org/news/secadv/20230731.txt, https://www.openssl.org/news/secadv/20230719.txt, and https://www.openssl.org/news/secadv/20230714.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.","origin":"UNSPECIFIED","severity":"LOW","published_at":"2023-08-01T22:34:41.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-jm77-qphf-c4w8","https://github.com/pyca/cryptography/commit/b22271cf3c3dd8dc8978f8f4b00b5c7060b6538d","https://github.com/pyca/cryptography/commit/bfa4d95f0f356f2d535efd5c775e0fb3efe90ef2","https://www.openssl.org/news/secadv/20230714.txt","https://www.openssl.org/news/secadv/20230719.txt","https://www.openssl.org/news/secadv/20230731.txt","https://github.com/advisories/GHSA-jm77-qphf-c4w8"],"source_kind":"github","identifiers":["GHSA-jm77-qphf-c4w8"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"41.0.3","vulnerable_version_range":"\u003e= 0.8, \u003c 41.0.3"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-08-01T23:03:46.702Z","updated_at":"2023-08-01T22:34:41.000Z","epss_percentage":null,"epss_percentile":null},{"uuid":"GSA_kwCzR0hTQS01Y3BxLTh3ajctaGYyds4AAzmB","url":"https://github.com/advisories/GHSA-5cpq-8wj7-hf2v","title":"Vulnerable OpenSSL included in cryptography wheels","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 0.5-40.0.2 are vulnerable to a security issue. More details about the vulnerability itself can be found in https://www.openssl.org/news/secadv/20230530.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.","origin":"UNSPECIFIED","severity":"LOW","published_at":"2023-06-02T17:13:10.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-5cpq-8wj7-hf2v","https://github.com/pyca/cryptography/commit/8708245ccdeaff21d65eea68a4f8d2a7c5949a22","https://cryptography.io/en/latest/changelog/#v41-0-0","https://github.com/advisories/GHSA-5cpq-8wj7-hf2v"],"source_kind":"github","identifiers":["GHSA-5cpq-8wj7-hf2v"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"41.0.0","vulnerable_version_range":"\u003e= 0.5, \u003c= 40.0.2"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2023-06-02T18:03:17.370Z","updated_at":"2023-06-02T17:13:11.000Z","epss_percentage":null,"epss_percentile":null},{"uuid":"GSA_kwCzR0hTQS0zOWhjLXY4N2otNzQ3eM4AAvq8","url":"https://github.com/advisories/GHSA-39hc-v87j-747x","title":"Vulnerable OpenSSL included in cryptography wheels","description":"pyca/cryptography's wheels include a statically linked copy of OpenSSL. The versions of OpenSSL included in cryptography 37.0.0-38.0.3 are vulnerable to a number of security issues. More details about the vulnerabilities themselves can be found in https://www.openssl.org/news/secadv/20221101.txt.\n\nIf you are building cryptography source (\"sdist\") then you are responsible for upgrading your copy of OpenSSL. Only users installing from wheels built by the cryptography project (i.e., those distributed on PyPI) need to update their cryptography versions.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2022-11-02T18:11:56.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/pyca/cryptography/security/advisories/GHSA-39hc-v87j-747x","https://github.com/pyca/cryptography/commit/382e759bcded5773330eeed748c86b213ec618c5","https://github.com/pyca/cryptography/commit/cf2ada625d1188d6cd46396f301b98095da577f7","https://github.com/advisories/GHSA-39hc-v87j-747x"],"source_kind":"github","identifiers":["GHSA-39hc-v87j-747x"],"repository_url":"https://github.com/pyca/cryptography","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"38.0.3","vulnerable_version_range":"\u003e= 37.0.0, \u003c 38.0.3"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2022-12-21T16:11:53.468Z","updated_at":"2023-01-08T05:03:03.000Z","epss_percentage":null,"epss_percentile":null},{"uuid":"GSA_kwCzR0hTQS05djloLWNnajgtaDY0cM4AA44M","url":"https://github.com/advisories/GHSA-9v9h-cgj8-h64p","title":"Null pointer dereference in PKCS12 parsing","description":"Issue summary: Processing a maliciously formatted PKCS12 file may lead OpenSSL\nto crash leading to a potential Denial of Service attack\n\nImpact summary: Applications loading files in the PKCS12 format from untrusted\nsources might terminate abruptly.\n\nA file in PKCS12 format can contain certificates and keys and may come from an\nuntrusted source. The PKCS12 specification allows certain fields to be NULL, but\nOpenSSL does not correctly check for this case. This can lead to a NULL pointer\ndereference that results in OpenSSL crashing. If an application processes PKCS12\nfiles from an untrusted source using the OpenSSL APIs then that application will\nbe vulnerable to this issue.\n\nOpenSSL APIs that are vulnerable to this are: PKCS12_parse(),\nPKCS12_unpack_p7data(), PKCS12_unpack_p7encdata(), PKCS12_unpack_authsafes()\nand PKCS12_newpass().\n\nWe have also fixed a similar issue in SMIME_write_PKCS7(). However since this\nfunction is related to writing data we do not consider it security significant.\n\nThe FIPS modules in 3.2, 3.1 and 3.0 are not affected by this issue.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2024-01-26T09:30:23.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://nvd.nist.gov/vuln/detail/CVE-2024-0727","https://github.com/openssl/openssl/commit/09df4395b5071217b76dc7d3d2e630eb8c5a79c2","https://github.com/openssl/openssl/commit/775acfdbd0c6af9ac855f34969cdab0c0c90844a","https://github.com/openssl/openssl/commit/d135eeab8a5dbf72b3da5240bab9ddb7678dbd2c","https://github.openssl.org/openssl/extended-releases/commit/03b3941d60c4bce58fab69a0c22377ab439bc0e8","https://github.openssl.org/openssl/extended-releases/commit/aebaa5883e31122b404e450732dc833dc9dee539","https://www.openssl.org/news/secadv/20240125.txt","https://github.com/github/advisory-database/pull/3472","https://github.com/openssl/openssl/pull/23362","https://github.com/alexcrichton/openssl-src-rs/commit/add20f73b6b42be7451af2e1044d4e0e778992b2","https://github.com/pyca/cryptography/commit/3519591d255d4506fbcd0d04037d45271903c64d","https://security.netapp.com/advisory/ntap-20240208-0006","http://www.openwall.com/lists/oss-security/2024/03/11/1","https://github.com/advisories/GHSA-9v9h-cgj8-h64p"],"source_kind":"github","identifiers":["GHSA-9v9h-cgj8-h64p","CVE-2024-0727"],"repository_url":"https://github.com/openssl/openssl","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"42.0.2","vulnerable_version_range":"\u003c 42.0.2"}],"ecosystem":"pypi","package_name":"cryptography"}],"created_at":"2024-02-16T21:04:38.629Z","updated_at":"2025-05-20T01:10:22.578Z","epss_percentage":0.0016,"epss_percentile":0.37966}],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/cryptography","docker_dependents_count":20440,"docker_downloads_count":15967514223,"usage_url":"https://repos.ecosyste.ms/usage/pypi/cryptography","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/cryptography/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cryptography/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cryptography/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cryptography/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cryptography/related_packages","maintainers":[{"uuid":"reaperhulk","login":"reaperhulk","name":null,"email":null,"url":null,"packages_count":7,"html_url":"https://pypi.org/user/reaperhulk/","role":null,"created_at":"2022-11-27T19:19:59.964Z","updated_at":"2022-11-27T19:19:59.964Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/reaperhulk/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690322,"maintainers_count":292759,"namespaces_count":0,"keywords_count":228590,"github":"pypi","metadata":{"funded_packages_count":48950},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-06T05:32:09.692Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},"unique_repositories_count":4903,"unique_repositories_count_past_30_days":250,"recent_issues":[{"uuid":"5589394800","node_id":"PR_kwDORaxLQM8AAAABFMSz6Q","number":23,"state":"open","title":"Bump the minor-and-patch group in /docs with 63 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-25T22:51:15.000Z","updated_at":"2026-09-25T22:53:11.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"minor-and-patch","update_count":63,"packages":[{"name":"annotated-types","old_version":"0.7.0","new_version":"0.8.0","repository_url":"https://github.com/annotated-types/annotated-types"},{"name":"anyio","old_version":"4.14.2","new_version":"4.15.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"asttokens","old_version":"3.0.1","new_version":"3.0.2","repository_url":"https://github.com/gristlabs/asttokens"},{"name":"boto3","old_version":"1.42.51","new_version":"1.43.100","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.42.51","new_version":"1.43.100","repository_url":"https://github.com/boto/botocore"},{"name":"build","old_version":"1.4.0","new_version":"1.6.1","repository_url":"https://github.com/pypa/build"},{"name":"certifi","old_version":"2026.1.4","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.5.0","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.13.4","new_version":"7.16.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"django","old_version":"6.0.7","new_version":"6.1.1","repository_url":"https://github.com/django/django"},{"name":"docstring-parser-fork","old_version":"0.0.14","new_version":"0.0.16","repository_url":"https://github.com/rr-/docstring_parser"},{"name":"docutils","old_version":"0.21.2","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"fake-py","old_version":"0.12.2","new_version":"0.13.1","repository_url":"https://github.com/barseghyanartur/fake.py"},{"name":"idna","old_version":"3.15","new_version":"3.20","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.10.0","new_version":"9.17.1","repository_url":"https://github.com/ipython/ipython"},{"name":"jaraco-context","old_version":"6.1.0","new_version":"6.1.2","repository_url":"https://github.com/jaraco/jaraco.context"},{"name":"jaraco-functools","old_version":"4.4.0","new_version":"4.6.0","repository_url":"https://github.com/jaraco/jaraco.functools"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"jiter","old_version":"0.13.0","new_version":"0.17.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"librt","old_version":"0.8.1","new_version":"0.15.0","repository_url":"https://github.com/mypyc/librt"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"moto","old_version":"5.1.21","new_version":"5.2.3","repository_url":"https://github.com/getmoto/moto"},{"name":"nh3","old_version":"0.3.3","new_version":"0.3.7","repository_url":"https://github.com/messense/nh3"},{"name":"packaging","old_version":"26.0","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"prompt-toolkit","old_version":"3.0.52","new_version":"3.0.53","repository_url":"https://github.com/prompt-toolkit/python-prompt-toolkit"},{"name":"pure-eval","old_version":"0.2.3","new_version":"0.2.4","repository_url":"https://github.com/alexmojaki/pure_eval"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.49.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydoclint","old_version":"0.8.3","new_version":"0.9.1","repository_url":"https://github.com/jsh9/pydoclint"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pyproject-hooks","old_version":"1.2.0","new_version":"1.3.3","repository_url":"https://github.com/pypa/pyproject-hooks"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"responses","old_version":"0.25.8","new_version":"0.26.3","repository_url":"https://github.com/getsentry/responses"},{"name":"respx","old_version":"0.22.0","new_version":"0.23.1","repository_url":"https://github.com/lundberg/respx"},{"name":"ruff","old_version":"0.15.1","new_version":"0.16.8","repository_url":"https://github.com/astral-sh/ruff"},{"name":"s3transfer","old_version":"0.16.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"snowballstemmer","old_version":"3.0.1","new_version":"3.1.1","repository_url":"https://github.com/snowballstem/snowball"},{"name":"sphinx-source-tree","old_version":"0.2","new_version":"0.2.3","repository_url":"https://github.com/barseghyanartur/sphinx-source-tree"},{"name":"starlette","old_version":"1.3.1","new_version":"1.6.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"stevedore","old_version":"5.6.0","new_version":"5.9.1"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.70.1","repository_url":"https://github.com/tqdm/tqdm"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.16.1","repository_url":"https://github.com/ipython/traitlets"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"typing-inspection","old_version":"0.4.2","new_version":"0.4.4","repository_url":"https://github.com/pydantic/typing-inspection"},{"name":"urllib3","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uv","old_version":"0.11.15","new_version":"0.12.17","repository_url":"https://github.com/astral-sh/uv"},{"name":"uvicorn","old_version":"0.41.0","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.3.0","repository_url":"https://github.com/samuelcolvin/watchfiles"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.8.4","repository_url":"https://github.com/jquast/wcwidth"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"wheel","old_version":"0.46.3","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"xmltodict","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/martinblech/xmltodict"}],"path":"/docs","ecosystem":"pip"},"body":"Bumps the minor-and-patch group in /docs with 63 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [annotated-types](https://github.com/annotated-types/annotated-types) | `0.7.0` | `0.8.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.2` | `4.15.1` |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [asttokens](https://github.com/gristlabs/asttokens) | `3.0.1` | `3.0.2` |\n| [boto3](https://github.com/boto/boto3) | `1.42.51` | `1.43.100` |\n| [botocore](https://github.com/boto/botocore) | `1.42.51` | `1.43.100` |\n| [build](https://github.com/pypa/build) | `1.4.0` | `1.6.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.1.4` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.5.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.4` | `7.16.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1.1` |\n| [docstring-parser-fork](https://github.com/rr-/docstring_parser) | `0.0.14` | `0.0.16` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.21.2` | `0.23` |\n| [fake-py](https://github.com/barseghyanartur/fake.py) | `0.12.2` | `0.13.1` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.20` |\n| [ipython](https://github.com/ipython/ipython) | `9.10.0` | `9.17.1` |\n| [jaraco-context](https://github.com/jaraco/jaraco.context) | `6.1.0` | `6.1.2` |\n| [jaraco-functools](https://github.com/jaraco/jaraco.functools) | `4.4.0` | `4.6.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [jiter](https://github.com/pydantic/jiter) | `0.13.0` | `0.17.0` |\n| [librt](https://github.com/mypyc/librt) | `0.8.1` | `0.15.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [moto](https://github.com/getmoto/moto) | `5.1.21` | `5.2.3` |\n| [nh3](https://github.com/messense/nh3) | `0.3.3` | `0.3.7` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.3` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.1` |\n| [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) | `3.0.52` | `3.0.53` |\n| [pure-eval](https://github.com/alexmojaki/pure_eval) | `0.2.3` | `0.2.4` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.5` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.49.0` |\n| [pydoclint](https://github.com/jsh9/pydoclint) | `0.8.3` | `0.9.1` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pyproject-hooks](https://github.com/pypa/pyproject-hooks) | `1.2.0` | `1.3.3` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [responses](https://github.com/getsentry/responses) | `0.25.8` | `0.26.3` |\n| [respx](https://github.com/lundberg/respx) | `0.22.0` | `0.23.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.1` | `0.16.8` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.16.0` | `0.19.2` |\n| [snowballstemmer](https://github.com/snowballstem/snowball) | `3.0.1` | `3.1.1` |\n| [sphinx-source-tree](https://github.com/barseghyanartur/sphinx-source-tree) | `0.2` | `0.2.3` |\n| [starlette](https://github.com/Kludex/starlette) | `1.3.1` | `1.6.0` |\n| [stevedore](https://docs.openstack.org/stevedore) | `5.6.0` | `5.9.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.70.1` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.16.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [typing-inspection](https://github.com/pydantic/typing-inspection) | `0.4.2` | `0.4.4` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.7.0` | `2.8.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.12.17` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.53.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.3.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.8.4` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.48.0` |\n| [xmltodict](https://github.com/martinblech/xmltodict) | `1.0.3` | `1.0.4` |\n\nUpdates `annotated-types` from 0.7.0 to 0.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/annotated-types/annotated-types/releases\"\u003eannotated-types's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.8.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRename DocInfo to Doc by \u003ca href=\"https://github.com/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.13 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docstring of \u003ccode\u003eTimezone\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/84\"\u003eannotated-types/annotated-types#84\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) by \u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typo in README.md by \u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd CI for PyPy3.11 and fix test (issue 71) by \u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix string predicate names in doc by \u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd SPDX license expression by \u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Python 3.14 to the test matrix by \u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 and drop EOL 3.8-3.9 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/97\"\u003eannotated-types/annotated-types#97\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in \u003ccode\u003eLen\u003c/code\u003e docstring by \u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 0.8.0 release by \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/103\"\u003eannotated-types/annotated-types#103\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ehttps://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/9eb96680138269811a39d838d720abc3dce33954\"\u003e\u003ccode\u003e9eb9668\u003c/code\u003e\u003c/a\u003e Prepare for 0.8.0 release (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/103\"\u003e#103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/10b77644f88b385357653730a1ab23748ca3ae2e\"\u003e\u003ccode\u003e10b7764\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003eLen\u003c/code\u003e docstring (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/100\"\u003e#100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/955f7576d616feb6e9407c74498517787c38afd4\"\u003e\u003ccode\u003e955f757\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop EOL 3.8-3.9 (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/97\"\u003e#97\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/bd280fea7983550d266f993d868b8dd7ff822bf1\"\u003e\u003ccode\u003ebd280fe\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/96\"\u003e#96\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/a471bb757663452459893e6f593118ec21eb1b9e\"\u003e\u003ccode\u003ea471bb7\u003c/code\u003e\u003c/a\u003e Add SPDX license expression (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/92\"\u003e#92\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/eab91d9a8c0d3f73661fc4b0794a1fe76c94fa84\"\u003e\u003ccode\u003eeab91d9\u003c/code\u003e\u003c/a\u003e Fix string predicate names in doc (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/90\"\u003e#90\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/03ad9c3c7b4d4dfe9e33c09075a3a2766c0820e1\"\u003e\u003ccode\u003e03ad9c3\u003c/code\u003e\u003c/a\u003e add CI for PyPy3.11 and fix test (issue 71) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/88\"\u003e#88\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/5ae60437f0ab493cedd27311bc6ce6d2188e8d8b\"\u003e\u003ccode\u003e5ae6043\u003c/code\u003e\u003c/a\u003e fix: typo in README.md (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/87\"\u003e#87\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/b60ad7bff90019c7de3547df1c8e3586eb328423\"\u003e\u003ccode\u003eb60ad7b\u003c/code\u003e\u003c/a\u003e Update license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/86\"\u003e#86\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/3fbeb6d129760ae48d7a0372fb9301764acc95ae\"\u003e\u003ccode\u003e3fbeb6d\u003c/code\u003e\u003c/a\u003e Fix docstring of \u003ccode\u003eTimezone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/84\"\u003e#84\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.2 to 4.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplemented a compatibility fix for supporting direct access of \u003ccode\u003eanyio.*\u003c/code\u003e submodules from the main package even when those submodules were not directly imported first (\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311\"\u003e#1311\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311%5C%3E\"\u003eagronholm/anyio#1311\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for the newer keyword-only arguments on \u003ccode\u003eanyio.Path\u003c/code\u003e methods to match the standard library \u003ccode\u003epathlib.Path\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eexists()\u003c/code\u003e (Python 3.12+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_dir()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_file()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eowner()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003egroup()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enewline\u003c/code\u003e on \u003ccode\u003eread_text()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1286\"\u003e#1286\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1293\"\u003e#1293\u003c/a\u003e; PR by \u003ca href=\"https://github.com/jaideeppyne\"\u003e\u003ccode\u003e@​jaideeppyne\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eamap\u003c/code\u003e, \u003ccode\u003egather\u003c/code\u003e, and \u003ccode\u003eas_completed\u003c/code\u003e utility functions to simplify common patterns (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1173\"\u003e#1173\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003e--anyio-mode\u003c/code\u003e command-line option as an alternative to the \u003ccode\u003eanyio_mode\u003c/code\u003e ini setting, and fix the pytest plugin's auto mode detection to recognize the mode when set via either mechanism(e.g: \u003ccode\u003epytest_asyncio\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1242\"\u003e#1242\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003eanyio.Future\u003c/code\u003e synchronization primitive which behaves similar to \u003ccode\u003easyncio.Future\u003c/code\u003e, allowing tasks to wait for a value (or exception) from another task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1146\"\u003e#1146\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded guidance for managing multiple memory object stream producers and consumers with cloned streams (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/330\"\u003e#330\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nightcityblade\"\u003e\u003ccode\u003e@​nightcityblade\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eStapledObjectStream.send_nowait()\u003c/code\u003e that delegates to the underlying \u003ccode\u003eObjectSendStream\u003c/code\u003e, if it implements it (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1241\"\u003e#1241\u003c/a\u003e; PR by \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003emove_on_at()\u003c/code\u003e and \u003ccode\u003efail_at()\u003c/code\u003e functions to complement \u003ccode\u003emove_on_after()\u003c/code\u003e and \u003ccode\u003efail_after()\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the default name for a task spawned with \u003ccode\u003eTaskGroup.create_task(func())\u003c/code\u003e to match the default task name for the analogous task spawned with \u003ccode\u003eTaskGroup.start_soon(func)\u003c/code\u003e or \u003ccode\u003eTaskGroup.start(func)\u003c/code\u003e in more situations. Previously, the default name of a \u003ccode\u003eTaskGroup.create_task\u003c/code\u003e task never included the module name. (The default name for a task spawned with \u003ccode\u003eTaskGroup.start_soon\u003c/code\u003e or \u003ccode\u003eTaskGroup.start\u003c/code\u003e typically includes the module name.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1234\"\u003e#1234\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the \u003ccode\u003eanyio\u003c/code\u003e and \u003ccode\u003eanyio.abc\u003c/code\u003e modules to lazily (much like \u003ccode\u003e810\u003c/code\u003e) import the necessary submodules. This is done by parsing the AST of the module and building a lookup table from the \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block. A fallback mode has been provided for installations where the source code is unavailable (e.g. PyInstaller). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1169\"\u003e#1169\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed free-threading compatibility issues arising from the fact that on Python 3.14 free-threading builds, newly created threads inherit the current context by default, causing AnyIO to behave erroneously in relation to \u003ccode\u003estart_blocking_portal()\u003c/code\u003e and \u003ccode\u003eanyio.to_thread.run_sync()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1224\"\u003e#1224\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eSpooledTemporaryFile.readinto()\u003c/code\u003e and \u003ccode\u003ereadinto1()\u003c/code\u003e reading twice before rollover, so the destination buffer was overwritten by the second read and the file position advanced twice, silently losing data (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1215\"\u003e#1215\u003c/a\u003e; PR by \u003ca href=\"https://github.com/c-tonneslan\"\u003e\u003ccode\u003e@​c-tonneslan\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003efail_after\u003c/code\u003e (and the new \u003ccode\u003efail_at\u003c/code\u003e) allowing for added exception context when raising \u003ccode\u003eTimeoutError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1227\"\u003e#1227\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the default \u003ccode\u003eTaskHandle.name\u003c/code\u003e missing part of the task name for tasks started with \u003ccode\u003eTaskGroup.start\u003c/code\u003e on Trio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1231\"\u003e#1231\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.run\u003c/code\u003e leaking, or at least, delaying collection of loop and root_task due to the root task being cached in a \u003ccode\u003eRunVar\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1203\"\u003e#1203\u003c/a\u003e; PR by \u003ca href=\"https://github.com/tapetersen\"\u003e\u003ccode\u003e@​tapetersen\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.Path.with_stem()\u003c/code\u003e silently producing a wrong path (e.g. \u003ccode\u003ePath(\u0026quot;.txt\u0026quot;)\u003c/code\u003e) instead of raising \u003ccode\u003eValueError\u003c/code\u003e when given an empty stem on a path with a non-empty suffix, unlike \u003ccode\u003epathlib.PurePath.with_stem\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1200\"\u003e#1200\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eUNIXSocketStream.aclose()\u003c/code\u003e raising \u003ccode\u003easyncio.InvalidStateError\u003c/code\u003e when a concurrent receive or send operation had just been cancelled on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1267\"\u003e#1267\u003c/a\u003e; PR by \u003ca href=\"https://github.com/alloutflo\"\u003e\u003ccode\u003e@​alloutflo\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the pytest plugin importing the deprecated \u003ccode\u003e_pytest.python.CallSpec2\u003c/code\u003e alias, which triggers \u003ccode\u003ePytestRemovedIn10Warning\u003c/code\u003e on \u003ccode\u003epytest\u0026gt;=9.2\u003c/code\u003e and crashes pytest at startup when \u003ccode\u003efilterwarnings = error\u003c/code\u003e is configured (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1271\"\u003e#1271\u003c/a\u003e; PR by \u003ca href=\"https://github.com/matthewfeickert\"\u003e\u003ccode\u003e@​matthewfeickert\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an asyncio worker thread race that could raise \u003ccode\u003eRuntimeError\u003c/code\u003e when the event loop closed between checking its state and scheduling the worker result (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1265\"\u003e#1265\u003c/a\u003e; PR by \u003ca href=\"https://github.com/hansu650\"\u003e\u003ccode\u003e@​hansu650\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens when \u003ccode\u003etotal_tokens\u003c/code\u003e was raised while the limiter was over-subscribed (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1223\"\u003e#1223\u003c/a\u003e; PR by \u003ca href=\"https://github.com/zelinewang\"\u003e\u003ccode\u003e@​zelinewang\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffcd1542cd6d127980205f90a0100078849dd703\"\u003e\u003ccode\u003effcd154\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/0ecf5ed98d294242509b043ebd1a0843e52d892f\"\u003e\u003ccode\u003e0ecf5ed\u003c/code\u003e\u003c/a\u003e Added a workaround for third party code accessing unimported submodules (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/928366259543412a2deb1e2ba09ea45ffa92ef4f\"\u003e\u003ccode\u003e9283662\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d137692a90f76e4f71605e32ea5ca94cab3a539d\"\u003e\u003ccode\u003ed137692\u003c/code\u003e\u003c/a\u003e Improved the instructions for AI agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/033fc52b8fa8e90c5d0ef24b10b3860e974a6265\"\u003e\u003ccode\u003e033fc52\u003c/code\u003e\u003c/a\u003e Shield TemporaryDirectory cleanup from cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1304\"\u003e#1304\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/942e9a6552cc10b5aaa779d84bfc8e2c3d5fcffc\"\u003e\u003ccode\u003e942e9a6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1305\"\u003e#1305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b825c3be7cb4ca1a8000b8065d4e147843deb704\"\u003e\u003ccode\u003eb825c3b\u003c/code\u003e\u003c/a\u003e Fixed pyproject.toml changes not triggering the test suite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9727dc504681e2986b5bc285de9571fb467539af\"\u003e\u003ccode\u003e9727dc5\u003c/code\u003e\u003c/a\u003e Fixed start inconsistencies between trio and asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b05fe6d160a640355c201363cab286a7d2581da8\"\u003e\u003ccode\u003eb05fe6d\u003c/code\u003e\u003c/a\u003e Fixed wrong type in move_on_after (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1297\"\u003e#1297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44d0c93cc20079acbf38ba4dbed5ab9df323f153\"\u003e\u003ccode\u003e44d0c93\u003c/code\u003e\u003c/a\u003e Fixed asyncio task group coroutine cleanup (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.2...4.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asttokens` from 3.0.1 to 3.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gristlabs/asttokens/releases\"\u003easttokens's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eModernize type annotations by \u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/172\"\u003egristlabs/asttokens#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pypy CI by skipping redundant mypy runs on it by \u003ca href=\"https://github.com/dsagal\"\u003e\u003ccode\u003e@​dsagal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/173\"\u003egristlabs/asttokens#173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix IndexError on source mixing lone CR with LF line endings (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/105\"\u003e#105\u003c/a\u003e) by \u003ca href=\"https://github.com/apoorvdarshan\"\u003e\u003ccode\u003e@​apoorvdarshan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/174\"\u003egristlabs/asttokens#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease modernization, and publish to PyPI from CI via trusted publishing by \u003ca href=\"https://github.com/dsagal\"\u003e\u003ccode\u003e@​dsagal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/175\"\u003egristlabs/asttokens#175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/172\"\u003egristlabs/asttokens#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apoorvdarshan\"\u003e\u003ccode\u003e@​apoorvdarshan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/174\"\u003egristlabs/asttokens#174\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gristlabs/asttokens/compare/v3.0.1...v3.0.2\"\u003ehttps://github.com/gristlabs/asttokens/compare/v3.0.1...v3.0.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/f97a6e1403d9f0e93940a11b507524550a5c3896\"\u003e\u003ccode\u003ef97a6e1\u003c/code\u003e\u003c/a\u003e Release modernization, and publish to PyPI from CI via trusted publishing (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/175\"\u003e#175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/bb3c487da039e21638150f53c2f8d23ba2d92826\"\u003e\u003ccode\u003ebb3c487\u003c/code\u003e\u003c/a\u003e Fix IndexError on source mixing lone CR with LF line endings (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/105\"\u003e#105\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/174\"\u003e#174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/d1eed1023e1203f5392d3e2ebd1f195fdf4c1973\"\u003e\u003ccode\u003ed1eed10\u003c/code\u003e\u003c/a\u003e Fix pypy CI by skipping redundant mypy runs on it (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/173\"\u003e#173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/b8834d38dc69eea2ceb401cf068e0c78394f3f68\"\u003e\u003ccode\u003eb8834d3\u003c/code\u003e\u003c/a\u003e Modernize type annotations (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/172\"\u003e#172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/gristlabs/asttokens/compare/v3.0.1...v3.0.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.42.51 to 1.43.100\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2b8c4ed93e6894617dd47fbd6d7957ff75e60403\"\u003e\u003ccode\u003e2b8c4ed\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.100'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/4001955f75ae3c48a311b56e57fe1f3c4bee6940\"\u003e\u003ccode\u003e4001955\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.100\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/361a6d61a664e9f7af37750183f3fd923931eb22\"\u003e\u003ccode\u003e361a6d6\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8ce7465b1c7e451d3f9ef15b41f09ddf5bf52584\"\u003e\u003ccode\u003e8ce7465\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/399bd00bf646ab04c63c00a20847975cb8920d30\"\u003e\u003ccode\u003e399bd00\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/f4aa477d2594dd2d60831a0add8ef19b661a1f6b\"\u003e\u003ccode\u003ef4aa477\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/15d73115f2849fd1acbb7278abd0b23ba1275075\"\u003e\u003ccode\u003e15d7311\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3314d844db83f544d5e9e0a69e832c00aa5d35b4\"\u003e\u003ccode\u003e3314d84\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/79f46cc4d5913c34004747906cf508e6d0bbea1f\"\u003e\u003ccode\u003e79f46cc\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3a3637ffdcfcbc372301c116fd4378bba35da85b\"\u003e\u003ccode\u003e3a3637f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.98\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.42.51...1.43.100\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.42.51 to 1.43.100\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/22c55b37c9923caf2eb13062556fab0ccfc5b67b\"\u003e\u003ccode\u003e22c55b3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.100'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/a5b65cac64124adb23b1ffd549a8bcbf7c384487\"\u003e\u003ccode\u003ea5b65ca\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.100\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c1504791d2ca1deee51762a75efa52dbbf798ce4\"\u003e\u003ccode\u003ec150479\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/85e265bfe8fb2d6c2f9cbd44c9500b18ff4de70e\"\u003e\u003ccode\u003e85e265b\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/883cff3440021ef7c762332f2845eed1af7334c3\"\u003e\u003ccode\u003e883cff3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0e8a5deaec33ec6d26de4cc08615f745e6816bc3\"\u003e\u003ccode\u003e0e8a5de\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3cb0216f531434c51c38dbe2fc59c5867dfbbb02\"\u003e\u003ccode\u003e3cb0216\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/cfdf9056c2014b02f816a9fb73743d1005ac7a7b\"\u003e\u003ccode\u003ecfdf905\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/f9195c79ea2bf46350dd320d2a0bf3db7da0b460\"\u003e\u003ccode\u003ef9195c7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dfc704e5d254829608b0f427921c67f3521abab6\"\u003e\u003ccode\u003edfc704e\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.98\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.42.51...1.43.100\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.4.0 to 1.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore[v1]: prepare for v1.6.1 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1181\"\u003epypa/build#1181\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.6.0...1.6.1\"\u003ehttps://github.com/pypa/build/compare/1.6.0...1.6.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace prettier with mdformat and yamlfmt by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1133\"\u003epypa/build#1133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLet yamlfmt format the workflows by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1134\"\u003epypa/build#1134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(release): semver auto bump, changelog reflow, and roll back 1.5.1 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1132\"\u003epypa/build#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: hash verification in --dependency-constraints-txt could be silently skipped by \u003ca href=\"https://github.com/manfred-kaiser\"\u003e\u003ccode\u003e@​manfred-kaiser\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1140\"\u003epypa/build#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): bump build-and-inspect-python-package to v3.0.1 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1147\"\u003epypa/build#1147\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): pin coverage core to ctrace so test contexts record by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1148\"\u003epypa/build#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: run mypy on more parts of the code by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1151\"\u003epypa/build#1151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: turn up strictness on mypy by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1153\"\u003epypa/build#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: faster mypy, fix merge error by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1156\"\u003epypa/build#1156\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): rerun integration tests on transient network errors by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1150\"\u003epypa/build#1150\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: clean up unused casts in tests by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1154\"\u003epypa/build#1154\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor(typing): apply review feedback from \u003ca href=\"https://redirect.github.com/pypa/build/issues/1093\"\u003e#1093\u003c/a\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1155\"\u003epypa/build#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: Generator is more accurate than Iterator by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1152\"\u003epypa/build#1152\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: mark test_main_sdist_input_end_to_end with pytest.mark.network by \u003ca href=\"https://github.com/frenzymadness\"\u003e\u003ccode\u003e@​frenzymadness\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1144\"\u003epypa/build#1144\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;⚠️ feat(util): deprecate project_wheel_metadata\u0026quot; by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1158\"\u003epypa/build#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: download integration sources once per run by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1157\"\u003epypa/build#1157\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse stdlib \u003ccode\u003eimportlib.metadata\u003c/code\u003e for typing by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1162\"\u003epypa/build#1162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop redundant \u003ccode\u003eexc_info\u003c/code\u003e parameter from backend exception wrapper by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1161\"\u003epypa/build#1161\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop a few PyPy-specific test skips by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1164\"\u003epypa/build#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 chore: batch dependency updates weekly on Tuesday by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1165\"\u003epypa/build#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: use app token for releases by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1169\"\u003epypa/build#1169\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/manfred-kaiser\"\u003e\u003ccode\u003e@​manfred-kaiser\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1140\"\u003epypa/build#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/frenzymadness\"\u003e\u003ccode\u003e@​frenzymadness\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1144\"\u003epypa/build#1144\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.5.1...1.6.0\"\u003ehttps://github.com/pypa/build/compare/1.5.1...1.6.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.6.1 (2026-09-10)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid trying to detect symlinks on Windows, regression in 1.6.0 - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1175\u003c/code\u003e) (:issue:\u003ccode\u003e1175\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDocumentation\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eFix doubled backslashes in the Windows pip config path (\u003ccode\u003e%APPDATA%\\pip\\pip.ini\u003c/code\u003e) in the docs - by :user:\u003ccode\u003earoh3006\u003c/code\u003e\n(:issue:\u003ccode\u003e1149\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eMiscellaneous\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e:issue:\u003ccode\u003e1168\u003c/code\u003e, :issue:\u003ccode\u003e1170\u003c/code\u003e, :issue:\u003ccode\u003e1178\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e####################\n1.6.0 (2026-08-27)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/89cccef40df9011f03bec18cf52c53d1096ed6ee\"\u003e\u003ccode\u003e89cccef\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/a6f707a75fc8548d7707645e97c7903197387849\"\u003e\u003ccode\u003ea6f707a\u003c/code\u003e\u003c/a\u003e ci: support releases from v* branches (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1178\"\u003e#1178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/77851610de5d3894fa8a88e06e0232901cf93758\"\u003e\u003ccode\u003e7785161\u003c/code\u003e\u003c/a\u003e docs: fix doubled backslashes in Windows pip config path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1149\"\u003e#1149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/244b250c3219070eebb29764f7709262d48afd41\"\u003e\u003ccode\u003e244b250\u003c/code\u003e\u003c/a\u003e fix: always use copies for the isolated venv on Windows (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/c93ca6f6d252e4d8df7fda4a61f8f9ed8a55a411\"\u003e\u003ccode\u003ec93ca6f\u003c/code\u003e\u003c/a\u003e build(deps): bump re-actors/alls-green from 1.2.2 to 1.3.0 in the github-acti...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/e02ffd32241aec2e306d90869417c1e900c0adb4\"\u003e\u003ccode\u003ee02ffd3\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1173\"\u003e#1173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/aad39a800e3d81bf907018ebe2fab135717da59b\"\u003e\u003ccode\u003eaad39a8\u003c/code\u003e\u003c/a\u003e docs: fix changelog page heading levels and sidebar (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/5c3fd46b5c38c7caea5dd95ce365971104a734aa\"\u003e\u003ccode\u003e5c3fd46\u003c/code\u003e\u003c/a\u003e docs: use PyPI ref directly (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/1c5bd6c21cbd33c1816978d45219d48fb4c2b269\"\u003e\u003ccode\u003e1c5bd6c\u003c/code\u003e\u003c/a\u003e 🐛 fix(release): format generated changelog (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/7f0cc7ed19969558c7daeaa3652ce2ffc81599c1\"\u003e\u003ccode\u003e7f0cc7e\u003c/code\u003e\u003c/a\u003e 🔧 build(type): replace mypy with pyrefly (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.4.0...1.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.1.4 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.01.04...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.5.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.5.0/\"\u003ehttps://pypi.org/project/click/8.5.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-5-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-5-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/33\"\u003ehttps://github.com/pallets/click/milestone/33\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2672\"\u003e#2672\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3637\"\u003e#3637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2986\"\u003e#2986\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3505\"\u003e#3505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2983\"\u003e#2983\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3473\"\u003e#3473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when \u003ca href=\"https://redirect.github.com/pallets/click/issues/2969\"\u003e#2969\u003c/a\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. \u003ca href=\"https...\n\n_Description has been truncated_","html_url":"https://github.com/barseghyanartur/safetar/pull/23","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/barseghyanartur%2Fsafetar/issues/23","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/23/packages"},{"uuid":"5582905750","node_id":"PR_kwDOQgqbUs8AAAABFHMXsQ","number":1016,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 13 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":8,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-25T12:40:07.000Z","updated_at":"2026-09-26T13:44:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-minor-patch","update_count":13,"packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"httpx2","old_version":"2.12.0","new_version":"2.13.1","repository_url":"https://github.com/pydantic/httpx2"},{"name":"msgpack","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"orjson","old_version":"3.11.9","new_version":"3.12.0","repository_url":"https://github.com/ijl/orjson"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.2","new_version":"2.15.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.70.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.51","new_version":"2.0.54","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"urllib3","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 13 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.12.0` | `2.13.1` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.1` | `1.2.2` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.9` | `3.12.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.2` | `2.15.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.70.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.51` | `2.0.54` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.7.0` | `2.8.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.1` | `0.53.0` |\n\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx2` from 2.12.0 to 2.13.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpx2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e📤 Accurate file upload lengths\u003c/h3\u003e\n\u003cp\u003ePassing a file as \u003ccode\u003econtent=\u003c/code\u003e now calculates \u003ccode\u003eContent-Length\u003c/code\u003e from its remaining bytes, respecting the current file position (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1214\"\u003e#1214\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🔐 Reliable proxy TLS and HTTP/2 negotiation\u003c/h3\u003e\n\u003cp\u003eTLS hostname overrides now apply inside HTTP proxy tunnels without affecting the proxy's own TLS connection (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1223\"\u003e#1223\u003c/a\u003e). HTTP/2 is advertised first when enabled, and HTTP/1.1 is omitted when disabled (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1155\"\u003e#1155\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🧹 Clean WebSocket shutdown\u003c/h3\u003e\n\u003cp\u003eThe sync WebSocket keepalive thread now exits cleanly when a ping races with connection shutdown (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1228\"\u003e#1228\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCalculate \u003ccode\u003eContent-Length\u003c/code\u003e from the remaining bytes when a file is passed as \u003ccode\u003econtent=\u003c/code\u003e, respecting its current position (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1214\"\u003e#1214\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eStop the sync WebSocket keepalive thread cleanly when a ping races with connection shutdown (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1228\"\u003e#1228\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHonor the \u003ccode\u003esni_hostname\u003c/code\u003e extension for TLS inside HTTP proxy tunnels without applying it to the proxy's TLS connection (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1223\"\u003e#1223\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePrefer HTTP/2 during TLS protocol negotiation when enabled, and stop advertising HTTP/1.1 when it is disabled (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1155\"\u003e#1155\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/httpx2/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🔐 Reliable TLS verification controls\u003c/h3\u003e\n\u003cp\u003eThe CLI \u003ccode\u003e--no-verify\u003c/code\u003e flag now disables TLS certificate verification as intended, and \u003ccode\u003e--verify\u003c/code\u003e provides an explicit counterpart (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003epydantic/httpx2#1140\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003epydantic/httpx2#1186\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🧹 Safer async stream cleanup\u003c/h3\u003e\n\u003cp\u003eStopping a streamed response early no longer risks a nested async generator finalization error (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003epydantic/httpx2#1179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/blob/main/src/httpx2/CHANGELOG.md\"\u003ehttpx2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.1 (September 23rd, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCalculate \u003ccode\u003eContent-Length\u003c/code\u003e from the remaining bytes when a file is passed as \u003ccode\u003econtent=\u003c/code\u003e, respecting its current position.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1214\"\u003e#1214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop the sync WebSocket keepalive thread cleanly when a ping races with connection shutdown.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1228\"\u003e#1228\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.13.0 (September 14th, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake the \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag disable TLS certificate verification and add an explicit \u003ccode\u003e--verify\u003c/code\u003e counterpart.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003e#1140\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003e#1204\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/d91c9f4236523eb5978ca800944fa0078f17409f\"\u003e\u003ccode\u003ed91c9f4\u003c/code\u003e\u003c/a\u003e Correct the upcoming release version to 2.13.1 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1228\"\u003e#1228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/62a607d0772ba567917a26afb4e7a83f104a10d6\"\u003e\u003ccode\u003e62a607d\u003c/code\u003e\u003c/a\u003e Prepare version 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1227\"\u003e#1227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/df9783d23b9508b7e6a2277217dae496e3435462\"\u003e\u003ccode\u003edf9783d\u003c/code\u003e\u003c/a\u003e Respect file cursor positions when calculating raw content length (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1214\"\u003e#1214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/04d152ba8ef082f68feb21fe0e13e361215b942d\"\u003e\u003ccode\u003e04d152b\u003c/code\u003e\u003c/a\u003e docs: correct stale URL.query example (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1222\"\u003e#1222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f2951854442e78cb8f6d2256b7c1d83bd2b77d0b\"\u003e\u003ccode\u003ef295185\u003c/code\u003e\u003c/a\u003e Prepare version 2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/8f215b5c9768ba8152c7aaf52fd85efb80ea992b\"\u003e\u003ccode\u003e8f215b5\u003c/code\u003e\u003c/a\u003e Use portable links in API docstrings (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1202\"\u003e#1202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/36d636a002a42f961d1da4233546fe2f2c83c9c1\"\u003e\u003ccode\u003e36d636a\u003c/code\u003e\u003c/a\u003e Group \u003ccode\u003ehttpx2.__all__\u003c/code\u003e exports by source module (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1188\"\u003e#1188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f1064aaf67dab1598bb817fa0bff871f5bb2d7fa\"\u003e\u003ccode\u003ef1064aa\u003c/code\u003e\u003c/a\u003e Bump the python-packages group across 1 directory with 11 updates (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/bc27137977442cbfecb357046fd90f38c7f13108\"\u003e\u003ccode\u003ebc27137\u003c/code\u003e\u003c/a\u003e Update uv-dynamic-versioning requirement from \u0026gt;=0.14.0 to \u0026gt;=0.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/62e08275346151351af60632a2258dea47218b6c\"\u003e\u003ccode\u003e62e0827\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.12.0...v2.13.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix docstring for read_size by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/700\"\u003emsgpack/msgpack-python#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eunpacker: fix silent datetime truncation with datetime=3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/701\"\u003emsgpack/msgpack-python#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erun test with debug build by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/702\"\u003emsgpack/msgpack-python#702\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: add reentrant guard to Unpacker.feed() by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/704\"\u003emsgpack/msgpack-python#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 6.0.3 to 7.0.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/705\"\u003emsgpack/msgpack-python#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/707\"\u003emsgpack/msgpack-python#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_unpack.py: add tests for ExtraData by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/708\"\u003emsgpack/msgpack-python#708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/709\"\u003emsgpack/msgpack-python#709\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime() precision for far-future datetimes by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in test and docs by \u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/719\"\u003emsgpack/msgpack-python#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in unpackb() ExtraData path for non-contiguous input by \u003ca href=\"https://github.com/ThomasWaldmann\"\u003e\u003ccode\u003e@​ThomasWaldmann\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/722\"\u003emsgpack/msgpack-python#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/721\"\u003emsgpack/msgpack-python#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 4.1.1 to 4.2.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/724\"\u003emsgpack/msgpack-python#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert Packer's buf_size once by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: translate RecursionError to StackError in fallback Unpacker.skip() by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/727\"\u003emsgpack/msgpack-python#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate nanoseconds range when unpacking timestamps in the C extension by \u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid parallel execution of the recursion-limit nesting test on free-threaded builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/729\"\u003emsgpack/msgpack-python#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise OverflowError when use_single_float cannot represent a value by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.2 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/730\"\u003emsgpack/msgpack-python#730\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.2\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-08-27\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix the \u003ccode\u003eread_size\u003c/code\u003e documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silent truncation when unpacking an out-of-range timestamp with \u003ccode\u003etimestamp=3\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/701\"\u003e#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent reentrant calls to \u003ccode\u003eUnpacker.feed()\u003c/code\u003e while unpacking. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/704\"\u003e#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/707\"\u003e#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e precision for far-future datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/710\"\u003e#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in the documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/712\"\u003e#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate the nanoseconds range when unpacking timestamps in the C extension. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a use-after-free in the \u003ccode\u003eunpackb()\u003c/code\u003e \u003ccode\u003eExtraData\u003c/code\u003e path for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/722\"\u003e#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent a buffer overflow when converting \u003ccode\u003ePacker\u003c/code\u003e's \u003ccode\u003ebuf_size\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTranslate \u003ccode\u003eRecursionError\u003c/code\u003e to \u003ccode\u003eStackError\u003c/code\u003e in the fallback \u003ccode\u003eUnpacker.skip()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eOverflowError\u003c/code\u003e when \u003ccode\u003euse_single_float=True\u003c/code\u003e cannot represent a value. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/7381b318f51688f3f941df0b4c056d7a7a20c9d0\"\u003e\u003ccode\u003e7381b31\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ee1bd3c02d5494921653a0f7ffc264b8591de713\"\u003e\u003ccode\u003eee1bd3c\u003c/code\u003e\u003c/a\u003e release v1.2.2 (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/57d28a250c4904685f3a4f4135b301def517681e\"\u003e\u003ccode\u003e57d28a2\u003c/code\u003e\u003c/a\u003e Raise OverflowError when use_single_float cannot represent a value (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/d374a17e88f20c221760454e8829dc58ad5222a8\"\u003e\u003ccode\u003ed374a17\u003c/code\u003e\u003c/a\u003e Avoid parallel execution of the recursion-limit nesting test on free-threaded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/e94e1dc078547c58855c7cc60b6e54c44deb903d\"\u003e\u003ccode\u003ee94e1dc\u003c/code\u003e\u003c/a\u003e Validate nanoseconds range when unpacking timestamps in the C extension (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/2e4be090f6a42e1ad19526ca6f6ee67f3476389a\"\u003e\u003ccode\u003e2e4be09\u003c/code\u003e\u003c/a\u003e fix: translate RecursionError to StackError in fallback Unpacker.skip() (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/9f9bdae0773166e8ed50dfdd1ed13cc4296819ce\"\u003e\u003ccode\u003e9f9bdae\u003c/code\u003e\u003c/a\u003e Convert Packer's buf_size once (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/809bfcda6d7186fbb34f6ea1b984a61344ba55d2\"\u003e\u003ccode\u003e809bfcd\u003c/code\u003e\u003c/a\u003e remove unused variable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/186d4dbc126b659eff1509c850300e207d8aaad5\"\u003e\u003ccode\u003e186d4db\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 4.1.1 to 4.2.0(\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ea6b84f5ee6d97ae2089f1eb025034a6847d1ccb\"\u003e\u003ccode\u003eea6b84f\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencie...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.11.9 to 3.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/releases\"\u003eorjson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/blob/master/CHANGELOG.md\"\u003eorjson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0 - 2026-08-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6737895a1a4e3e26df0569a40147893a786f9a58\"\u003e\u003ccode\u003e6737895\u003c/code\u003e\u003c/a\u003e 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/c2a6e8ff7b898635fb68a85bd5a62df1edf61cfc\"\u003e\u003ccode\u003ec2a6e8f\u003c/code\u003e\u003c/a\u003e JsonWriter, iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6a2d7a7d66dc3c5698625a7b334c40db459e46ae\"\u003e\u003ccode\u003e6a2d7a7\u003c/code\u003e\u003c/a\u003e yyjson 1ea2fb0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/97bf170d9726e91c891f35eae4892801520b9dce\"\u003e\u003ccode\u003e97bf170\u003c/code\u003e\u003c/a\u003e build update\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/ijl/orjson/compare/3.11.9...3.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.12 to 2.9.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.13\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1848](https://github.com/psycopg/psycopg2/issues/1848)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed bytea input.\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed int64 input in arrays (:ticket:\u003ccode\u003e[#1847](https://github.com/psycopg/psycopg2/issues/1847)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003epyproject.toml\u003c/code\u003e file to declare a PEP 517 build backend\n(:ticket:\u003ccode\u003e[#1788](https://github.com/psycopg/psycopg2/issues/1788)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f650e7afed0c94f596594e8328a0c7fa65a9d0e5\"\u003e\u003ccode\u003ef650e7a\u003c/code\u003e\u003c/a\u003e chore: bump to release 2.9.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/368c8a1ca6d80088703a693ce64b68ad7d346698\"\u003e\u003ccode\u003e368c8a1\u003c/code\u003e\u003c/a\u003e chore!: drop support for Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/9b39e65ab232f0a267a278cdaef1bd9975d88c65\"\u003e\u003ccode\u003e9b39e65\u003c/code\u003e\u003c/a\u003e chore: drop scaleway build support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/2ca70416be6d4d3d8170ec439876c0b3569af718\"\u003e\u003ccode\u003e2ca7041\u003c/code\u003e\u003c/a\u003e fix: fix handling of PostgreSQL 18 exceptions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/5385c027ef62ce14e57a7379e0375868507d6746\"\u003e\u003ccode\u003e5385c02\u003c/code\u003e\u003c/a\u003e Build CPython 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/1d32e1f6678ffa8ab8897ca81826bf4dde6354cd\"\u003e\u003ccode\u003e1d32e1f\u003c/code\u003e\u003c/a\u003e ci: only attempt triggering documentation refresh when pushing on main repo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/433e7b77a7b700fbb1cdc6e9dca6b5948d07fc23\"\u003e\u003ccode\u003e433e7b7\u003c/code\u003e\u003c/a\u003e chore: add pyproject.toml file to declare a PEP 517 build backend\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/8fb80bc3b2c358f4e3c54e33a37326d3f8b3ff6a\"\u003e\u003ccode\u003e8fb80bc\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed int64 input in arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f98014a46a1e34f024ebd6134d1d87b77490c500\"\u003e\u003ccode\u003ef98014a\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed bytea input\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/822b79cfe12ca0a04482acd382cae669a16aa789\"\u003e\u003ccode\u003e822b79c\u003c/code\u003e\u003c/a\u003e chore: bump dependencies in binary package\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.12...2.9.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.14.2 to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.15.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBehavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ecase_sensitive\u003c/code\u003e now applies to init kwargs and config-file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/900\"\u003e#900\u003c/a\u003e). \u003ccode\u003eInitSettingsSource\u003c/code\u003e and the JSON/TOML/YAML config sources previously ignored \u003ccode\u003ecase_sensitive\u003c/code\u003e. Since it defaults to \u003ccode\u003eFalse\u003c/code\u003e, \u003cstrong\u003ecase-insensitive matching is now the default\u003c/strong\u003e for these sources — e.g. \u003ccode\u003eSettings(TeSt=...)\u003c/code\u003e now populates a \u003ccode\u003etest\u003c/code\u003e field where it previously did not. Nested keys are still matched case-sensitively.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFields with unresolved forward references now emit a warning\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/901\"\u003e#901\u003c/a\u003e). Settings sources can silently fail to resolve such fields; they now raise \u003ccode\u003eIncompleteFieldDefinitionWarning\u003c/code\u003e telling you to call \u003ccode\u003emodel_rebuild()\u003c/code\u003e. If you have \u003ccode\u003efilterwarnings = error\u003c/code\u003e configured, this may surface as a new failure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNon-JSON env values for strict fields now raise \u003ccode\u003eValidationError\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/926\"\u003e#926\u003c/a\u003e) instead of a less specific error.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eShow environment variable names in CLI help\u003c/strong\u003e via \u003ccode\u003ecli_show_env_vars=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/860\"\u003e#860\u003c/a\u003e), so generated \u003ccode\u003e--help\u003c/code\u003e output doubles as configuration documentation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePYDANTIC_SETTINGS_DEBUG\u003c/code\u003e for debugging settings resolution\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/913\"\u003e#913\u003c/a\u003e). Set it to a truthy value with \u003ccode\u003eDEBUG\u003c/code\u003e logging enabled to see each source's contribution in priority order, which source won for each value, and which \u003ccode\u003eenv_file\u003c/code\u003e/secret files were probed, loaded, or skipped — the long-standing \u0026quot;why isn't my \u003ccode\u003e.env\u003c/code\u003e being picked up?\u0026quot; question.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003etoml_table_header\u003c/code\u003e for regular TOML files\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/882\"\u003e#882\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/887\"\u003e#887\u003c/a\u003e), letting you root settings at a nested table in any TOML file, not just \u003ccode\u003epyproject.toml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eTraversable\u003c/code\u003e support for JSON/TOML/YAML file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/902\"\u003e#902\u003c/a\u003e), so you can load config packaged inside a distribution — including files inside a zip or wheel — via \u003ccode\u003eimportlib.resources.files(...)\u003c/code\u003e without casting to \u003ccode\u003ePath\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGCP: \u003ccode\u003eproject_id\u003c/code\u003e can come from an earlier settings source\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003e#878\u003c/a\u003e), rather than only from the constructor or \u003ccode\u003eGOOGLE_CLOUD_PROJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix env vars not loading on Windows with \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/894\"\u003e#894\u003c/a\u003e). Windows upper-cases \u003ccode\u003eos.environ\u003c/code\u003e keys, so fields raised \u003ccode\u003eField required\u003c/code\u003e instead of picking up their values.\u003c/li\u003e\n\u003cli\u003eRead secret files as UTF-8 instead of the platform locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/917\"\u003e#917\u003c/a\u003e). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAliasPath\u003c/code\u003e on nested model fields not JSON-decoding env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/898\"\u003e#898\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix case-insensitive matching for \u003cstrong\u003eoptional\u003c/strong\u003e nested models (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/905\"\u003e#905\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix dotenv extras being wrongly claimed by a complex field sharing a name prefix (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/912\"\u003e#912\u003c/a\u003e) — e.g. \u003ccode\u003edbx_token\u003c/code\u003e being swallowed by a \u003ccode\u003edb: dict\u003c/code\u003e field.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e corrupting discriminated unions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/876\"\u003e#876\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSecret\u003c/code\u003e subclasses crashing when loaded from the environment (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/920\"\u003e#920\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix enum names not parsing through nested annotations such as \u003ccode\u003eOptional[Annotated[MyEnum, ...]]\u003c/code\u003e with \u003ccode\u003eenv_parse_enums=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/910\"\u003e#910\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty \u003ccode\u003eyaml_config_section\u003c/code\u003e now falls back to defaults instead of raising \u003ccode\u003eAttributeError: 'NoneType' object has no attribute 'keys'\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/914\"\u003e#914\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e no longer follows symlinks pointing outside \u003ccode\u003esecrets_dir\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/889\"\u003e#889\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGCP: skip the \u003ccode\u003elist_secrets\u003c/code\u003e call when \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003e#862\u003c/a\u003e), lowering the required IAM permissions to just \u003ccode\u003eroles/secretmanager.secretAccessor\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAWS: \u003ccode\u003etypes-boto3[secretsmanager]\u003c/code\u003e is no longer required at runtime (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/880\"\u003e#880\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument JSON parsing of complex env values, plus a comma-separated-values recipe (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/919\"\u003e#919\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRecommend an async settings loading pattern (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/908\"\u003e#908\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify behavior when an unprefixed value is present in a dotenv file (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/895\"\u003e#895\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify environment variable helper descriptions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003e#867\u003c/a\u003e) and fix assorted typos (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/904\"\u003e#904\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate documentation link for Pydantic settings by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/863\"\u003epydantic/pydantic-settings#863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/865\"\u003epydantic/pydantic-settings#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify environment variable helper descriptions by \u003ca href=\"https://github.com/vip892766gma\"\u003e\u003ccode\u003e@​vip892766gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003epydantic/pydantic-settings#867\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/870\"\u003epydantic/pydantic-settings#870\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/875\"\u003epydantic/pydantic-settings#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip list_secrets call when case_sensitive=True by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003epydantic/pydantic-settings#862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGoogleSecretManagerSettingsSource: read project_id from previous sources by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003epydantic/pydantic-settings#878\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f725ca187bee4212e9ef799eefa3cb25be788462\"\u003e\u003ccode\u003ef725ca1\u003c/code\u003e\u003c/a\u003e Prepare release 2.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/28f35c25fac5d61210d532c31a300d49c0b684a4\"\u003e\u003ccode\u003e28f35c2\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9056db049560897229f2603493753bae27b6479f\"\u003e\u003ccode\u003e9056db0\u003c/code\u003e\u003c/a\u003e test: move function-local imports to the top of test modules (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f077e3ab3d9492838c7ef9275a88c95134688095\"\u003e\u003ccode\u003ef077e3a\u003c/code\u003e\u003c/a\u003e fix: raise ValidationError for non-JSON env values on strict fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ae25d703c458b57f5a9a425f6ec9a28ad868f980\"\u003e\u003ccode\u003eae25d70\u003c/code\u003e\u003c/a\u003e fix: treat Secret subclasses as non-complex fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/716\"\u003e#716\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/920\"\u003e#920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/798dcea2a23b08a3e9b37994014e036224f6dd18\"\u003e\u003ccode\u003e798dcea\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/a190041d353bda2d432ea1908de4c499ae89ee0a\"\u003e\u003ccode\u003ea190041\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/925\"\u003e#925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/5d9333282b5c85d65a457c45e4476369b9949726\"\u003e\u003ccode\u003e5d93332\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/921\"\u003e#921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/d2fdeda91157140d2ff0c05404f32a9b1218115a\"\u003e\u003ccode\u003ed2fdeda\u003c/code\u003e\u003c/a\u003e fix: read secret files as UTF-8 instead of the locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/917\"\u003e#917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2256a4e60f83f2da81e7654252562fc4841aa5d4\"\u003e\u003ccode\u003e2256a4e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/915\"\u003e#915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.13.0 to 2.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.14.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst\"\u003e2.14.0 changelog\u003c/a\u003e for the complete release details and related security advisories.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.14.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Harden HMAC key validation against public-key material supplied as JWK,\n  JWKS, array, encoded, BOM-prefixed, DER, or PEM input. See\n  `GHSA-r6x4-923q-g947 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-r6x4-923q-g947\u0026gt;`__,\n  `GHSA-ffc3-869f-jxw9 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9\u0026gt;`__,\n  `GHSA-p4g4-x82p-q773 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773\u0026gt;`__,\n  and `GHSA-w2cx-738m-mc7w \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w2cx-738m-mc7w\u0026gt;`__.\n- Reject automatic redirects when ``PyJWKClient`` fetches a JWKS, preventing\n  redirected destinations from being treated as trusted key sources. See\n  `GHSA-9v7f-9g4p-ffgj \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj\u0026gt;`__.\n- Limit repeated JWKS refreshes caused by unknown key IDs while preserving\n  normal key-rotation behavior. See\n  `GHSA-2gx3-rcp4-g85q \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q\u0026gt;`__.\n- Handle deeply nested and malformed JWS/JWK input without uncaught recursion\n  errors or whole-set parsing failures. See\n  `GHSA-8wjv-2p76-3863 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863\u0026gt;`__\n  and `GHSA-w6j9-cwv2-h6wq \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w6j9-cwv2-h6wq\u0026gt;`__.\n- Enforce compact JWS encoding rules during decoding. See\n  `GHSA-hxm8-2xgr-2p9m \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m\u0026gt;`__.\n- Reject detached-payload arguments for attached JWS inputs. Thanks to `@xclow3n\n  \u0026lt;https://github.com/xclow3n\u0026gt;`__ for reporting this behavior; fixed in commit\n  `37b54877 \u0026lt;https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Apply HMAC key validation consistently when keys are loaded through\n  ``PyJWK`` and ``PyJWKClient``. See\n  `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n- Reject empty HMAC keys when represented as JWKs.\n  See `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/c6fe464b356ff4b1ebc9ba62172d331a40aa27df\u0026quot;\u0026gt;\u0026lt;code\u0026gt;c6fe464\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; release: prepare v2.14.0\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/f5413029ae7a2e31b1367b5303ea86a2f54ccf42\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f541302\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; style: apply Ruff formatting\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/801cd128528c62d9b23fcd161d1a2e1c17982f95\u0026quot;\u0026gt;\u0026lt;code\u0026gt;801cd12\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject public JWK container HMAC keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/af8181ca0bec5e6b372fbba9afbe23702b787ceb\u0026quot;\u0026gt;\u0026lt;code\u0026gt;af8181c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject empty HMAC keys from JWKs\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/ba4853a75fb9676362da17f67d0f64bd18afd4e1\u0026quot;\u0026gt;\u0026lt;code\u0026gt;ba4853a\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Throttle repeated PyJWKClient refreshes\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/2798504fa2663364573cf2d1043d8d7fef389499\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2798504\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject DER public keys as HMAC secrets\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/8b4e233a22206b34ec1186e912e75c0b2396ac07\u0026quot;\u0026gt;\u0026lt;code\u0026gt;8b4e233\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject loader-accepted PEM variants\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/1f8180a211256dfe5cf32294b6753f554a5a4258\u0026quot;\u0026gt;\u0026lt;code\u0026gt;1f8180a\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: format JWS tests\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/cff1ac55fe5f1096fd05295b269fce053ee290ab\u0026quot;\u0026gt;\u0026lt;code\u0026gt;cff1ac5\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix redirect handler return annotation\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0a795b8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Reject redirects in PyJWKClient fetches\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `python-dotenv` from 1.2.2 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.2...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.70.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.70.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew integration:\u003c/strong\u003e Mistral AI (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/4733\"\u003e#4733\u003c/a\u003e) by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdd the Mistral integration to your \u003ccode\u003esentry_sdk.init\u003c/code\u003e call:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\r\nfrom sentry_sdk.integrations.mistral import MistralIntegration\r\n\u003cp\u003esentry_sdk.init(\ndsn=\u0026quot;...\u0026quot;,\ntraces_sample_rate=1.0,\nintegrations=[\nMistralIntegration(),\n]\n)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew option:\u003c/strong\u003e A fine-grained way to configure what data should be sent from the SDK.\u003c/p\u003e\n\u003cp\u003eOffers much more flexibility than \u003ccode\u003esend_default_pii\u003c/code\u003e, allowing you to specify what\ndata should be collected. If \u003ccode\u003edata_collection\u003c/code\u003e is defined, it takes precedence over\n\u003ccode\u003esend_default_pii\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"https://docs.sentry.io/platforms/python/configuration/options/#data_collection\"\u003ehttps://docs.sentry.io/platforms/python/configuration/options/#data_collection\u003c/a\u003e\nfor the available configuration options.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\r\n\u003cp\u003esentry_sdk.init(\ndata_collection={\n\u0026quot;user_info\u0026quot;: False,\n\u0026quot;gen_ai\u0026quot;: {\u0026quot;inputs\u0026quot;: False, \u0026quot;outputs\u0026quot;: False},\n\u0026quot;graphql\u0026quot;: {\u0026quot;document\u0026quot;: False, \u0026quot;variables\u0026quot;: False},\n\u0026quot;database_query_data\u0026quot;: False,\n\u0026quot;queues\u0026quot;: False,\n\u0026quot;http_bodies\u0026quot;: [],\n\u0026quot;cookies\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n\u0026quot;http_headers\u0026quot;: {\n\u0026quot;request\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n},\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.70.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew integration:\u003c/strong\u003e Mistral AI (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/4733\"\u003e#4733\u003c/a\u003e) by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdd the Mistral integration to your \u003ccode\u003esentry_sdk.init\u003c/code\u003e call:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.mistral import MistralIntegration\n\u003cp\u003esentry_sdk.init(\ndsn=\u0026quot;...\u0026quot;,\ntraces_sample_rate=1.0,\nintegrations=[\nMistralIntegration(),\n]\n)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew option:\u003c/strong\u003e A fine-grained way to configure what data should be sent from the SDK.\u003c/p\u003e\n\u003cp\u003eOffers much more flexibility than \u003ccode\u003esend_default_pii\u003c/code\u003e, allowing you to specify what\ndata should be collected. If \u003ccode\u003edata_collection\u003c/code\u003e is defined, it takes precedence over\n\u003ccode\u003esend_default_pii\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"https://docs.sentry.io/platforms/python/configuration/options/#data_collection\"\u003ehttps://docs.sentry.io/platforms/python/configuration/options/#data_collection\u003c/a\u003e\nfor the available configuration options.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\n\u003cp\u003esentry_sdk.init(\ndata_collection={\n\u0026quot;user_info\u0026quot;: False,\n\u0026quot;gen_ai\u0026quot;: {\u0026quot;inputs\u0026quot;: False, \u0026quot;outputs\u0026quot;: False},\n\u0026quot;graphql\u0026quot;: {\u0026quot;document\u0026quot;: False, \u0026quot;variables\u0026quot;: False},\n\u0026quot;database_query_data\u0026quot;: False,\n\u0026quot;queues\u0026quot;: False,\n\u0026quot;http_bodies\u0026quot;: [],\n\u0026quot;cookies\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n\u0026quot;http_headers\u0026quot;: {\n\u0026quot;request\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1eb7df52d9420ce7dc7ce38d0d02cc397540c890\"\u003e\u003ccode\u003e1eb7df5\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/92fd42bcd0c83d2ff95c48b1dc09b4efda6143b9\"\u003e\u003ccode\u003e92fd42b\u003c/code\u003e\u003c/a\u003e release: 2.70.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d99edef02fe7dca1dafe6aa2335a4c87833da8b4\"\u003e\u003ccode\u003ed99edef\u003c/code\u003e\u003c/a\u003e ref(data-collection): Promote \u003ccode\u003edata_collection\u003c/code\u003e from \u003ccode\u003e_experiments\u003c/code\u003e o top-lev...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/045d2c1c52dec953bbf6762968fb100f634e1baa\"\u003e\u003ccode\u003e045d2c1\u003c/code\u003e\u003c/a\u003e test: Close client on teardown (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7562\"\u003e#7562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/b454d7dfc301d2a4b472da527b31782fc8d036bb\"\u003e\u003ccode\u003eb454d7d\u003c/code\u003e\u003c/a\u003e feat(mistral): Record \u003ccode\u003egen_ai.output.messages\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7549\"\u003e#7549\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/bdfd68c8d8b21c61773398774c5d391d2fc7ae05\"\u003e\u003ccode\u003ebdfd68c\u003c/code\u003e\u003c/a\u003e feat(mistral): Record \u003ccode\u003egen_ai.input.messages\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7548\"\u003e#7548\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/ea08f64cfdcef03c5aa542364ff188cd95e301e5\"\u003e\u003ccode\u003eea08f64\u003c/code\u003e\u003c/a\u003e feat(mistral): Record \u003ccode\u003egen_ai.system_instructions\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7547\"\u003e#7547\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/dbddd0ebe69a21bfc87068113c354b0fc3181bf0\"\u003e\u003ccode\u003edbddd0e\u003c/code\u003e\u003c/a\u003e feat(mistral): Record request parameters (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7531\"\u003e#7531\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/9342968d78566e1a448b77184e976cc1d7d9d280\"\u003e\u003ccode\u003e9342968\u003c/code\u003e\u003c/a\u003e feat(mistral): Record token usage (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7529\"\u003e#7529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/988fd0e559a420dd9ace6cfaf001fd561e1c1876\"\u003e\u003ccode\u003e988fd0e\u003c/code\u003e\u003c/a\u003e feat(mistral): Add integration with \u003ccode\u003eChat.complete\u003c/code\u003e and \u003ccode\u003eChat.complete_async\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.70.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.51 to 2.0.54\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.54\u003c/h1\u003e\n\u003cp\u003eReleased: September 15, 2026\u003c/p\u003e\n\u003ch2\u003eplatform\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [change]\u003c/strong\u003e Binary wheels are no longer built for Python 3.7.  PyPI now rejects wheel\nfiles whose filename does not begin with the normalized project name, and\nthe packaging tools that can be installed on Python 3.7 do not produce\nsuch a filename.  As a result, SQLAlchemy 2.0.44 was the last release to\npublish Python 3.7 wheels to PyPI, and releases 2.0.45 and later have\nbeen available on Python 3.7 only as a source distribution; the wheel\nbuilds for Python 3.7 are now removed.  Python 3.7 remains supported by\nthe 2.0 series.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [bug]\u003c/strong\u003e Fixed issue where the Cython extensions were compiled without the\n\u003ccode\u003efreethreading_compatible\u003c/code\u003e directive, so that they did not declare\nthemselves as safe to run without the GIL.  On a free-threaded Python\ninterpreter such as Python 3.13t or 3.14t, importing SQLAlchemy would\ncause the interpreter to re-enable the GIL, emitting a\n\u003ccode\u003eRuntimeWarning\u003c/code\u003e.  The directive is now set when building for Python\n3.13 and above, and a test has been added which confirms that importing\nSQLAlchemy on a free-threaded build does not enable the GIL.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13592\"\u003e#13592\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.0.53\u003c/h1\u003e\n\u003cp\u003eReleased: September 14, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where an expression passed to \u003ccode\u003e_orm.with_expression()\u003c/code\u003e\nthat embedded a \u003ccode\u003e_sql.select()\u003c/code\u003e, such as a correlated\n\u003ccode\u003e_sql.exists()\u003c/code\u003e, would fail to populate the attribute correctly on\nthe second and subsequent executions of an otherwise identical\nstatement, when the \u003ccode\u003e_orm.query_expression()\u003c/code\u003e attribute was loaded\nby a relationship loader that emits a second query, i.e.\n\u003ccode\u003e_orm.selectinload()\u003c/code\u003e, \u003ccode\u003e_orm.lazyload()\u003c/code\u003e or\n\u003ccode\u003e_orm.immediateload()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13560\"\u003e#13560\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed memory issue where mapped classes, along with their\n\u003ccode\u003eTable\u003c/code\u003e and \u003ccode\u003e_orm.Mapper\u003c/code\u003e objects, would not be garbage\ncollected after the \u003ccode\u003e_orm.registry\u003c/code\u003e in which they were mapped had\nbeen disposed and dereferenced.  The issue would occur for mappings that\nmade use of \u003ccode\u003e_orm.relationship()\u003c/code\u003e together with constructs such as an\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.7.0 to 2.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.8.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eFixed the following security issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe TLS configuration for HTTPS proxies could be ignored or overridden. (High severity, GHSA-8988-9cw3-xx77)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eread_chunked()\u003c/code\u003e could buffer a chunk-size line of unbounded length in memory. (High severity, GHSA-vxq7-64xx-v4gw)\u003c/li\u003e\n\u003cli\u003eChunked Deflate streaming could enter an infinite loop. (Medium severity, GHSA-gh4c-6fx4-qh6g)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!IMPORTANT]\nurllib3 2.8.0 fixes HTTPS proxy TLS configuration being ignored or overridden by destination settings. Configurations relying on that behavior may require changes.\u003c/p\u003e\n\u003cp\u003eConfigure proxy CA certificates and c...\n\n_Description has been truncated_","html_url":"https://github.com/0xSoftBoi/suwappubot/pull/1016","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSoftBoi%2Fsuwappubot/issues/1016","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1016/packages"},{"uuid":"5579444429","node_id":"PR_kwDOPSDfVc8AAAABFEcOHw","number":183,"state":"closed","title":"chore(deps): Bump cryptography from 50.0.0 to 50.0.1 in the uv group","user":"dependabot[bot]","labels":["dependencies","python:uv","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-25T07:12:09.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-25T07:03:50.000Z","updated_at":"2026-09-25T07:12:18.000Z","time_to_close":499,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":"the uv group","ecosystem":"pip"},"body":"Bumps the uv group with 1 update: [cryptography](https://github.com/pyca/cryptography).\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=uv\u0026previous-version=50.0.0\u0026new-version=50.0.1)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/eclipse-opensovd/opensovd-core/pull/183","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-opensovd%2Fopensovd-core/issues/183","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/183/packages"},{"uuid":"5575355027","node_id":"PR_kwDORS3zvs8AAAABFBLZ_Q","number":255,"state":"open","title":"chore(deps): Bump cryptography from 46.0.5 to 50.0.0 in /crm/backend","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-24T22:28:33.000Z","updated_at":"2026-09-24T22:28:42.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":"/crm/backend","ecosystem":"pip"},"body":"Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5 to 50.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.5...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=pip\u0026previous-version=46.0.5\u0026new-version=50.0.0)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/Trollz1004/ANTIGRAVITY/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/Trollz1004/ANTIGRAVITY/pull/255","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trollz1004%2FANTIGRAVITY/issues/255","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/255/packages"},{"uuid":"5545389582","node_id":"PR_kwDOQfogds8AAAABEpk0uQ","number":521,"state":"open","title":"chore(deps): bump the pip group across 1 directory with 6 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-22T21:20:27.000Z","updated_at":"2026-09-22T21:22:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip","update_count":6,"packages":[{"name":"anyio","old_version":"4.12.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"cryptography","old_version":"48.0.1","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"h2","old_version":"4.3.0","new_version":"4.4.1","repository_url":"https://github.com/python-hyper/h2"},{"name":"nltk","old_version":"3.9.4","new_version":"3.10.3","repository_url":"https://github.com/nltk/nltk"},{"name":"pyasn1","old_version":"0.6.3","new_version":"0.6.4","repository_url":"https://github.com/pyasn1/pyasn1"},{"name":"setuptools","old_version":"80.9.0","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 6 updates in the /password_manager directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.0` | `4.14.2` |\n| [cryptography](https://github.com/pyca/cryptography) | `48.0.1` | `50.0.0` |\n| [h2](https://github.com/python-hyper/h2) | `4.3.0` | `4.4.1` |\n| [nltk](https://github.com/nltk/nltk) | `3.9.4` | `3.10.3` |\n| [pyasn1](https://github.com/pyasn1/pyasn1) | `0.6.3` | `0.6.4` |\n| [setuptools](https://github.com/pypa/setuptools) | `80.9.0` | `83.0.0` |\n\n\nUpdates `anyio` from 4.12.0 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for Python 3.15\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an asynchronous implementation of the \u003ccode\u003eitertools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/998\"\u003e#998\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003elocal_port\u003c/code\u003e parameter to \u003ccode\u003econnect_tcp()\u003c/code\u003e to allow binding to a specific local port before connecting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1067\"\u003e#1067\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nullwiz\"\u003e\u003ccode\u003e@​nullwiz\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for custom capacity limiters in async path and file I/O functions and classes\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecreate_task()\u003c/code\u003e task group method for easier asyncio migration (returns a \u003ccode\u003eTaskHandle\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1098\"\u003e#1098\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an option for \u003ccode\u003eTaskGroup.start()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e (which then contains the start value in the \u003ccode\u003estart_value\u003c/code\u003e property)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecancel()\u003c/code\u003e convenience method to \u003ccode\u003eTaskGroup\u003c/code\u003e as a shortcut for cancelling the task group's cancel scope\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved the error message when a known backend is not installed to suggest the install command (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1115\"\u003e#1115\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eanyio.Path\u003c/code\u003e to preserve subclass types by returning \u003ccode\u003eSelf\u003c/code\u003e in methods that return path objects (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1130\"\u003e#1130\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the parameter type annotation in \u003ccode\u003eanyio.Path.write_bytes()\u003c/code\u003e to accept any \u003ccode\u003eReadableBuffer\u003c/code\u003e, thus allowing it to accept \u003ccode\u003ebytearray\u003c/code\u003e and \u003ccode\u003ememoryview\u003c/code\u003e to match \u003ccode\u003epathlib.Path.write_bytes()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1135\"\u003e#1135\u003c/a\u003e; PR by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several type annotations to only accept callables returning coroutine-like objects instead of arbitrary awaitables:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis reverts an earlier change from v3.7.0 which was made in error. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1153\"\u003e#1153\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eanyio.run\u003c/code\u003e to support callables returning arbitrary awaitables at runtime on all backends. Previously, this only worked on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1171\"\u003e#1171\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several classes (and their subclasses) to have \u003ccode\u003e__slots__\u003c/code\u003e (with \u003ccode\u003e__weakref__\u003c/code\u003e):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eanyio.CancelScope\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.12.0...4.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 48.0.1 to 50.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/48.0.1...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `h2` from 4.3.0 to 4.4.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-hyper/h2/blob/master/CHANGELOG.rst\"\u003eh2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.4.1 (2026-08-03)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance improvement: remove consumed frames in-place from data buffer.\u003c/li\u003e\n\u003cli\u003eReject duplicate Host headers in request headers. Thanks to Sunand Mohan for the report.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.4.0 (2026-07-23)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Incompatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 has been removed.\u003c/li\u003e\n\u003cli\u003eSupport for PyPy 3.9 has been removed.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStream.end_stream()\u003c/code\u003e now raises \u003ccode\u003eNoSuchStreamError\u003c/code\u003e or \u003ccode\u003eStreamClosedError\u003c/code\u003e exceptions, instead of a generic \u003ccode\u003eKeyError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDuplicate \u003ccode\u003econtent-length\u003c/code\u003e headers with different values now raise \u003ccode\u003eProtocolError\u003c/code\u003e.\nPreviously, the first \u003ccode\u003econtent-length\u003c/code\u003e header was accepted and later conflicting values were ignored. Thanks to Harshal Parekh for the report.\u003c/li\u003e\n\u003cli\u003eParse \u003ccode\u003econtent-length\u003c/code\u003e headers according to RFC9110 grammar for numbers (1*DIGIT). Thanks to Arkadiusz Marta for the report.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebackfill from v4.3.0\u003c/strong\u003e Convert emitted events into Python \u003ccode\u003edataclass\u003c/code\u003e, which introduces new constructors with required arguments.\nInstantiating these events without arguments, as previously commonly used API pattern, will no longer work.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Compatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 has been added.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH2Connection.receive_data\u003c/code\u003e now accepts any byte-like object that\nimplements the buffer protocol, such as \u003ccode\u003ebytes\u003c/code\u003e, \u003ccode\u003ebytearray\u003c/code\u003e, and\n\u003ccode\u003ememoryview\u003c/code\u003e. Existing \u003ccode\u003ebytes\u003c/code\u003e callers are unaffected.\u003c/li\u003e\n\u003cli\u003eAlign CONNECT pseudo-header validation with RFC 9113 s8.3 and RFC 8441 s4.\nOrdinary CONNECT now requires \u003ccode\u003e:method=CONNECT\u003c/code\u003e and \u003ccode\u003e:authority\u003c/code\u003e, and\nforbids \u003ccode\u003e:scheme\u003c/code\u003e/\u003ccode\u003e:path\u003c/code\u003e. Extended CONNECT (e.g., WebSocket) requires\n\u003ccode\u003e:scheme\u003c/code\u003e, \u003ccode\u003e:path\u003c/code\u003e, \u003ccode\u003e:authority\u003c/code\u003e plus \u003ccode\u003e:protocol\u003c/code\u003e. (PR \u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incorrect substring matching of secure header in \u003ccode\u003ecookie\u003c/code\u003e and \u003ccode\u003e:method\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix to allow sending 0 bytes on a stream even if the flow control window is negative.\u003c/li\u003e\n\u003cli\u003eReject non-zero \u003ccode\u003eSETTINGS_ENABLE_PUSH\u003c/code\u003e values received from servers.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/bc239af1d1b85bc70482804f30a0e0e587d90a08\"\u003e\u003ccode\u003ebc239af\u003c/code\u003e\u003c/a\u003e v4.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/92b925ed1b1817c82db32893503f74f47fcf4452\"\u003e\u003ccode\u003e92b925e\u003c/code\u003e\u003c/a\u003e add test for duplicate host headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/292a40829feefda98c8509dcdbbb4a57af9bd6a6\"\u003e\u003ccode\u003e292a408\u003c/code\u003e\u003c/a\u003e reject duplicate Host headers in request headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/04d3b87cbc1db020d28c7cfb44fe194558efbdde\"\u003e\u003ccode\u003e04d3b87\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/439b970d0fa19891fa81068907de97dfa3a07c3a\"\u003e\u003ccode\u003e439b970\u003c/code\u003e\u003c/a\u003e prepare for next release cycle\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/9a7ff7430df669fa8e90b6121f3cc1ed64d1115a\"\u003e\u003ccode\u003e9a7ff74\u003c/code\u003e\u003c/a\u003e performance: remove consumed frames in place from data buffer (\u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1321\"\u003e#1321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/6cce763997eca5b826f3e435a611b7a7fc73f633\"\u003e\u003ccode\u003e6cce763\u003c/code\u003e\u003c/a\u003e v4.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/dfafda3b0cd96455b45d1785ef1ebc6968bba5cf\"\u003e\u003ccode\u003edfafda3\u003c/code\u003e\u003c/a\u003e Bump pytest from 8.4.2 to 9.0.3 (\u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1320\"\u003e#1320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/b45207cedf9fabe2c77bb3c1c10f403a610599a0\"\u003e\u003ccode\u003eb45207c\u003c/code\u003e\u003c/a\u003e dependencies and packaging++\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/c40145f69c5473850849fe96301ac0416b1afea6\"\u003e\u003ccode\u003ec40145f\u003c/code\u003e\u003c/a\u003e parse \u003ccode\u003econtent-length\u003c/code\u003e headers according to RFC9110 grammar for numbers (1*DI...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-hyper/h2/compare/v4.3.0...v4.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nltk` from 3.9.4 to 3.10.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nltk/nltk/releases\"\u003enltk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.10.3\u003c/h2\u003e\n\u003cp\u003eVersion 3.10.3 2026-08-12\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output\u003c/li\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories\u003c/li\u003e\n\u003cli\u003eHarden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + shared-temp squat, lock the cluster with a living audit (CWE-22/59/377)\u003c/li\u003e\n\u003cli\u003eExtend algorithmic-complexity DoS hardening: repo-wide sweep + two-string distances (CWE-407/CWE-400)\u003c/li\u003e\n\u003cli\u003eBound unbounded-work DoS in parsers and grammar transforms (CWE-407/674/835)\u003c/li\u003e\n\u003cli\u003efix(security): sandbox MaltParser's Java execution (CVE-2026-12252, CVE-2026-12841)\u003c/li\u003e\n\u003cli\u003efix(security): trust the system temp dir only when it is private (CWE-377/CWE-378)\u003c/li\u003e\n\u003cli\u003efix(security): validate corpus-reader roots against the data sandbox (CWE-73)\u003c/li\u003e\n\u003cli\u003efix(security): validate per-call java() options and replace the -XX:/-D allowlist with a minimal one (CWE-88)\u003c/li\u003e\n\u003cli\u003eAdditional security hardening (CWE-407, CWE-426, CWE-427, CWE-502, CWE-59, CWE-776, CWE-918)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.3: Mohammad Favas S, leduckhuong, Ziyu Lin, dougtrainer28-cmyk, Chaitanya Kadian, 0xRenSec, Arpit Jain, Jace, nguyencanhthuong, Liling Tan, medimedi, Eric Kafe.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories by \u003ca href=\"https://github.com/ekaf\"\u003e\u003ccode\u003e@​ekaf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3743\"\u003enltk/nltk#3743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output by \u003ca href=\"https://github.com/medisean\"\u003e\u003ccode\u003e@​medisean\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3741\"\u003enltk/nltk#3741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: sandboxed-open guard + stabilize security tests across platforms/pythons (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3740\"\u003e#3740\u003c/a\u003e) by \u003ca href=\"https://github.com/alvations\"\u003e\u003ccode\u003e@​alvations\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3744\"\u003enltk/nltk#3744\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 3.10.3 by \u003ca href=\"https://github.com/ekaf\"\u003e\u003ccode\u003e@​ekaf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3745\"\u003enltk/nltk#3745\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/medisean\"\u003e\u003ccode\u003e@​medisean\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3741\"\u003enltk/nltk#3741\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/nltk/nltk/compare/v3.10.2...v3.10.3\"\u003ehttps://github.com/nltk/nltk/compare/v3.10.2...v3.10.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev3.10.3-rc1\u003c/h2\u003e\n\u003cp\u003eVersion 3.10.3 2026-08-12\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output\u003c/li\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories\u003c/li\u003e\n\u003cli\u003eHarden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + shared-temp squat, lock the cluster with a living audit (CWE-22/59/377)\u003c/li\u003e\n\u003cli\u003eExtend algorithmic-complexity DoS hardening: repo-wide sweep + two-string distances (CWE-407/CWE-400)\u003c/li\u003e\n\u003cli\u003eBound unbounded-work DoS in parsers and grammar transforms (CWE-407/674/835)\u003c/li\u003e\n\u003cli\u003efix(security): sandbox MaltParser's Java execution (CVE-2026-12252, CVE-2026-12841)\u003c/li\u003e\n\u003cli\u003efix(security): trust the system temp dir only when it is private (CWE-377/CWE-378)\u003c/li\u003e\n\u003cli\u003efix(security): validate corpus-reader roots against the data sandbox (CWE-73)\u003c/li\u003e\n\u003cli\u003efix(security): validate per-call java() options and replace the -XX:/-D allowlist with a minimal one (CWE-88)\u003c/li\u003e\n\u003cli\u003eAdditional security hardening (CWE-407, CWE-426, CWE-427, CWE-502, CWE-59, CWE-776, CWE-918)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.3: Mohammad Favas S, leduckhuong, Ziyu Lin, dougtrainer28-cmyk, Chaitanya Kadian, 0xRenSec, Arpit Jain, Jace, nguyencanhthuong, Liling Tan, medimedi, Eric Kafe.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories by \u003ca href=\"https://github.com/ekaf\"\u003e\u003ccode\u003e@​ekaf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3743\"\u003enltk/nltk#3743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output by \u003ca href=\"https://github.com/medisean\"\u003e\u003ccode\u003e@​medisean\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3741\"\u003enltk/nltk#3741\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nltk/nltk/blob/develop/ChangeLog\"\u003enltk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 3.10.3 2026-08-12\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output\u003c/li\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories\u003c/li\u003e\n\u003cli\u003eHarden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + shared-temp squat, lock the cluster with a living audit (CWE-22/59/377)\u003c/li\u003e\n\u003cli\u003eExtend algorithmic-complexity DoS hardening: repo-wide sweep + two-string distances (CWE-407/CWE-400)\u003c/li\u003e\n\u003cli\u003eBound unbounded-work DoS in parsers and grammar transforms (CWE-407/674/835)\u003c/li\u003e\n\u003cli\u003efix(security): sandbox MaltParser's Java execution (CVE-2026-12252, CVE-2026-12841)\u003c/li\u003e\n\u003cli\u003efix(security): trust the system temp dir only when it is private (CWE-377/CWE-378)\u003c/li\u003e\n\u003cli\u003efix(security): validate corpus-reader roots against the data sandbox (CWE-73)\u003c/li\u003e\n\u003cli\u003efix(security): validate per-call java() options and replace the -XX:/-D allowlist with a minimal one (CWE-88)\u003c/li\u003e\n\u003cli\u003eAdditional security hardening (CWE-407, CWE-426, CWE-427, CWE-502, CWE-59, CWE-776, CWE-918)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.3: Mohammad Favas S, leduckhuong, Ziyu Lin, dougtrainer28-cmyk, Chaitanya Kadian, 0xRenSec, Arpit Jain, Jace, nguyencanhthuong, Liling Tan, medimedi, Eric Kafe.\u003c/p\u003e\n\u003cp\u003eVersion 3.10.2 2026-08-05\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemove inisec.py and document PYTHONSAFEPATH instead\u003c/li\u003e\n\u003cli\u003eSkip draft step in release workflow\u003c/li\u003e\n\u003cli\u003eFix symlink escape in FramenetCorpusReader (CWE-59)\u003c/li\u003e\n\u003cli\u003eGuard tempfile.gettempdir() when building pathsec allowed roots\u003c/li\u003e\n\u003cli\u003eadd tests for transitive_closure\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.2:\nLitesh Ghute, Eric Kafe, Evan Kiefer, tarann26 and Rav Singh Chandan\u003c/p\u003e\n\u003cp\u003eVersion 3.10.1 2026-07-29\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eExpand \u003ccode\u003e~\u003c/code\u003e in env-var paths\u003c/li\u003e\n\u003cli\u003eValidate types after WordNet app pickle deserialization\u003c/li\u003e\n\u003cli\u003eFix uncontrolled search path in HunposTagger\u003c/li\u003e\n\u003cli\u003eUse exact thirds in \u003ccode\u003emasi_distance\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAvoid retaining bllip import exceptions\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eword_tokenize\u003c/code\u003e: pad opening single quote before multi-letter words.\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003eTree.pformat_latex_forest\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePrevent module hijacking in inline imports.\u003c/li\u003e\n\u003cli\u003eFix ReDoS in TweetTokenizer URL and email regexes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.1:\nAbhinav, Litesh Ghute, Eric Kafe, Eryk Kaźmierczak, Selim C.,\nMuhtasim Munif Fahim, Triniti K., and Tom Y. Mitich.\u003c/p\u003e\n\u003cp\u003eVersion 3.10.0 2026-06-11\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce the stricter \u003ccode\u003enltk.pathsec\u003c/code\u003e security policy by default\u003c/li\u003e\n\u003cli\u003eDocument the new security model and migration guidance\u003c/li\u003e\n\u003cli\u003eHarden resource loading against path traversal and SSRF/DNS-rebinding\u003c/li\u003e\n\u003cli\u003eHarden downloader path handling and block XML entity expansion\u003c/li\u003e\n\u003cli\u003eClose remaining corpus-reader security edge cases\u003c/li\u003e\n\u003cli\u003eReplace unsafe \u003ccode\u003eexec()\u003c/code\u003e usage in the utility CLI\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/303f6e2ba8e4548a5f54fd65d86bb5c9a949f1db\"\u003e\u003ccode\u003e303f6e2\u003c/code\u003e\u003c/a\u003e Prepare release 3.10.3 (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3745\"\u003e#3745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/cf2aaacc3d99533a73e86709c1d839966ea25e17\"\u003e\u003ccode\u003ecf2aaac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3744\"\u003e#3744\u003c/a\u003e from alvations/ci-guard-open\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/6cd8320cee54d4fc271610e744f71d44cb367dda\"\u003e\u003ccode\u003e6cd8320\u003c/code\u003e\u003c/a\u003e test: robustness on Python 3.14 / 3.14t CI (UnicodeDecodeError + timing flake)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/e965330e017d8180843c4a12b91bcfadd5d4e489\"\u003e\u003ccode\u003ee965330\u003c/code\u003e\u003c/a\u003e fix: perceptron save_to_json breaks on Windows (os.open can't fd-open a direc...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/df1bb4c5742c8943205e4564a7c03e1992cf4f4d\"\u003e\u003ccode\u003edf1bb4c\u003c/code\u003e\u003c/a\u003e test: make pathsec security tests platform-independent (fix Linux/Windows CI)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/0e5c7be3793cf826039a2048846138e58f864553\"\u003e\u003ccode\u003e0e5c7be\u003c/code\u003e\u003c/a\u003e ci: guard against un-sandboxed open() in sandbox-sensitive modules (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3740\"\u003e#3740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/50178263a0787a7850e66f3e85775338669f101a\"\u003e\u003ccode\u003e5017826\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/40d0f062649022f7f36afed4a2ca3980f574aae9\"\u003e\u003ccode\u003e40d0f06\u003c/code\u003e\u003c/a\u003e Triple-check hardening: perceptron TOCTOU squat, pathsec fd-leak, bcp47 entit...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/483c5fe650542ceaa2b45e8565f72e878834376f\"\u003e\u003ccode\u003e483c5fe\u003c/code\u003e\u003c/a\u003e Harden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + s...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/722778fd9ff987da3cf5ff6e442ac43fed1637b0\"\u003e\u003ccode\u003e722778f\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nltk/nltk/compare/3.9.4...v3.10.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyasn1` from 0.6.3 to 0.6.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyasn1/pyasn1/releases\"\u003epyasn1's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 0.6.4\u003c/h2\u003e\n\u003cp\u003eThis is a security release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-59885 (GHSA-8ppf-4f7h-5ppj): Fixed quadratic time complexity in the OBJECT IDENTIFIER and RELATIVE-OID decoders. A small crafted substrate encoding many arcs could consume excessive CPU.\u003c/li\u003e\n\u003cli\u003eCVE-2026-59884 (GHSA-m4p7-r5rc-7g4j): Limited BER long-form tag IDs to 20 octets (140 bits). Unbounded tag IDs allowed a crafted substrate to consume excessive CPU and memory.\u003c/li\u003e\n\u003cli\u003eCVE-2026-59886 (GHSA-hm4w-wwcw-mr6r): Fixed excessive memory and CPU consumption in \u003ccode\u003eReal.__float__()\u003c/code\u003e for values with large base-10 exponents.\u003c/li\u003e\n\u003cli\u003ePinned PyPI publish GitHub Action to an immutable commit.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAll changes are noted in the \u003ca href=\"https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst\"\u003eCHANGELOG\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst\"\u003epyasn1's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRevision 0.6.4, released 08-07-2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-59885 (GHSA-8ppf-4f7h-5ppj): Fixed quadratic time\ncomplexity in the OBJECT IDENTIFIER and RELATIVE-OID decoders.\nA small crafted substrate encoding many arcs could consume\nexcessive CPU. Arcs are now accumulated in linear time; decoded\nvalues are unchanged (thanks for reporting, tynus2)\u003c/li\u003e\n\u003cli\u003eCVE-2026-59884 (GHSA-m4p7-r5rc-7g4j): Limited BER long-form tag\nIDs to 20 octets (140 bits), matching the OID arc limit introduced\nin 0.6.2. Unbounded tag IDs allowed a crafted substrate to consume\nexcessive CPU and memory; longer tag IDs are now rejected with\nPyAsn1Error. Also fixed Tag and TagSet repr() failing on huge tag\n(thanks for reporting, mikeappsec)\nIDs due to the integer-to-string conversion limit (Python 3.11+)\u003c/li\u003e\n\u003cli\u003eCVE-2026-59886 (GHSA-hm4w-wwcw-mr6r): Fixed excessive memory and\nCPU consumption in Real.\u003cstrong\u003efloat\u003c/strong\u003e() for values with large base-10\nexponents. Conversion no longer materializes huge intermediate\nintegers; values too large to represent as a Python float raise\nOverflowError promptly, and prettyPrint() renders them as\n'\u003c!-- raw HTML omitted --\u003e' as before. Also fixed base-10 mantissa normalization\nto use exact integer arithmetic; mantissas larger than 2**53\ncould previously lose precision through float division\n(thanks for reporting, gvozdila)\u003c/li\u003e\n\u003cli\u003ePinned PyPI publish GitHub Action to an immutable commit\n[pr \u003ca href=\"https://redirect.github.com/pyasn1/pyasn1/issues/113\"\u003e#113\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/pyasn1/pyasn1/pull/113\"\u003epyasn1/pyasn1#113\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/72e4803405816c371ed3b2cb4be181c47f038406\"\u003e\u003ccode\u003e72e4803\u003c/code\u003e\u003c/a\u003e Prepare release 0.6.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/0c19eeb853731db1c717ff125ea001a1e558332d\"\u003e\u003ccode\u003e0c19eeb\u003c/code\u003e\u003c/a\u003e Pin PyPI publish action to immutable commit (\u003ca href=\"https://redirect.github.com/pyasn1/pyasn1/issues/113\"\u003e#113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/45bdb19eb7df4b3780fe9c912c63e99bffc39dd9\"\u003e\u003ccode\u003e45bdb19\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/628e36ecbb5277a3f01572ce418ef54271b165a5\"\u003e\u003ccode\u003e628e36e\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/e60c691cb91addb8fcefa2f537e85ede6fb1e886\"\u003e\u003ccode\u003ee60c691\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyasn1/pyasn1/compare/v0.6.3...v0.6.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `setuptools` from 80.9.0 to 83.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev83.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.10 or later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eMANIFEST.in\u003c/code\u003e matching (via \u003ccode\u003eFileList\u003c/code\u003e) is now insensitive to Unicode\nnormalization form. A pattern authored in one form (e.g. NFC, as typically\nsaved by editors) now matches a file whose name is stored on disk in another\n(e.g. NFD, as produced by macOS APFS/HFS+). Previously an \u003ccode\u003eexclude\u003c/code\u003e,\n\u003ccode\u003eglobal-exclude\u003c/code\u003e, \u003ccode\u003erecursive-exclude\u003c/code\u003e, or \u003ccode\u003eprune\u003c/code\u003e rule could silently\nfail to drop a non-ASCII-named file from the source distribution, publishing\nit despite the exclusion -- see GHSA-h35f-9h28-mq5c.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epypa/distutils#334\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev82.0.1\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the loading of \u003ccode\u003elauncher manifest.xml\u003c/code\u003e file. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5047\"\u003e#5047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplaced deprecated \u003ccode\u003ejson.__version__\u003c/code\u003e with fixture in tests. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5186\"\u003e#5186\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd advice about how to improve predictability when installing sdists. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5168\"\u003e#5168\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4941\"\u003e#4941\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ev82.0.0\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/6519f728c6f23c992df81a5691ef7655184a20eb\"\u003e\u003ccode\u003e6519f72\u003c/code\u003e\u003c/a\u003e Bump version: 82.0.1 → 83.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/d1151b125b29a6ee1c7db860f7ee6c365d525b5f\"\u003e\u003ccode\u003ed1151b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5250\"\u003e#5250\u003c/a\u003e from pypa/feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2df31e6a741b0fe775969618fe6a3a3d032e900\"\u003e\u003ccode\u003ea2df31e\u003c/code\u003e\u003c/a\u003e Capture removal of dry_run parameter in changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/00144dc3fb6d023fd81cdc26c380a012b084df9b\"\u003e\u003ccode\u003e00144dc\u003c/code\u003e\u003c/a\u003e Moved newsfragment to the release where it occurred.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a4a5a2b160357be77626aa077ddd1d8ee53be50f\"\u003e\u003ccode\u003ea4a5a2b\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/77470c23c35031c9e37d7512694ac5ca52bfcaac\"\u003e\u003ccode\u003e77470c2\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/pypa/distutils\"\u003ehttps://github.com/pypa/distutils\u003c/a\u003e into feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/3c43897420f25a1be1afe6eaa905d056009cc736\"\u003e\u003ccode\u003e3c43897\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5247\"\u003e#5247\u003c/a\u003e from pypa/copilot/fix-pypy-version-issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/bb6ea66b4bd01cb35d7c68a1bc61b96d59190269\"\u003e\u003ccode\u003ebb6ea66\u003c/code\u003e\u003c/a\u003e Bump PyPy from 3.10 to 3.11 in CI workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2bc3aca2f55eb9b93ea633e58ba68170ce14451\"\u003e\u003ccode\u003ea2bc3ac\u003c/code\u003e\u003c/a\u003e Fix broken intersphinx reference to build's installation docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/2d6a739c64cfedc65e1f635af7b52340aac8d99b\"\u003e\u003ccode\u003e2d6a739\u003c/code\u003e\u003c/a\u003e Use stacked parametrize decorators instead of itertools.product\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/setuptools/compare/v80.9.0...v83.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/Rajarshi1-source/Modern_Password_Manager01/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/Rajarshi1-source/Modern_Password_Manager01/pull/521","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rajarshi1-source%2FModern_Password_Manager01/issues/521","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/521/packages"},{"uuid":"5536027477","node_id":"PR_kwDONC03Hc8AAAABEiBuuw","number":4260,"state":"open","title":"build(deps): bump the python group with 85 updates","user":"dependabot[bot]","labels":["backport:skip","dependencies","python:uv","first-time-contributor"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-22T06:23:30.000Z","updated_at":"2026-09-22T06:33:34.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":85,"packages":[{"name":"pin-pink","old_version":"4.3.0","new_version":"4.4.0","repository_url":"https://github.com/stephane-caron/pink"},{"name":"reactivex","old_version":"4.1.0","new_version":"5.1.0","repository_url":"https://github.com/ReactiveX/RxPY"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"packaging","old_version":"25.0","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"filelock","old_version":"3.23.0","new_version":"3.32.6","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"plum-dispatch","old_version":"2.5.7","new_version":"2.10.1","repository_url":"https://github.com/beartype/plum"},{"name":"gitpython","old_version":"3.1.52","new_version":"3.1.62","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"opencv-contrib-python","old_version":"4.13.0.92","new_version":"5.0.0.93","repository_url":"https://github.com/opencv/opencv-python"},{"name":"pydantic-settings","old_version":"2.12.0","new_version":"2.15.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"textual","old_version":"3.7.1","new_version":"8.2.8","repository_url":"https://github.com/Textualize/textual"},{"name":"terminaltexteffects","old_version":"0.12.2","new_version":"0.15.0","repository_url":"https://github.com/ChrisBuilds/terminaltexteffects"},{"name":"typer","old_version":"0.23.1","new_version":"0.27.2","repository_url":"https://github.com/fastapi/typer"},{"name":"ipython","old_version":"8.38.0","new_version":"8.39.0","repository_url":"https://github.com/ipython/ipython"},{"name":"plotext","old_version":"5.3.2","new_version":"6.1.0","repository_url":"https://github.com/piccolomo/plotext"},{"name":"numba","old_version":"0.63.1","new_version":"0.67.0","repository_url":"https://github.com/numba/numba"},{"name":"llvmlite","old_version":"0.46.0","new_version":"0.49.0","repository_url":"https://github.com/numba/llvmlite"},{"name":"rerun-sdk","old_version":"0.32.0","new_version":"0.37.2","repository_url":"https://github.com/rerun-io/rerun"},{"name":"protobuf","old_version":"6.33.5","new_version":"7.36.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"websocket-client","old_version":"1.9.0","new_version":"1.9.2","repository_url":"https://github.com/websocket-client/websocket-client"},{"name":"ipykernel","old_version":"7.2.0","new_version":"7.3.0","repository_url":"https://github.com/ipython/ipykernel"},{"name":"open-clip-torch","old_version":"3.2.0","new_version":"3.3.0","repository_url":"https://github.com/mlfoundations/open_clip"},{"name":"gdown","old_version":"6.0.0","new_version":"6.2.0","repository_url":"https://github.com/wkentaro/gdown"},{"name":"tensorboard","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/tensorflow/tensorboard"},{"name":"portal","old_version":"3.7.4","new_version":"3.8.1","repository_url":"https://github.com/danijar/portal"},{"name":"bosdyn-client","old_version":"5.1.4","new_version":"5.2.0","repository_url":"https://github.com/boston-dynamics/spot-sdk"},{"name":"bosdyn-api","old_version":"5.1.4","new_version":"5.2.0","repository_url":"https://github.com/boston-dynamics/spot-sdk"},{"name":"bosdyn-core","old_version":"5.1.4","new_version":"5.2.0","repository_url":"https://github.com/boston-dynamics/spot-sdk"},{"name":"pyarrow","old_version":"23.0.0","new_version":"25.0.1","repository_url":"https://github.com/apache/arrow"},{"name":"langchain-core","old_version":"1.3.3","new_version":"1.6.3","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.1.6","new_version":"1.6.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-huggingface","old_version":"1.2.0","new_version":"1.2.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-ollama","old_version":"1.0.1","new_version":"1.1.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"openai","old_version":"2.21.0","new_version":"3.14.0","repository_url":"https://github.com/openai/openai-python"},{"name":"sounddevice","old_version":"0.5.5","new_version":"0.5.6","repository_url":"https://github.com/spatialaudio/python-sounddevice"},{"name":"fastapi","old_version":"0.129.0","new_version":"0.141.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"python-socketio","old_version":"5.16.1","new_version":"5.17.0","repository_url":"https://github.com/sponsors/miguelgrinberg"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"sse-starlette","old_version":"3.2.0","new_version":"3.4.11","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"uvicorn","old_version":"0.40.0","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"soundfile","old_version":"0.13.1","new_version":"0.14.0","repository_url":"https://github.com/bastibe/python-soundfile"},{"name":"timm","old_version":"1.0.24","new_version":"1.0.29","repository_url":"https://github.com/huggingface/pytorch-image-models"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"lap","old_version":"0.5.12","new_version":"0.5.13","repository_url":"https://github.com/gatagat/lap"},{"name":"transformers","old_version":"4.53.3","new_version":"5.17.0"},{"name":"moondream","old_version":"0.2.0","new_version":"2.3.0","repository_url":"https://github.com/vikhyat/moondream"},{"name":"omegaconf","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/omry/omegaconf"},{"name":"hydra-core","old_version":"1.3.2","new_version":"1.3.7","repository_url":"https://github.com/facebookresearch/hydra"},{"name":"unitree-webrtc-connect","old_version":"2.1.2","new_version":"2.2.0","repository_url":"https://github.com/legion1581/unitree_webrtc_connect"},{"name":"cyclonedds","old_version":"0.10.5","new_version":"11.0.1","repository_url":"https://github.com/eclipse-cyclonedds/cyclonedds-python"},{"name":"mcap","old_version":"1.3.1","new_version":"1.4.0","repository_url":"https://github.com/foxglove/mcap"},{"name":"piper-sdk","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/agilexrobotics/piper_sdk"},{"name":"xarm-python-sdk","old_version":"1.17.3","new_version":"1.18.4","repository_url":"https://github.com/xArm-Developer/xArm-Python-SDK"},{"name":"roboplan","old_version":"0.6.0","new_version":"0.6.1","repository_url":"https://github.com/open-planning/roboplan"},{"name":"matplotlib","old_version":"3.10.8","new_version":"3.10.9","repository_url":"https://github.com/matplotlib/matplotlib"},{"name":"cupy-cuda12x","old_version":"13.6.0","new_version":"14.2.0","repository_url":"https://github.com/cupy/cupy"},{"name":"mujoco","old_version":"3.10.0","new_version":"3.13.0","repository_url":"https://github.com/google-deepmind/mujoco"},{"name":"gtsam-extended","old_version":"4.3a1.post1","new_version":"4.3a2.post202608240418"},{"name":"aiortc","old_version":"1.14.0","new_version":"1.15.0","repository_url":"https://github.com/aiortc/aiortc"},{"name":"aiohttp","old_version":"3.14.1","new_version":"3.14.3","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"reportlab","old_version":"4.5.0","new_version":"5.0.1"},{"name":"manifold3d","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/elalish/manifold"},{"name":"coacd","old_version":"1.0.11","new_version":"1.0.14","repository_url":"https://github.com/SarahWeiii/CoACD"},{"name":"usd-core","old_version":"26.5","new_version":"26.8","repository_url":"https://github.com/PixarAnimationStudios/OpenUSD"},{"name":"ruff","old_version":"0.14.3","new_version":"0.16.7","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest","old_version":"8.3.5","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-mock","old_version":"3.15.0","new_version":"3.15.1","repository_url":"https://github.com/pytest-dev/pytest-mock"},{"name":"pytest-env","old_version":"1.1.5","new_version":"1.7.1","repository_url":"https://github.com/pytest-dev/pytest-env"},{"name":"pytest-rerunfailures","old_version":"16.4","new_version":"16.6.1","repository_url":"https://github.com/pytest-dev/pytest-rerunfailures"},{"name":"coverage","old_version":"7.13.4","new_version":"7.16.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"pre-commit","old_version":"4.2.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"py-spy","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/benfred/py-spy"},{"name":"maturin","old_version":"1.13.3","new_version":"1.15.0","repository_url":"https://github.com/pyo3/maturin"},{"name":"python-lsp-server","old_version":"1.14.0","new_version":"1.15.0"},{"name":"python-lsp-ruff","old_version":"2.3.0","new_version":"2.3.4","repository_url":"https://github.com/python-lsp/python-lsp-ruff"},{"name":"playwright","old_version":"1.61.0","new_version":"1.62.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"mypy","old_version":"1.19.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"types-pyyaml","old_version":"6.0.12.20250915","new_version":"6.0.12.20260906","repository_url":"https://github.com/python/typeshed"},{"name":"types-reportlab","old_version":"4.5.0.20260509","new_version":"5.0.0.20260911","repository_url":"https://github.com/python/typeshed"},{"name":"types-requests","old_version":"2.32.4.20260107","new_version":"2.33.0.20260906","repository_url":"https://github.com/python/typeshed"},{"name":"pybind11","old_version":"3.0.4","new_version":"3.1.0","repository_url":"https://github.com/pybind/pybind11"},{"name":"optuna","old_version":"4.9.0","new_version":"5.0.0","repository_url":"https://github.com/optuna/optuna"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 85 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pin-pink](https://github.com/stephane-caron/pink) | `4.3.0` | `4.4.0` |\n| [reactivex](https://github.com/ReactiveX/RxPY) | `4.1.0` | `5.1.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.5` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [packaging](https://github.com/pypa/packaging) | `25.0` | `26.3` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.23.0` | `3.32.6` |\n| [plum-dispatch](https://github.com/beartype/plum) | `2.5.7` | `2.10.1` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.52` | `3.1.62` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [opencv-contrib-python](https://github.com/opencv/opencv-python) | `4.13.0.92` | `5.0.0.93` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.12.0` | `2.15.0` |\n| [textual](https://github.com/Textualize/textual) | `3.7.1` | `8.2.8` |\n| [terminaltexteffects](https://github.com/ChrisBuilds/terminaltexteffects) | `0.12.2` | `0.15.0` |\n| [typer](https://github.com/fastapi/typer) | `0.23.1` | `0.27.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.38.0` | `8.39.0` |\n| [plotext](https://github.com/piccolomo/plotext) | `5.3.2` | `6.1.0` |\n| [numba](https://github.com/numba/numba) | `0.63.1` | `0.67.0` |\n| [llvmlite](https://github.com/numba/llvmlite) | `0.46.0` | `0.49.0` |\n| [rerun-sdk](https://github.com/rerun-io/rerun) | `0.32.0` | `0.37.2` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.5` | `7.36.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.1` |\n| [websocket-client](https://github.com/websocket-client/websocket-client) | `1.9.0` | `1.9.2` |\n| [ipykernel](https://github.com/ipython/ipykernel) | `7.2.0` | `7.3.0` |\n| [open-clip-torch](https://github.com/mlfoundations/open_clip) | `3.2.0` | `3.3.0` |\n| [gdown](https://github.com/wkentaro/gdown) | `6.0.0` | `6.2.0` |\n| [tensorboard](https://github.com/tensorflow/tensorboard) | `2.20.0` | `2.21.0` |\n| [portal](https://github.com/danijar/portal) | `3.7.4` | `3.8.1` |\n| [bosdyn-client](https://github.com/boston-dynamics/spot-sdk) | `5.1.4` | `5.2.0` |\n| [bosdyn-api](https://github.com/boston-dynamics/spot-sdk) | `5.1.4` | `5.2.0` |\n| [bosdyn-core](https://github.com/boston-dynamics/spot-sdk) | `5.1.4` | `5.2.0` |\n| [pyarrow](https://github.com/apache/arrow) | `23.0.0` | `25.0.1` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.3.3` | `1.6.3` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.1.6` | `1.6.2` |\n| [langchain-huggingface](https://github.com/langchain-ai/langchain) | `1.2.0` | `1.2.2` |\n| [langchain-ollama](https://github.com/langchain-ai/langchain) | `1.0.1` | `1.1.0` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [openai](https://github.com/openai/openai-python) | `2.21.0` | `3.14.0` |\n| [sounddevice](https://github.com/spatialaudio/python-sounddevice) | `0.5.5` | `0.5.6` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.129.0` | `0.141.1` |\n| [python-socketio](https://github.com/sponsors/miguelgrinberg) | `5.16.1` | `5.17.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.2.0` | `3.4.11` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.40.0` | `0.53.0` |\n| [soundfile](https://github.com/bastibe/python-soundfile) | `0.13.1` | `0.14.0` |\n| [timm](https://github.com/huggingface/pytorch-image-models) | `1.0.24` | `1.0.29` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [lap](https://github.com/gatagat/lap) | `0.5.12` | `0.5.13` |\n| [transformers[torch]](https://github.com/huggingface/transformers) | `4.53.3` | `5.17.0` |\n| [moondream](https://github.com/vikhyat/moondream) | `0.2.0` | `2.3.0` |\n| [omegaconf](https://github.com/omry/omegaconf) | `2.3.0` | `2.3.1` |\n| [hydra-core](https://github.com/facebookresearch/hydra) | `1.3.2` | `1.3.7` |\n| [unitree-webrtc-connect](https://github.com/legion1581/unitree_webrtc_connect) | `2.1.2` | `2.2.0` |\n| [cyclonedds](https://github.com/eclipse-cyclonedds/cyclonedds-python) | `0.10.5` | `11.0.1` |\n| [mcap](https://github.com/foxglove/mcap) | `1.3.1` | `1.4.0` |\n| [piper-sdk](https://github.com/agilexrobotics/piper_sdk) | `0.6.1` | `0.6.2` |\n| [xarm-python-sdk](https://github.com/xArm-Developer/xArm-Python-SDK) | `1.17.3` | `1.18.4` |\n| [roboplan](https://github.com/open-planning/roboplan) | `0.6.0` | `0.6.1` |\n| [matplotlib](https://github.com/matplotlib/matplotlib) | `3.10.8` | `3.10.9` |\n| [cupy-cuda12x](https://github.com/cupy/cupy) | `13.6.0` | `14.2.0` |\n| [mujoco](https://github.com/google-deepmind/mujoco) | `3.10.0` | `3.13.0` |\n| [gtsam-extended](https://gtsam.org/) | `4.3a1.post1` | `4.3a2.post202608240418` |\n| [aiortc](https://github.com/aiortc/aiortc) | `1.14.0` | `1.15.0` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.1` | `3.14.3` |\n| [reportlab](https://www.reportlab.com/) | `4.5.0` | `5.0.1` |\n| [manifold3d](https://github.com/elalish/manifold) | `3.5.1` | `3.5.3` |\n| [coacd](https://github.com/SarahWeiii/CoACD) | `1.0.11` | `1.0.14` |\n| [usd-core](https://github.com/PixarAnimationStudios/OpenUSD) | `26.5` | `26.8` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.14.3` | `0.16.7` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `9.1.1` |\n| [pytest-mock](https://github.com/pytest-dev/pytest-mock) | `3.15.0` | `3.15.1` |\n| [pytest-env](https://github.com/pytest-dev/pytest-env) | `1.1.5` | `1.7.1` |\n| [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures) | `16.4` | `16.6.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.4` | `7.16.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.2.0` | `4.6.2` |\n| [py-spy](https://github.com/benfred/py-spy) | `0.4.1` | `0.4.2` |\n| [maturin](https://github.com/pyo3/maturin) | `1.13.3` | `1.15.0` |\n| [python-lsp-server[all]](https://github.com/python-lsp/python-lsp-server) | `1.14.0` | `1.15.0` |\n| [python-lsp-ruff](https://github.com/python-lsp/python-lsp-ruff) | `2.3.0` | `2.3.4` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.61.0` | `1.62.0` |\n| [mypy](https://github.com/python/mypy) | `1.19.0` | `2.3.1` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20250915` | `6.0.12.20260906` |\n| [types-reportlab](https://github.com/python/typeshed) | `4.5.0.20260509` | `5.0.0.20260911` |\n| [types-requests](https://github.com/python/typeshed) | `2.32.4.20260107` | `2.33.0.20260906` |\n| [pybind11](https://github.com/pybind/pybind11) | `3.0.4` | `3.1.0` |\n| [optuna](https://github.com/optuna/optuna) | `4.9.0` | `5.0.0` |\n\nUpdates `pin-pink` from 4.3.0 to 4.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/stephane-caron/pink/releases\"\u003epin-pink's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.4.0\u003c/h2\u003e\n\u003cp\u003eThis release allows custom boundaries in velocity limits, allowing bounds on joints that can't have a limit from their URDF model (such as continuous joints).\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit: Allow custom boundaries in \u003ccode\u003eVelocityLimit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Document assumption that we start from a feasible configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pink-kinematics/pink/blob/main/CHANGELOG.md\"\u003epin-pink's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.4.0] - 2026-09-09\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit: Allow custom boundaries in \u003ccode\u003eVelocityLimit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Document assumption that we start from a feasible configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/c14d0ae62f4fb744bbe84e35f9e16f1b680b20c0\"\u003e\u003ccode\u003ec14d0ae\u003c/code\u003e\u003c/a\u003e Release v4.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/5c890570ee42d397f03d1cf8e1b8f4a9797bde97\"\u003e\u003ccode\u003e5c89057\u003c/code\u003e\u003c/a\u003e doc: Add context to configuration limit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/7df4f5a323c423b591ff3c35c7e66df40ff9c197\"\u003e\u003ccode\u003e7df4f5a\u003c/code\u003e\u003c/a\u003e Update link to CBF note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/bfd30c7aec222b66fb36629c20439bedb223d161\"\u003e\u003ccode\u003ebfd30c7\u003c/code\u003e\u003c/a\u003e lint: Apply pylint recos in FrameTask\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/e71a42bd424680b039b782de1392b0b7ec2307d9\"\u003e\u003ccode\u003ee71a42b\u003c/code\u003e\u003c/a\u003e lint: Fix pylint recos in ManipulabilityTask\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/a7ac5aa23b591fc203fbdc636d88c1a9b410375c\"\u003e\u003ccode\u003ea7ac5aa\u003c/code\u003e\u003c/a\u003e pixi: Group linting tasks, add format task\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/771c0e0a5d80107771525321927eebb28fbc3400\"\u003e\u003ccode\u003e771c0e0\u003c/code\u003e\u003c/a\u003e lint: Fix two pylint errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/f568e80536549a3b7f627468eb29526d3404c85b\"\u003e\u003ccode\u003ef568e80\u003c/code\u003e\u003c/a\u003e Update type of velocity_limit attribute\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/232c9c0b76db644c212c1e9caa33bda345cb4dd2\"\u003e\u003ccode\u003e232c9c0\u003c/code\u003e\u003c/a\u003e minor: Removed comes before Fixed in Keep a Changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/3b60614b5f25ed8c1ed0f1fc596ec19133665035\"\u003e\u003ccode\u003e3b60614\u003c/code\u003e\u003c/a\u003e Update the changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/stephane-caron/pink/compare/v4.3.0...v4.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `reactivex` from 4.1.0 to 5.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ReactiveX/RxPY/releases\"\u003ereactivex's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.1.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003ev5.0.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003ev5.0.0rc2\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003ev5.0.0a2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix title header by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/744\"\u003eReactiveX/RxPY#744\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/ReactiveX/RxPY/compare/v5.0.0a1...v5.0.0a2\"\u003ehttps://github.com/ReactiveX/RxPY/compare/v5.0.0a1...v5.0.0a2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.0.0a1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGive run a scheduler parameter by \u003ca href=\"https://github.com/rmahfoud\"\u003e\u003ccode\u003e@​rmahfoud\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/731\"\u003eReactiveX/RxPY#731\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid use of asyncio.get_event_loop (3.14) by \u003ca href=\"https://github.com/traylenator\"\u003e\u003ccode\u003e@​traylenator\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/728\"\u003eReactiveX/RxPY#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to uv by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/738\"\u003eReactiveX/RxPY#738\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to ruff by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/739\"\u003eReactiveX/RxPY#739\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade pyright by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/740\"\u003eReactiveX/RxPY#740\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix subscribe_on not forwarding scheduler to the source  by \u003ca href=\"https://github.com/jcafhe\"\u003e\u003ccode\u003e@​jcafhe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/726\"\u003eReactiveX/RxPY#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade deps by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/741\"\u003eReactiveX/RxPY#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify what you can do with the .subscribe Disposable by \u003ca href=\"https://github.com/tmewett\"\u003e\u003ccode\u003e@​tmewett\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/686\"\u003eReactiveX/RxPY#686\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRxPY v5 by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/743\"\u003eReactiveX/RxPY#743\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rmahfoud\"\u003e\u003ccode\u003e@​rmahfoud\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/731\"\u003eReactiveX/RxPY#731\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tmewett\"\u003e\u003ccode\u003e@​tmewett\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/686\"\u003eReactiveX/RxPY#686\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/ReactiveX/RxPY/compare/v4.1.0...v5.0.0a1\"\u003ehttps://github.com/ReactiveX/RxPY/compare/v4.1.0...v5.0.0a1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003ereactivex's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.1.0 - 2026-07-27\u003c/h2\u003e\n\u003ch3\u003e🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(operators)\u003c/em\u003e Add tap as an alias for do_action (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/804\"\u003e#804\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/95c54ac3652aed2bf78035c9846cb5867ee58172\"\u003e95c54ac3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(gtk)\u003c/em\u003e Call gi.require_version before importing gi.repository (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/749\"\u003e#749\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/2b9e3f338246acb7b0037c2a2d9b0882a980ce62\"\u003e2b9e3f33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cem\u003e(operators)\u003c/em\u003e Accept concurrent.futures.Future wherever futures are accepted (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/806\"\u003e#806\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/19da6ac1487e97bb973fcc4dafc69cee4a1e12a7\"\u003e19da6ac1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cem\u003e(scheduler)\u003c/em\u003e Use wall clock time for now() in event loop schedulers (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/809\"\u003e#809\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/361951c7237ae100f33f81e89144935adb281509\"\u003e361951c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/10ccc0a3deba0d004a8f9b6079802ffdb73d1edd..b286407307ace6670f6f0072a8438bc912165d43\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch2\u003e5.0.0 - 2026-07-20\u003c/h2\u003e\n\u003ch3\u003e🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(scripts)\u003c/em\u003e Keep uv.lock in sync and scope the version sed to [project] (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/802\"\u003e#802\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/10ccc0a3deba0d004a8f9b6079802ffdb73d1edd\"\u003e10ccc0a3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/915311e3e002b933f2eb4d59c9eac1cab327ff78..10ccc0a3deba0d004a8f9b6079802ffdb73d1edd\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch2\u003e5.0.0-rc.2 - 2026-07-20\u003c/h2\u003e\n\u003ch3\u003e🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(operators)\u003c/em\u003e Reset retry budget per subscription to fix retry+repeat (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/765\"\u003e#765\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/c3f19d5e83403f70d44331daf0b5a86d410f76d4\"\u003ec3f19d5e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/2975deb528c9eec73c76cf8bb53fc8780f31de45..915311e3e002b933f2eb4d59c9eac1cab327ff78\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch2\u003e5.0.0-rc.1 - 2026-04-20\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/8b59bc7394f1b6a8a78e2fc4b5efe200d4f47f89..2975deb528c9eec73c76cf8bb53fc8780f31de45\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Added \u003ccode\u003eAction\u003c/code\u003e and \u003ccode\u003eStartableFactory\u003c/code\u003e to \u003ccode\u003ereactivex.typing.__all__\u003c/code\u003e,\nmaking them part of the explicit public API surface.\u003c/li\u003e\n\u003cli\u003eDocs: Added missing docstring to \u003ccode\u003eon_error_resume_next\u003c/code\u003e operator.\u003c/li\u003e\n\u003cli\u003eOperators: Fixed scheduler forwarding in \u003ccode\u003epairwise\u003c/code\u003e, \u003ccode\u003eto_marbles\u003c/code\u003e, and\n\u003ccode\u003edelay_with_mapper\u003c/code\u003e (subscription-delay path). These operators now pass the\n\u003ccode\u003escheduler\u003c/code\u003e argument through to \u003ccode\u003esource.subscribe(...)\u003c/code\u003e and, in the case of\n\u003ccode\u003edelay_with_mapper\u003c/code\u003e, to the subscription-delay observable, consistent with\nall other pipeable operators. Closes \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/480\"\u003e#480\u003c/a\u003e (partial — the operators listed\nin the issue that were not yet fixed).\u003c/li\u003e\n\u003cli\u003eCI: Skip \u003ccode\u003etests/test_scheduler/test_mainloop/test_tkinterscheduler.py\u003c/code\u003e on\nPyPy (all platforms). The module creates a Tk root at import time; PyPy's\n\u003ccode\u003e_tkinter\u003c/code\u003e finalizer calls \u003ccode\u003ethreading.notify_all\u003c/code\u003e during interpreter\nshutdown and aborts the xdist worker, failing whichever unrelated test\nwas running. Previously guarded only on macOS+PyPy.\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ereactivex.timer(duetime, period)\u003c/code\u003e now correctly resets the initial\ndelay on each resubscription (e.g. via \u003ccode\u003erepeat()\u003c/code\u003e). Previously `nonlocal\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/bbfecfbf83605f2bb2beb8b887dfe5b5fb322a67\"\u003e\u003ccode\u003ebbfecfb\u003c/code\u003e\u003c/a\u003e chore: release reactivex@5.1.0 (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/805\"\u003e#805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/b286407307ace6670f6f0072a8438bc912165d43\"\u003e\u003ccode\u003eb286407\u003c/code\u003e\u003c/a\u003e docs: correct and expand the GIL free-threading note (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/811\"\u003e#811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/93a4f0417fe5d1d187dbd2d0dfdf2ef3b481c45c\"\u003e\u003ccode\u003e93a4f04\u003c/code\u003e\u003c/a\u003e docs: explain how to parallelize work within a single stream (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/810\"\u003e#810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/2271867415d4beaed62e6f0441fd3312e47079aa\"\u003e\u003ccode\u003e2271867\u003c/code\u003e\u003c/a\u003e Revise GIL section for Python 3.13 updates (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/361951c7237ae100f33f81e89144935adb281509\"\u003e\u003ccode\u003e361951c\u003c/code\u003e\u003c/a\u003e fix(scheduler): use wall clock time for now() in event loop schedulers (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/b809222be63e235f439f65794dd1d4291556d072\"\u003e\u003ccode\u003eb809222\u003c/code\u003e\u003c/a\u003e docs: read version from pyproject instead of git tags (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/808\"\u003e#808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/19e808000610335b4f6d0e0c739b59372b8b5a5f\"\u003e\u003ccode\u003e19e8080\u003c/code\u003e\u003c/a\u003e ci(deps): bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/807\"\u003e#807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/dd9b8ec0185ade72dcb3aac983cd495f21ca0a6d\"\u003e\u003ccode\u003edd9b8ec\u003c/code\u003e\u003c/a\u003e refactor(combine-latest): simplify logic by removing redundant loops … (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/19da6ac1487e97bb973fcc4dafc69cee4a1e12a7\"\u003e\u003ccode\u003e19da6ac\u003c/code\u003e\u003c/a\u003e fix(operators): accept concurrent.futures.Future wherever futures are accepte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/2b9e3f338246acb7b0037c2a2d9b0882a980ce62\"\u003e\u003ccode\u003e2b9e3f3\u003c/code\u003e\u003c/a\u003e fix(gtk): call gi.require_version before importing gi.repository (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/749\"\u003e#749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ReactiveX/RxPY/compare/v4.1.0...v5.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.12.5 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.2 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.2...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 25.0 to 26.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a public \u003ccode\u003eVersionRange\u003c/code\u003e API and \u003ccode\u003eSpecifierSet.to_range()\u003c/code\u003e, representing the versions a specifier set accepts as an interval set that supports intersection, union, difference, complement, set relations, membership tests, and filtering. \u003ccode\u003eVersionRange.to_specifier_set()\u003c/code\u003e converts a range back to a \u003ccode\u003eSpecifierSet\u003c/code\u003e where a PEP 440 form exists. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1267\"\u003e#1267\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1270\"\u003e#1270\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1298\"\u003e#1298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 808: accept \u003ccode\u003eMetadata-Version: 2.6\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1194\"\u003e#1194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003elimit\u003c/code\u003e argument to \u003ccode\u003eparse_tag()\u003c/code\u003e for compressed tag sets. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1220\"\u003e#1220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003eprefer_sdist_predicate\u003c/code\u003e argument to \u003ccode\u003ePylock.select()\u003c/code\u003e to prefer source distributions over wheels for selected packages. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1334\"\u003e#1334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003epure_python_tags()\u003c/code\u003e to generate the pure-Python tags for a Python version without touching the running platform. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1346\"\u003e#1346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_subset()\u003c/code\u003e, \u003ccode\u003eSpecifierSet.is_superset()\u003c/code\u003e, and \u003ccode\u003eSpecifierSet.is_disjoint()\u003c/code\u003e, which compare the versions two specifier sets accept. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1313\"\u003e#1313\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBehavior adaptations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8; packaging now requires Python 3.9 or later. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1157\"\u003e#1157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrefer native \u003ccode\u003elinux_*\u003c/code\u003e platform tags over \u003ccode\u003emanylinux\u003c/code\u003e and \u003ccode\u003emusllinux\u003c/code\u003e tags on Linux. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/160\"\u003e#160\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes for versions and specifiers\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e instead of \u003ccode\u003eTypeError\u003c/code\u003e when \u003ccode\u003eVersion\u003c/code\u003e is given a non-string. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1319\"\u003e#1319\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e for non-string pre-release letters passed to \u003ccode\u003eVersion.from_parts\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1241\"\u003e#1241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix an \u003ccode\u003eAttributeError\u003c/code\u003e when hashing internally trimmed versions. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1242\"\u003e#1242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e for post-release boundary intersections. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1257\"\u003e#1257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes for requirements and markers\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003eRequirement.__hash__\u003c/code\u003e consistent with \u003ccode\u003e__eq__\u003c/code\u003e for trailing-zero-equivalent specifiers (e.g. \u003ccode\u003efoo==1.0.0\u003c/code\u003e and \u003ccode\u003efoo==1.0.0.0\u003c/code\u003e), so equal requirements hash equal and deduplicate in sets and dicts. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1232\"\u003e#1232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize requested extra names before comparing or hashing requirements. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve a \u003ccode\u003eRequirement\u003c/code\u003e's specifier \u003ccode\u003eprereleases\u003c/code\u003e override across a pickle round trip. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1204\"\u003e#1204\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidRequirement\u003c/code\u003e instead of \u003ccode\u003eInvalidSpecifier\u003c/code\u003e when a requirement contains an invalid specifier. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1332\"\u003e#1332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify the error for post-release prefix wildcards like \u003ccode\u003e==1.0.post1.*\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1299\"\u003e#1299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve quoting semantics when serializing marker values, so round-tripped markers parse back to the same marker. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeep the parentheses of a nested group when serializing markers. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1316\"\u003e#1316\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eextra\u003c/code\u003e and \u003ccode\u003edependency_groups\u003c/code\u003e values in nested markers at parse time. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1246\"\u003e#1246\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1310\"\u003e#1310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eUndefinedComparison\u003c/code\u003e when a set-valued variable like \u003ccode\u003eextras\u003c/code\u003e is used outside the membership form. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1265\"\u003e#1265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eUndefinedEnvironmentName\u003c/code\u003e (a \u003ccode\u003eKeyError\u003c/code\u003e subclass) for missing environment keys during marker evaluation. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1276\"\u003e#1276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWrap malformed string literal errors in \u003ccode\u003eInvalidMarker\u003c/code\u003e / \u003ccode\u003eInvalidRequirement\u003c/code\u003e instead of leaking a low-level error. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1249\"\u003e#1249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject requirements and markers with a trailing line break. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1345\"\u003e#1345\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes for metadata and licenses\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCollect all \u003ccode\u003efrom_email\u003c/code\u003e validation errors into one \u003ccode\u003eExceptionGroup\u003c/code\u003e instead of raising the first. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1268\"\u003e#1268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept the UTF-8 charset case-insensitively in email payloads. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1330\"\u003e#1330\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject malformed \u003ccode\u003eDescription-Content-Type\u003c/code\u003e values. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1329\"\u003e#1329\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't rewrite user values that contain \u003ccode\u003e{field}\u003c/code\u003e placeholders in error messages. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1327\"\u003e#1327\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRoute multipart email payloads to \u003ccode\u003eunparsed\u003c/code\u003e instead of asserting. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1247\"\u003e#1247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eInvalidMetadata\u003c/code\u003e and \u003ccode\u003eCyclicDependencyGroup\u003c/code\u003e picklable. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1328\"\u003e#1328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFold every line boundary \u003ccode\u003estr.splitlines\u003c/code\u003e recognizes when writing a header with \u003ccode\u003eRFC822Message\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1356\"\u003e#1356\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.3 - 2026-08-03\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFeatures:\n\u003cul\u003e\n\u003cli\u003eAdd a public :class:\u003ccode\u003e~packaging.ranges.VersionRange\u003c/code\u003e API and\u003cbr /\u003e\n:meth:\u003ccode\u003eSpecifierSet.to_range() \u0026amp;lt;packaging.specifiers.SpecifierSet.to_range\u0026amp;gt;\u003c/code\u003e,\u003cbr /\u003e\nrepresenting the versions a specifier set accepts as an interval set that\u003cbr /\u003e\nsupports intersection, union, difference, complement, set relations,\u003cbr /\u003e\nmembership tests, and filtering.\u003cbr /\u003e\n:meth:\u003ccode\u003e~packaging.ranges.VersionRange.to_specifier_set\u003c/code\u003e converts a range back\u003cbr /\u003e\nto a :class:\u003ccode\u003e~packaging.specifiers.SpecifierSet\u003c/code\u003e where a PEP 440 form exists.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1267\u003c/code\u003e, :pull:\u003ccode\u003e1270\u003c/code\u003e, :pull:\u003ccode\u003e1298\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 808: accept \u003ccode\u003eMetadata-Version: 2.6\u003c/code\u003e. (:pull:\u003ccode\u003e1194\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003elimit\u003c/code\u003e argument to \u003ccode\u003eparse_tag()\u003c/code\u003e for compressed tag sets.\u003cbr /\u003e\n(:issue:\u003ccode\u003e1220\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003eprefer_sdist_predicate\u003c/code\u003e argument to \u003ccode\u003ePylock.select()\u003c/code\u003e to prefer\u003cbr /\u003e\nsource distributions over wheels for selected packages. (:pull:\u003ccode\u003e1334\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd :func:\u003ccode\u003e~packaging.tags.pure_python_tags\u003c/code\u003e to generate the pure-Python\u003cbr /\u003e\ntags for a Python version without touching the running platform.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1346\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd :meth:\u003ccode\u003eSpecifierSet.is_subset() \u0026amp;lt;packaging.specifiers.SpecifierSet.is_subset\u0026amp;gt;\u003c/code\u003e, :meth:\u003ccode\u003e~packaging.specifiers.SpecifierSet.is_superset\u003c/code\u003e,\u003cbr /\u003e\nand :meth:\u003ccode\u003e~packaging.specifiers.SpecifierSet.is_disjoint\u003c/code\u003e, which compare the\u003cbr /\u003e\nversions two specifier sets accept. (:pull:\u003ccode\u003e1313\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8; packaging now requires Python 3.9 or later.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1157\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePrefer native \u003ccode\u003elinux_*\u003c/code\u003e platform tags over \u003ccode\u003emanylinux\u003c/code\u003e and \u003ccode\u003emusllinux\u003c/code\u003e\u003cbr /\u003e\ntags on Linux. (:issue:\u003ccode\u003e160\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes for versions and specifiers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e instead of \u003ccode\u003eTypeError\u003c/code\u003e when \u003ccode\u003eVersion\u003c/code\u003e is given a\u003cbr /\u003e\nnon-string. (:pull:\u003ccode\u003e1319\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e for non-string pre-release letters passed to\u003cbr /\u003e\n\u003ccode\u003eVersion.from_parts\u003c/code\u003e. (:pull:\u003ccode\u003e1241\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix an \u003ccode\u003eAttributeError\u003c/code\u003e when hashing internally trimmed versions.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1242\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e for post-release boundary\u003cbr /\u003e\nintersections. (:pull:\u003ccode\u003e1257\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes for requirements and markers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003eRequirement.__hash__\u003c/code\u003e consistent with \u003ccode\u003e__eq__\u003c/code\u003e for\u003cbr /\u003e\ntrailing-zero-equivalent specifiers (e.g. \u003ccode\u003efoo==1.0.0\u003c/code\u003e and\u003cbr /\u003e\n\u003ccode\u003efoo==1.0.0.0\u003c/code\u003e), so equal requirements hash equal and deduplicate in\u003cbr /\u003e\nsets and dicts. (:pull:\u003ccode\u003e1232\u003c/code\u003e)\u003cbr /\u003e\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/929fd4b1410ac7ef61ef3f45b2f5d7e87711a9b5\"\u003e\u003ccode\u003e929fd4b\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/f300ebf0c155e1f7ea6d62fba11dba4bac3d1944\"\u003e\u003ccode\u003ef300ebf\u003c/code\u003e\u003c/a\u003e chore(deps): bump the pre-commit group with 5 updates (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1357\"\u003e#1357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/f91d97566a966177ad7ea5a7c703b12a7273e3b1\"\u003e\u003ccode\u003ef91d975\u003c/code\u003e\u003c/a\u003e ci(downstream): bump hatchling to 1.31.0 and fix its pytest rootdir (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1361\"\u003e#1361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/b1a7124fe3d40c3302c029e9eb01ac3fc3496a54\"\u003e\u003ccode\u003eb1a7124\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 7 updates (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1358\"\u003e#1358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/2d873eb6002021a8c007c933fbdab58b37a5079b\"\u003e\u003ccode\u003e2d873eb\u003c/code\u003e\u003c/a\u003e fix(metadata): fold every line boundary when writing headers (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1356\"\u003e#1356\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/413d006fadf5b9b14d78ad444201d8189bff8c64\"\u003e\u003ccode\u003e413d006\u003c/code\u003e\u003c/a\u003e docs: changelog for 26.3 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1343\"\u003e#1343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4eb0753dba8fcaaac8eb75463374e448f0931558\"\u003e\u003ccode\u003e4eb0753\u003c/code\u003e\u003c/a\u003e docs(metadata): explain selective field validation (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1342\"\u003e#1342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/77e9ed42b6db9c5c011a5148047a356ebe42692a\"\u003e\u003ccode\u003e77e9ed4\u003c/code\u003e\u003c/a\u003e feat(tags): add pure Python tag generator (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1346\"\u003e#1346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/7cea5e88671ed14016e9ab3dd08eab064f596564\"\u003e\u003ccode\u003e7cea5e8\u003c/code\u003e\u003c/a\u003e ci: drop 3.13t on Windows (3.13.14t may fail to build, run takes 9 minutes) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/45a8b3402db5ff82158f2d0eabaf8447aa7a50bf\"\u003e\u003ccode\u003e45a8b34\u003c/code\u003e\u003c/a\u003e docs: add missing versionadded/versionchanged directives (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1344\"\u003e#1344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/25.0...26.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.23.0 to 3.32.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.32.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(lease): reject a duration no marker can carry by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/723\"\u003etox-dev/filelock#723\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft-rw): reject non-finite timing options by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/724\"\u003etox-dev/filelock#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve exception notes when copying and pickling by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(soft-rw): reuse existing test module by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/730\"\u003etox-dev/filelock#730\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: respect ACL write access when the owner write bit is absent by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/728\"\u003etox-dev/filelock#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix SoftReadWriteLock state lock timeout by \u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(fork): report where a stalled fork stops by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/715\"\u003etox-dev/filelock#715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs: say that mode is read-only in the thread-local section by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/716\"\u003etox-dev/filelock#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(lease): clear token after failed acquire by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix: retry transient denials on open and claim read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/705\"\u003etox-dev/filelock#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: deflake six scheduled-run failures by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/704\"\u003etox-dev/filelock#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: cover a reclaimed private record for real by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/706\"\u003etox-dev/filelock#706\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test(fork): fork once the event loop has closed by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/714\"\u003etox-dev/filelock#714\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 chore: batch dependency updates weekly on Tuesday by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/713\"\u003etox-dev/filelock#713\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eescape the hostname every marker publishes by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/709\"\u003etox-dev/filelock#709\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.3...3.32.4\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.3...3.32.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(strict): deflake close-fault injections on graalpy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/697\"\u003etox-dev/filelock#697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📄 docs: publish llms.txt from the docs build by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/700\"\u003etox-dev/filelock#700\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.0.1 (2026-09-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epoll_interval\u003c/code\u003e is now validated at construction, on the setter, and on \u003ccode\u003eacquire()\u003c/code\u003e: a negative, non-finite, or\nnon-numeric value raises :class:\u003ccode\u003eValueError\u003c/code\u003e/:class:\u003ccode\u003eTypeError\u003c/code\u003e immediately instead of failing inside \u003ccode\u003etime.sleep\u003c/code\u003e. :pr:\u003ccode\u003e739\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.0.0 (2026-09-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eThe :class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e on-disk protocol is a generation log under \u003ccode\u003e\u0026lt;path\u0026gt;.rw\u003c/code\u003e, and a process\nrunning an earlier release does not see it: an old and a new participant on one lock path do not exclude each\nother. Stop every participant, upgrade them all, then restart them; the new code ignores leftover \u003ccode\u003e.state\u003c/code\u003e,\n\u003ccode\u003e.write\u003c/code\u003e and \u003ccode\u003e.readers/\u003c/code\u003e files, and you can delete them. The filesystem must provide no-replace hard links, as\nit must for :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e, so a runtime without \u003ccode\u003eos.link\u003c/code\u003e raises\n:class:\u003ccode\u003e~filelock.SoftFileLockProtocolError\u003c/code\u003e on acquire. Constructing a singleton again with a different\n\u003ccode\u003eon_compromise\u003c/code\u003e, or with \u003ccode\u003epoll_interval\u003c/code\u003e at or above \u003ccode\u003estale_threshold\u003c/code\u003e, now raises :class:\u003ccode\u003eValueError\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e exposes :attr:\u003ccode\u003e~filelock.SoftReadWriteLock.generation\u003c/code\u003e as a fencing token for\nthe protected resource and reports a lost hold through \u003ccode\u003eon_compromise\u003c/code\u003e and\n:attr:\u003ccode\u003e~filelock.SoftReadWriteLock.compromise\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e no longer deadlocks when a holder dies on another host mid-transition, and\n\u003ccode\u003erelease()\u003c/code\u003e no longer waits on a mutex a dead host left behind (:pr:\u003ccode\u003e725\u003c/code\u003e, :pr:\u003ccode\u003e735\u003c/code\u003e). The state mutex is gone.\nEach transition is one atomic snapshot commit, and liveness is a heartbeat nonce read on the observer's own clock\nrather than an \u003ccode\u003emtime\u003c/code\u003e read against another host's. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.7 (2026-09-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eValidate final-symlink refusal by error number so the test works across libc implementations. :pr:\u003ccode\u003e737\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocument that :meth:\u003ccode\u003e~filelock.BaseFileLock.acquire\u003c/code\u003e reads \u003ccode\u003eblocking=None\u003c/code\u003e as the lock's \u003ccode\u003eblocking\u003c/code\u003e attribute and\nraises :class:\u003ccode\u003e~filelock.Timeout\u003c/code\u003e after one attempt when \u003ccode\u003eblocking=False\u003c/code\u003e. :pr:\u003ccode\u003e733\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.6 (2026-09-08)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLease\u003c/code\u003e now reject a boolean or non-finite \u003ccode\u003elease_duration\u003c/code\u003e, which used to\npublish an owner record their own \u003ccode\u003eowner\u003c/code\u003e property reads back as malformed. :pr:\u003ccode\u003e723\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject non-finite heartbeat, stale, and polling intervals in \u003ccode\u003eSoftReadWriteLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftReadWriteLock\u003c/code\u003e,\nincluding cached singleton construction and overflow in the default stale threshold. :pr:\u003ccode\u003e724\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4efd93e0482e8095a0b6949fb337206e7f67495d\"\u003e\u003ccode\u003e4efd93e\u003c/code\u003e\u003c/a\u003e Release 3.32.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7b7b7a8b9b10acf826cca246441297468039b0c1\"\u003e\u003ccode\u003e7b7b7a8\u003c/code\u003e\u003c/a\u003e Fix SoftReadWriteLock state lock timeout (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2f7b8696426c518b6828ea10e755c0ba2a4ffe2\"\u003e\u003ccode\u003ef2f7b86\u003c/code\u003e\u003c/a\u003e fix: respect ACL write access when the owner write bit is absent (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/e947a694fb0da6676c4861c8bfef3650e5656153\"\u003e\u003ccode\u003ee947a69\u003c/code\u003e\u003c/a\u003e test(soft-rw): reuse existing test module (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da3ae2bca0035fb9e5269257e6f393360866cf88\"\u003e\u003ccode\u003eda3ae2b\u003c/code\u003e\u003c/a\u003e fix: preserve exception notes when copying and pickling (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ae9cb5b2d66d6a79edd76b292fa7320c11468812\"\u003e\u003ccode\u003eae9cb5b\u003c/code\u003e\u003c/a\u003e 🐛 fix(soft-rw): reject non-finite timing options (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d00f9bbd709fbe92a99a38cb1e32b6690813e5a8\"\u003e\u003ccode\u003ed00f9bb\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/82f66d7b0aaa83755f8d71d0b0da88408b58ec4a\"\u003e\u003ccode\u003e82f66d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(lease): reject a duration no marker can carry (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1d9e9e7e43a1089c57d7c6f20d6a2268235a4745\"\u003e\u003ccode\u003e1d9e9e7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1585dfef9355a5c77d4a9498cc34d3a98056fdb9\"\u003e\u003ccode\u003e1585dfe\u003c/code\u003e\u003c/a\u003e Release 3.32.5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.23.0...3.32.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `plum-dispatch` from 2.5.7 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/beartype/plum/releases\"\u003eplum-dispatch's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003e_wrap_type_hint\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/310\"\u003e#310\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eBuild macOS arm64 mypyc wheels (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/320\"\u003e#320\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/beartype/plum/issues/317\"\u003e#317\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/318\"\u003e#318\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/319\"\u003e#319\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCompile more things with \u003ccode\u003emypyc\u003c/code\u003e for faster dispatch (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/287\"\u003e#287\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/beartype/plum/issues/288\"\u003e#288\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/289\"\u003e#289\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake concurrent dispatch resolution thread safe (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/281\"\u003e#281\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix support for \u003ccode\u003ebeartype\u0026gt;=0.23\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/296\"\u003e#296\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImprove typing (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/268\"\u003e#268\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003eVal\u003c/code\u003e, which was deprecated in v0.5.0 in favour of \u003ccode\u003etyping.Literal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/269\"\u003e#269\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.9.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport union aliases in Python 3.14 and later (\u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.8.0\u003c/h2\u003e\n\u003cp\u003eStarting this release, Plum will be available on PyPI as both \u003ccode\u003eplum-dispatch\u003c/code\u003e and \u003ccode\u003eplum\u003c/code\u003e.\u003c/p\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003efaithful\u003c/code\u003e keyword to \u003ccode\u003eModuleType\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e All imports should now go through \u003ccode\u003eplum\u003c/code\u003e directly! That is, not \u003ccode\u003eplum.signature.Signature\u003c/code\u003e, but \u003ccode\u003eplum.Signature\u003c/code\u003e. Please do open an issue if this release breaks something that shouldn't break.\u003c/p\u003e\n\u003cp\u003eChanges:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSignificantly improve typing of the internals (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/179\"\u003e#179\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/242\"\u003e#242\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSwitch to \u003ccode\u003euv\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/218\"\u003e#218\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake modules private for public/private separation (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/241\"\u003e#241\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSwitch to \u003ccode\u003esrc\u003c/code\u003e layout (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/249\"\u003e#249\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImprove config (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/248\"\u003e#248\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEnable \u003ccode\u003emypyc\u003c/code\u003e builds for better performance (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/247\"\u003e#247\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.1\u003c/h2\u003e\n\u003cp\u003eThis release features numerous very helpful contributions and improvements by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e!\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse dependency groups (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/195\"\u003e#195\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003etyping_extensions\u003c/code\u003e as standard library and make more use of it (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/226\"\u003e#226\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/232\"\u003e#232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eComplete deprecation cycles (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/230\"\u003e#230\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/236\"\u003e#236\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eTurn various arguments into positional-only (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/229\"\u003e#229\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRemove unnecessary path manipulation (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/233\"\u003e#233\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRework tests with a \u003ccode\u003edispatch\u003c/code\u003e fixture (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/234\"\u003e#234\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAvoid using a deprecated NumPy module (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/231\"\u003e#231\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eDrops support for Python 3.9 (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/228\"\u003e#228\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImport exports from \u003ccode\u003emethods.py\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/237\"\u003e#237\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixes an incorrect \u003ccode\u003eoverload\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/238\"\u003e#238\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003enox\u003c/code\u003e for testing (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/235\"\u003e#235\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/240\"\u003e#240\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/beartype/plum/issues/228\"\u003e#228\u003c/a\u003e also fixes an important bug to do with the handling of unions (CC \u003ca href=\"https://github.com/davidwyld\"\u003e\u003ccode\u003e@​davidwyld\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/beartype/plum/commit/c835c8cf5ebea4f00ee304a647e026739034e63b\"\u003e\u003ccode\u003ec835c8c\u003c/code\u003e\u003c/a\u003e fix(mypyc): keep \u003ccode\u003eFunction\u003c/code\u003e weak-referenceable on the compiled wheels (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/319\"\u003e#319\u003c...\n\n_Description has been truncated_","html_url":"https://github.com/dimensionalOS/dimos/pull/4260","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimensionalOS%2Fdimos/issues/4260","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4260/packages"},{"uuid":"5533006007","node_id":"PR_kwDOTNFrcM8AAAABEfpOQg","number":13,"state":"closed","title":"chore(deps): bump cryptography from 49.0.0 to 50.0.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-21T22:25:11.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-21T22:10:04.000Z","updated_at":"2026-09-21T22:25:12.000Z","time_to_close":907,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"cryptography","old_version":"49.0.0","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cryptography](https://github.com/pyca/cryptography) from 49.0.0 to 50.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/49.0.0...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=pip\u0026previous-version=49.0.0\u0026new-version=50.0.0)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/blytkerchan/kem-make/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/blytkerchan/kem-make/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/blytkerchan%2Fkem-make/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"},{"uuid":"5530702253","node_id":"PR_kwDOEc5xqM8AAAABEdyR3g","number":4,"state":"closed","title":"Bump the python group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-21T22:15:21.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-21T18:07:39.000Z","updated_at":"2026-09-21T22:15:23.000Z","time_to_close":14862,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":9,"packages":[{"name":"pyyaml","old_version":"6.0.1","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"pydantic","old_version":"2.6.0","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"mysql-connector-python","old_version":"8.4.0","new_version":"26.7.0","repository_url":"https://github.com/mysql/mysql-connector-python"},{"name":"psycopg","old_version":"3.2.10","new_version":"3.3.6","repository_url":"https://github.com/psycopg/psycopg"},{"name":"oracledb","old_version":"2.5.0","new_version":"26.0.0","repository_url":"https://github.com/oracle/python-oracledb"},{"name":"pymssql","old_version":"2.3.5","new_version":"2.4.1","repository_url":"https://github.com/pymssql/pymssql"},{"name":"cryptography","old_version":"42.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"types-pyyaml","old_version":"6.0.12.20260815","new_version":"6.0.12.20260906","repository_url":"https://github.com/python/typeshed"},{"name":"pydantic-core","old_version":"2.46.5","new_version":"2.49.0","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.1` | `6.0.3` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.6.0` | `2.13.5` |\n| [mysql-connector-python](https://github.com/mysql/mysql-connector-python) | `8.4.0` | `26.7.0` |\n| [psycopg](https://github.com/psycopg/psycopg) | `3.2.10` | `3.3.6` |\n| [oracledb](https://github.com/oracle/python-oracledb) | `2.5.0` | `26.0.0` |\n| [pymssql](https://github.com/pymssql/pymssql) | `2.3.5` | `2.4.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `42.0.0` | `50.0.1` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260815` | `6.0.12.20260906` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.5` | `2.49.0` |\n\n\nUpdates `pyyaml` from 6.0.1 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/yaml/pyyaml/releases\"\u003epyyaml's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 and free-threading (experimental).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ehttps://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Cython 3.x and Python 3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.1...6.0.2\"\u003ehttps://github.com/yaml/pyyaml/compare/6.0.1...6.0.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.2rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for extension build with Cython 3.x\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.13\u003c/li\u003e\n\u003cli\u003eAdded PyPI wheels for musllinux on aarch64\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/yaml/pyyaml/blob/6.0.3/CHANGES\"\u003epyyaml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e6.0.3 (2025-09-25)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/yaml/pyyaml/pull/864\"\u003eyaml/pyyaml#864\u003c/a\u003e -- Support for Python 3.14 and free-threading (experimental)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e6.0.2 (2024-08-06)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/yaml/pyyaml/pull/808\"\u003eyaml/pyyaml#808\u003c/a\u003e -- Support for Cython 3.x and Python 3.13\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/49790e73684bebad1df05ef8d828fa12f685bffb\"\u003e\u003ccode\u003e49790e7\u003c/code\u003e\u003c/a\u003e Release 6.0.3 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/889\"\u003e#889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/41309b0bcb4559edb1d691d47199035ef539d785\"\u003e\u003ccode\u003e41309b0\u003c/code\u003e\u003c/a\u003e Release 6.0.2 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/819\"\u003e#819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/dd9f0e1236775dcce682c91823e009556ce2a271\"\u003e\u003ccode\u003edd9f0e1\u003c/code\u003e\u003c/a\u003e 6.0.2rc1 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/f5527a26d518b3e9c66f9211e0af00c83f09a97e\"\u003e\u003ccode\u003ef5527a2\u003c/code\u003e\u003c/a\u003e disable CI trigger on PR edits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/b4d80a742142004490d2da7691d534923820b81c\"\u003e\u003ccode\u003eb4d80a7\u003c/code\u003e\u003c/a\u003e Python 3.12 + musllinux_1_1_x86_64 wheel support\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.1...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.6.0 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.6.0...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mysql-connector-python` from 8.4.0 to 26.7.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mysql/mysql-connector-python/blob/trunk/CHANGES.txt\"\u003emysql-connector-python's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev26.7.0\u003c/h1\u003e\n\u003cp\u003eThis release contains no functional changes.\u003c/p\u003e\n\u003ch1\u003ev9.7.0\u003c/h1\u003e\n\u003cp\u003eThis release contains no functional changes.\u003c/p\u003e\n\u003ch1\u003ev9.6.0\u003c/h1\u003e\n\u003cp\u003eThis release contains no functional changes.\u003c/p\u003e\n\u003ch1\u003ev9.5.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eWL#17049: Remove usage of SQL functions MD5() and SHA1()\u003c/li\u003e\n\u003cli\u003eWL#17088: MySQL Connector Python HeatWave GenAI and ML SDK\u003c/li\u003e\n\u003cli\u003eWL#17048: Remove Python 3.9 support\u003c/li\u003e\n\u003cli\u003eWL#17045: Add support for Python 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev9.4.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eWL#16966: Upgrade Python lz4 version\u003c/li\u003e\n\u003cli\u003eWL#16963: Update the OpenTelemetry version\u003c/li\u003e\n\u003cli\u003eWL#16962: Update the Python Protobuf version\u003c/li\u003e\n\u003cli\u003eWL#16954: Make sdist packages pip installable\u003c/li\u003e\n\u003cli\u003eBUG#38072835: Authentication OCI plugin option parameters not being supported by the aio connector\u003c/li\u003e\n\u003cli\u003eBUG#37868219: RPM packages have incorrect copyright year in their metadata\u003c/li\u003e\n\u003cli\u003eBUG#37859771: mysql/connector python version 9.3.0 has a regression which cannot persist binary data with percent signs in it\u003c/li\u003e\n\u003cli\u003eBUG#37820231: Text based django ORM filters doesn't work with Connector/Python\u003c/li\u003e\n\u003cli\u003eBUG#37806057: Rename extra option (when installing wheel package) to install webauthn functionality dependencies\u003c/li\u003e\n\u003cli\u003eBUG#37774513: Inconsistent conversion to_sql for cext vs pure python\u003c/li\u003e\n\u003cli\u003eBUG#37642447: The license type is missing from RPM package\u003c/li\u003e\n\u003cli\u003eBUG#37627508: mysql/connector python fetchmany() has an off by one bug when argument given as 1\u003c/li\u003e\n\u003cli\u003eBUG#37047789: Python connector does not support Django enum\u003c/li\u003e\n\u003cli\u003eBUG#36733242: Contribution: Add Connection Pooling Support for AsyncIO Connector\u003c/li\u003e\n\u003cli\u003eBUG#36452514: Missing version info resources\u003c/li\u003e\n\u003cli\u003eBUG#34950958: MySQL Python Connector doesn't work with ssh in the same process\u003c/li\u003e\n\u003cli\u003eBUG#34844347: Freezes on connection via sshtunnel\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev9.3.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eWL#16754: The host wildcard no longer applies to localhost\u003c/li\u003e\n\u003cli\u003eWL#16752: Deprecate class methods to access instance data or to know instance internal state\u003c/li\u003e\n\u003cli\u003eWL#16327: Remove Cursors Prepared Raw and Named Tuple\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/79f3435138368bbb1f86926c376952caa8411099\"\u003e\u003ccode\u003e79f3435\u003c/code\u003e\u003c/a\u003e Fix mysqld version parsing for multi-digit components\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/1a242a75fbe22515d4fc9ae0458728759a39be6c\"\u003e\u003ccode\u003e1a242a7\u003c/code\u003e\u003c/a\u003e Updated Connector/Python version to v26.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/d5645ae01e2be0b873c641f57ca2eb6d5b32c668\"\u003e\u003ccode\u003ed5645ae\u003c/code\u003e\u003c/a\u003e Updated GPL licence book\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/c94b53c600856f79afd028c092e0ad92d4844795\"\u003e\u003ccode\u003ec94b53c\u003c/code\u003e\u003c/a\u003e Updated the CONTRIBUTING and README files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/ecbe56ee903d4cc774fe478e0414e771daac2718\"\u003e\u003ccode\u003eecbe56e\u003c/code\u003e\u003c/a\u003e Updated the CONTRIBUTING and README files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/b0dde65f5728727c7c8f2b459ee98237d6b04d46\"\u003e\u003ccode\u003eb0dde65\u003c/code\u003e\u003c/a\u003e Updated Connector/Python version to v10.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/cbac6da551e915605575989551b3b7c803d74a0c\"\u003e\u003ccode\u003ecbac6da\u003c/code\u003e\u003c/a\u003e Updated GPL licence book\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/8245a3dfa47eb8f264e82e92b53363dabc225270\"\u003e\u003ccode\u003e8245a3d\u003c/code\u003e\u003c/a\u003e Updated project setup files.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/4111d801a6a62fdcaeea595d777d39eff176d750\"\u003e\u003ccode\u003e4111d80\u003c/code\u003e\u003c/a\u003e Copyright header year bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/2e3dededcef1cb8ff0d1c2e13ab0070088e4f51c\"\u003e\u003ccode\u003e2e3dede\u003c/code\u003e\u003c/a\u003e Updated Connector/Python version to v9.7.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mysql/mysql-connector-python/compare/8.4.0...26.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg` from 3.2.10 to 3.3.6\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.6\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1245](https://github.com/psycopg/psycopg/issues/1245)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDon't wait forever for a query to terminate after interrupting it, for\ninstance if the server is unresponsive. The fix requires libpq 17 or newer\n(:ticket:\u003ccode\u003e[#1371](https://github.com/psycopg/psycopg/issues/1371)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eCancel a running query upon receiving \u003ccode\u003e!SystemExit\u003c/code\u003e (:ticket:\u003ccode\u003e[#1384](https://github.com/psycopg/psycopg/issues/1384)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReport \u003ccode\u003e!None\u003c/code\u003e instead of \u003ccode\u003e65535\u003c/code\u003e as the \u003ccode\u003eColumn.precision\u003c/code\u003e of an\n:sql:\u003ccode\u003einterval\u003c/code\u003e column declared with a fields restriction and no explicit\nprecision, such as e.g. :sql:\u003ccode\u003einterval day to second\u003c/code\u003e (:ticket:\u003ccode\u003e[#1397](https://github.com/psycopg/psycopg/issues/1397)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix dumping of nested subclasses of lists as arrays (:ticket:\u003ccode\u003e[#1398](https://github.com/psycopg/psycopg/issues/1398)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eDEALLOCATE ALL\u003c/code\u003e (:ticket:\u003ccode\u003e[#1408](https://github.com/psycopg/psycopg/issues/1408)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eBetter guards dumping large Python \u003ccode\u003e!int\u003c/code\u003e to binary numeric (:ticket:\u003ccode\u003e[#1414](https://github.com/psycopg/psycopg/issues/1414)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eImprove performance of async queries by reducing the overhead of the\n\u003ccode\u003e!wait_async()\u003c/code\u003e function (:ticket:\u003ccode\u003e[#1331](https://github.com/psycopg/psycopg/issues/1331)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a67654d1e7afbf9b3a619557838f62de1c790e7c\"\u003e\u003ccode\u003ea67654d\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/443814b3b111ac678a39fd523c1a826266fb69b5\"\u003e\u003ccode\u003e443814b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1416\"\u003e#1416\u003c/a\u003e from dvarrazzo/wait-async-perf\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/42966e9ebbda3b9c69b15c5588543c15f2aae5dd\"\u003e\u003ccode\u003e42966e9\u003c/code\u003e\u003c/a\u003e test: add helpful comments to some tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/5e8797f0c8003d8cd12a1e5c13f05fbb94c1c1d2\"\u003e\u003ccode\u003e5e8797f\u003c/code\u003e\u003c/a\u003e test: add reasonable connect_timeout to most tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/c81ba62442dfbd69e207d6914e6ae2aa27e56886\"\u003e\u003ccode\u003ec81ba62\u003c/code\u003e\u003c/a\u003e perf: reduce the overhead of wait_async()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/d2bbfe4e2b1e36a20e72a18097f35a3db27296e3\"\u003e\u003ccode\u003ed2bbfe4\u003c/code\u003e\u003c/a\u003e refactor: use get_running_loop() in the async wait functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2b1484a550e01c88fda077099678f0abb9217ecb\"\u003e\u003ccode\u003e2b1484a\u003c/code\u003e\u003c/a\u003e test: add a script to measure the async wait functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/573cf4aa70d8fdefc9d5f3eb69d5419cd6d3cd51\"\u003e\u003ccode\u003e573cf4a\u003c/code\u003e\u003c/a\u003e test: fix incorrect wait timing test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2b68990874175b8d97269218d4963b2d5c8656f3\"\u003e\u003ccode\u003e2b68990\u003c/code\u003e\u003c/a\u003e refactor: drop leftovers of waiting with inf interval in wait_conn_async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/60765dd8fc7d8df03cd75efcff485bfb3c83a0ed\"\u003e\u003ccode\u003e60765dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1414\"\u003e#1414\u003c/a\u003e from dvarrazzo/fix-decimal-overflow\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.2.10...3.3.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `oracledb` from 2.5.0 to 26.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/oracle/python-oracledb/releases\"\u003eoracledb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev26.0.0\u003c/h2\u003e\n\u003cp\u003epython-oracledb 26.0.0 is now released. The major version number will now be the two digit year in which that version was first released. This release has the following highlights:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esupport for Python 3.14 templates\u003c/li\u003e\n\u003cli\u003esupport for centralized configuration providers for GCP and AWS\u003c/li\u003e\n\u003cli\u003esupport for setting transaction priority (Oracle AI Database 26ai feature)\u003c/li\u003e\n\u003cli\u003esupport for Oracle AI Database 26ai Deep Data Security using asyncio\u003c/li\u003e\n\u003cli\u003esupport for external authentication using TLS in thin mode\u003c/li\u003e\n\u003cli\u003esupport for operation and round trip callbacks\u003c/li\u003e\n\u003cli\u003eimprovements to Apache Arrow support\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-26-0-0-september-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev4.0.2\u003c/h2\u003e\n\u003cp\u003epython-oracledb 4.0.2 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-4-0-2-july-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003cp\u003epython-oracledb 4.0.1 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-4-0-1-may-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003cp\u003epython-oracledb 4.0.0 is now released. This release has the following highlights:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esupport for Oracle AI Database 26ai Deep Data Security in thin mode\u003c/li\u003e\n\u003cli\u003esupport for Continuous Query Notification (CQN) and Advanced Queuing (AQ) notifications in thin mode\u003c/li\u003e\n\u003cli\u003enew functions to help developers prevent SQL injection when processing user input to create SQL statements\u003c/li\u003e\n\u003cli\u003eimproved cloud native authentication\u003c/li\u003e\n\u003cli\u003eimproved support for data frames (binary views \u0026quot;vb\u0026quot; and string views \u0026quot;vu\u0026quot; formats now accepted)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-4-0-0-may-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev3.4.2\u003c/h2\u003e\n\u003cp\u003epython-oracledb 3.4.2 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-3-4-2-january-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev3.4.1\u003c/h2\u003e\n\u003cp\u003epython-oracledb 3.4.1 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-3-4-1-november-2025\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003cp\u003epython-oracledb 3.4.0 is now released. This release has the following highlights:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esupport for Direct Path Load in thin mode for fast data ingestion\u003c/li\u003e\n\u003cli\u003esupport for data frames is no longer considered a pre-release\u003c/li\u003e\n\u003cli\u003esupport for type mapping when querying with data frames\u003c/li\u003e\n\u003cli\u003esupport for ingesting more Apache Arrow data types\u003c/li\u003e\n\u003cli\u003esupport for ingesting Apache Arrow data frames containing multiple chunks\u003c/li\u003e\n\u003cli\u003esupport for cursor.executemany() operating on large input data in batches\u003c/li\u003e\n\u003cli\u003efine-grained control over LOB and number handling\u003c/li\u003e\n\u003cli\u003enew optional install dependencies for plugins\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-3-4-0-october-2025\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/601f2b4677aa6733a9739359e2da889f0f98e2ac\"\u003e\u003ccode\u003e601f2b4\u003c/code\u003e\u003c/a\u003e Preparing to release python-oracledb 26.0.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/7082aadc63b3a06edccd3a7e8ea8fff8a249f671\"\u003e\u003ccode\u003e7082aad\u003c/code\u003e\u003c/a\u003e Tweak release notes as suggested.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/36fa3ae7009e3d2cb15c17b7d8dddd9e63935396\"\u003e\u003ccode\u003e36fa3ae\u003c/code\u003e\u003c/a\u003e Tidy up tests to ensure cleanup works as it should.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/a7b8c60d8bb5e7d676c5c813691c27ebb710a89b\"\u003e\u003ccode\u003ea7b8c60\u003c/code\u003e\u003c/a\u003e Add Cython declaration to avoid attribute error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/9aa77531783aa3ddd88d47f53996c1eb5659c7ec\"\u003e\u003ccode\u003e9aa7753\u003c/code\u003e\u003c/a\u003e Fixed typo.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/c41a5cceeb69ceaadcca18b0fa1139d6963ff28a\"\u003e\u003ccode\u003ec41a5cc\u003c/code\u003e\u003c/a\u003e Change Oracle Database 26ai to Oracle AI Database 26ai.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/94f94c1421b318389f90057774219953715baeff\"\u003e\u003ccode\u003e94f94c1\u003c/code\u003e\u003c/a\u003e Ensure the HA readiness piggyback is not sent for client initiated connections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/b6b14c23d8d9c8a663217b7c0bceb46257ff114a\"\u003e\u003ccode\u003eb6b14c2\u003c/code\u003e\u003c/a\u003e Added directory name to test functions for better differentiation of tests.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/d1703fbef113f4f268cb2e1a3b5386acbb1b8e74\"\u003e\u003ccode\u003ed1703fb\u003c/code\u003e\u003c/a\u003e Small tweaks in preparing for release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/bf0ea3cfb203dea1a7170e711f835af47f96dd4d\"\u003e\u003ccode\u003ebf0ea3c\u003c/code\u003e\u003c/a\u003e Added method AsyncConnection.terminate() as requested (\u003ca href=\"https://redirect.github.com/oracle/python-oracledb/issues/602\"\u003e#602\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/oracle/python-oracledb/compare/v2.5.0...v26.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymssql` from 2.3.5 to 2.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymssql/pymssql/releases\"\u003epymssql's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epymssql 2.0 greenish\u003c/h2\u003e\n\u003cp\u003eExperimental support for greening for gevent, etc.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymssql/pymssql/blob/master/ChangeLog.rst\"\u003epymssql's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion 2.4.1 - 2026-09-07 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix socket resource leak on failed connections (\u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1002\"\u003e#1002\u003c/a\u003e), thanks to gintsmurans.\u003c/li\u003e\n\u003cli\u003eEnable free-threaded Python 3.14 wheel builds (\u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1004\"\u003e#1004\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd wheels for Python 3.15 (PR \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1016\"\u003e#1016\u003c/a\u003e), thanks to edgarrmondragon.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.4.0 - 2026-08-31 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate license information in pyproject.toml, thanks to ecederstrand (PR \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1003\"\u003e#1003\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUpdate win-iconv to 0.0.10.\u003c/li\u003e\n\u003cli\u003eFix datetime conversion for BCP operations and build on Windows (PR \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1015\"\u003e#1015\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUpdate to latest OpenSSL version on Windows (currently 4.0.2).\u003c/li\u003e\n\u003cli\u003eUpdate FreeTDS to 1.5.19 for wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.3.13 - 2026-02-13 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix type stubs with generics, overloads, and corrected types, thanks to jacks0n.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.3.12 - 2026-02-10 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate manylinux base image to manylinux_2_28 to fix CVE-2023-0464, thanks to \u003ca href=\"mailto:grgalex@ba.uoa.gr\"\u003egrgalex@ba.uoa.gr\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.3.11 - 2025-12-30 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop build of MacOS-13 wheels (The macOS-13 based runner images are now retired on GitHub).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/dfb9051a2b59ed96d7281725ca13d23e8740dd69\"\u003e\u003ccode\u003edfb9051\u003c/code\u003e\u003c/a\u003e Update ChangeLog.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/0908736864edb75175f3eb4bd6f67052bc06eb73\"\u003e\u003ccode\u003e0908736\u003c/code\u003e\u003c/a\u003e Add concurrency limits to wheel-building job\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/8fdadd4a0ca173fbe1c0ddb188ac495f70003d7c\"\u003e\u003ccode\u003e8fdadd4\u003c/code\u003e\u003c/a\u003e PyPy is opt-in, so no need to skip it\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/926541e8f6f5e79f78ae5b1f1bcb429525efb3e4\"\u003e\u003ccode\u003e926541e\u003c/code\u003e\u003c/a\u003e Build Python 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/9a21ce75f656a5f11bfb81a81bdbf8df0bb98beb\"\u003e\u003ccode\u003e9a21ce7\u003c/code\u003e\u003c/a\u003e Protect connection_object_list with Lock\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/c751db2073c23fa3307f93556bec5e9988a84237\"\u003e\u003ccode\u003ec751db2\u003c/code\u003e\u003c/a\u003e Add free-threaded Python specific tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/42a4f4ae8805902a82fa78de58630d3ca33f9664\"\u003e\u003ccode\u003e42a4f4a\u003c/code\u003e\u003c/a\u003e Enable free-threaded Python 3.14 wheel builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/0be64d18292fcef70a123bd4c1e22a2d54edbbff\"\u003e\u003ccode\u003e0be64d1\u003c/code\u003e\u003c/a\u003e Fix socket resource leak on failed connections (\u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1002\"\u003e#1002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/deda6bc823ceb3c496ea4e53c8aec7a9f48321fd\"\u003e\u003ccode\u003ededa6bc\u003c/code\u003e\u003c/a\u003e Add test for \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/968\"\u003e#968\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/ade7bd1d1cbe98e59ca8d0728a71226b4d60a2e1\"\u003e\u003ccode\u003eade7bd1\u003c/code\u003e\u003c/a\u003e Update ChangeLog.rst\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymssql/pymssql/compare/v2.3.5...v2.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 42.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/42.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `types-pyyaml` from 6.0.12.20260815 to 6.0.12.20260906\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/typeshed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-core` from 2.46.5 to 2.49.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e","html_url":"https://github.com/ribeiro11075/bauta/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ribeiro11075%2Fbauta/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"},{"uuid":"5526786470","node_id":"PR_kwDOSyHRgs8AAAABEanxKw","number":89,"state":"closed","title":"chore(deps): update cryptography requirement from \u003c49.0.0,\u003e=48.0.1 to \u003e=48.0.1,\u003c51.0.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-09-21T20:59:37.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-21T12:10:18.000Z","updated_at":"2026-09-21T20:59:47.000Z","time_to_close":31759,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"cryptography","old_version":"\u003c49.0.0,\u003e=48.0.1","new_version":"\u003e=48.0.1,\u003c51.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/commits/50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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\u003c/details\u003e","html_url":"https://github.com/thalovant/thalovant-python-sdk/pull/89","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalovant%2Fthalovant-python-sdk/issues/89","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/89/packages"},{"uuid":"5519620660","node_id":"PR_kwDOT6dLns8AAAABEU-lYg","number":7,"state":"closed","title":"Bump the runtime-and-build group across 1 directory with 43 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-27T18:16:24.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-20T18:19:37.000Z","updated_at":"2026-09-27T18:16:26.000Z","time_to_close":604607,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"runtime-and-build","update_count":43,"packages":[{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"sqlalchemy","old_version":"2.0.51","new_version":"2.0.54","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"alembic","old_version":"1.19.1","new_version":"1.20.0","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.14.2","new_version":"4.15.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"charset-normalizer","old_version":"3.4.9","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.4.2","new_version":"8.5.0","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"gitpython","old_version":"3.1.58","new_version":"3.1.62","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"greenlet","old_version":"3.5.4","new_version":"3.5.6","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.18","new_version":"3.20","repository_url":"https://github.com/kjd/idna"},{"name":"joblib","old_version":"1.5.3","new_version":"1.6.0","repository_url":"https://github.com/joblib/joblib"},{"name":"narwhals","old_version":"2.24.0","new_version":"2.26.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"neo4j","old_version":"6.2.0","new_version":"6.3.1","repository_url":"https://github.com/neo4j/neo4j-python-driver"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.49.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.12.1","new_version":"5.13.0","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"scikit-learn","old_version":"1.9.0","new_version":"1.9.1","repository_url":"https://github.com/scikit-learn/scikit-learn"},{"name":"sse-starlette","old_version":"3.4.8","new_version":"3.4.11","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"threadpoolctl","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/joblib/threadpoolctl"},{"name":"typing-inspection","old_version":"0.4.2","new_version":"0.4.4","repository_url":"https://github.com/pydantic/typing-inspection"},{"name":"urllib3","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"websockets","old_version":"17.0.1","new_version":"17.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"ast-serialize","old_version":"0.8.0","new_version":"0.11.2","repository_url":"https://github.com/mypyc/ast_serialize"},{"name":"build","old_version":"1.5.0","new_version":"1.6.1","repository_url":"https://github.com/pypa/build"},{"name":"coverage","old_version":"7.15.4","new_version":"7.16.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"googleapis-common-protos","old_version":"1.75.1","new_version":"1.75.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.83.0","new_version":"1.84.0","repository_url":"https://github.com/grpc/grpc"},{"name":"httpcore2","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"httpx2","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"mcp","old_version":"2.0.0","new_version":"2.2.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mcp-types","old_version":"2.0.0","new_version":"2.2.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pip-tools","old_version":"7.6.0","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"platformdirs","old_version":"4.11.1","new_version":"4.11.9","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"protobuf","old_version":"7.35.1","new_version":"7.36.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pyproject-hooks","old_version":"1.2.0","new_version":"1.3.3","repository_url":"https://github.com/pypa/pyproject-hooks"},{"name":"reportlab","old_version":"5.0.0","new_version":"5.0.1"},{"name":"ruff","old_version":"0.16.2","new_version":"0.16.8","repository_url":"https://github.com/astral-sh/ruff"},{"name":"wheel","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"}],"path":null,"ecosystem":"pip"},"body":"Bumps the runtime-and-build group with 43 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.51` | `2.0.54` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.19.1` | `1.20.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.2` | `4.15.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.9` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.4.2` | `8.5.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.58` | `3.1.62` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.4` | `3.5.6` |\n| [idna](https://github.com/kjd/idna) | `3.18` | `3.20` |\n| [joblib](https://github.com/joblib/joblib) | `1.5.3` | `1.6.0` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.24.0` | `2.26.0` |\n| [neo4j](https://github.com/neo4j/neo4j-python-driver) | `6.2.0` | `6.3.1` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.49.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.12.1` | `5.13.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [scikit-learn](https://github.com/scikit-learn/scikit-learn) | `1.9.0` | `1.9.1` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.4.8` | `3.4.11` |\n| [threadpoolctl](https://github.com/joblib/threadpoolctl) | `3.6.0` | `3.7.0` |\n| [typing-inspection](https://github.com/pydantic/typing-inspection) | `0.4.2` | `0.4.4` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.7.0` | `2.8.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.1` | `0.53.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `17.0.1` | `17.1` |\n| [ast-serialize](https://github.com/mypyc/ast_serialize) | `0.8.0` | `0.11.2` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.6.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.4` | `7.16.1` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.75.1` | `1.75.3` |\n| [grpcio](https://github.com/grpc/grpc) | `1.83.0` | `1.84.0` |\n| [httpcore2](https://github.com/pydantic/httpx2) | `2.10.0` | `2.13.0` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.10.0` | `2.13.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `2.0.0` | `2.2.0` |\n| [mcp-types](https://github.com/modelcontextprotocol/python-sdk) | `2.0.0` | `2.2.0` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.6.0` | `7.6.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.11.1` | `4.11.9` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `7.35.1` | `7.36.1` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [pyproject-hooks](https://github.com/pypa/pyproject-hooks) | `1.2.0` | `1.3.3` |\n| [reportlab](https://www.reportlab.com/) | `5.0.0` | `5.0.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.2` | `0.16.8` |\n| [wheel](https://github.com/pypa/wheel) | `0.47.0` | `0.48.0` |\n\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.51 to 2.0.54\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.54\u003c/h1\u003e\n\u003cp\u003eReleased: September 15, 2026\u003c/p\u003e\n\u003ch2\u003eplatform\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [change]\u003c/strong\u003e Binary wheels are no longer built for Python 3.7.  PyPI now rejects wheel\nfiles whose filename does not begin with the normalized project name, and\nthe packaging tools that can be installed on Python 3.7 do not produce\nsuch a filename.  As a result, SQLAlchemy 2.0.44 was the last release to\npublish Python 3.7 wheels to PyPI, and releases 2.0.45 and later have\nbeen available on Python 3.7 only as a source distribution; the wheel\nbuilds for Python 3.7 are now removed.  Python 3.7 remains supported by\nthe 2.0 series.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [bug]\u003c/strong\u003e Fixed issue where the Cython extensions were compiled without the\n\u003ccode\u003efreethreading_compatible\u003c/code\u003e directive, so that they did not declare\nthemselves as safe to run without the GIL.  On a free-threaded Python\ninterpreter such as Python 3.13t or 3.14t, importing SQLAlchemy would\ncause the interpreter to re-enable the GIL, emitting a\n\u003ccode\u003eRuntimeWarning\u003c/code\u003e.  The directive is now set when building for Python\n3.13 and above, and a test has been added which confirms that importing\nSQLAlchemy on a free-threaded build does not enable the GIL.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13592\"\u003e#13592\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.0.53\u003c/h1\u003e\n\u003cp\u003eReleased: September 14, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where an expression passed to \u003ccode\u003e_orm.with_expression()\u003c/code\u003e\nthat embedded a \u003ccode\u003e_sql.select()\u003c/code\u003e, such as a correlated\n\u003ccode\u003e_sql.exists()\u003c/code\u003e, would fail to populate the attribute correctly on\nthe second and subsequent executions of an otherwise identical\nstatement, when the \u003ccode\u003e_orm.query_expression()\u003c/code\u003e attribute was loaded\nby a relationship loader that emits a second query, i.e.\n\u003ccode\u003e_orm.selectinload()\u003c/code\u003e, \u003ccode\u003e_orm.lazyload()\u003c/code\u003e or\n\u003ccode\u003e_orm.immediateload()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13560\"\u003e#13560\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed memory issue where mapped classes, along with their\n\u003ccode\u003eTable\u003c/code\u003e and \u003ccode\u003e_orm.Mapper\u003c/code\u003e objects, would not be garbage\ncollected after the \u003ccode\u003e_orm.registry\u003c/code\u003e in which they were mapped had\nbeen disposed and dereferenced.  The issue would occur for mappings that\nmade use of \u003ccode\u003e_orm.relationship()\u003c/code\u003e together with constructs such as an\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.19.1 to 1.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.20.0\u003c/h1\u003e\n\u003cp\u003eReleased: September 11, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [batch]\u003c/strong\u003e Added a warning for the case where an unnamed CHECK constraint on a\nreflected table is omitted from a batch \u0026quot;recreate\u0026quot; operation.  An unnamed\nCHECK constraint can't be reliably carried over in a batch recreate\nas it may refer to columns that are being dropped or changed.  This\nomission was previously a silent operation.   The presence of any\n\u003ccode\u003e~sqlalchemy.schema.CheckConstraint\u003c/code\u003e in\n\u003ccode\u003eOperations.batch_alter_table.table_args\u003c/code\u003e is taken to indicate\nthat the case has been accommodated, and no warning is emitted.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1846\"\u003e#1846\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [autogenerate]\u003c/strong\u003e Autogenerate now renders a warning comment above any rendered\n\u003ccode\u003eOperations.drop_constraint()\u003c/code\u003e directive for which the constraint name\nis \u003ccode\u003eNone\u003c/code\u003e, as is the case when a constraint that has no name in the model\nis dropped, most typically within the \u003ccode\u003edowngrade()\u003c/code\u003e function of a\nmigration that adds an unnamed constraint.  A warning is also emitted on\nthe console when the migration script is generated.   The directive\nrequires a non-None name in order to be able to emit a \u0026quot;DROP CONSTRAINT\u0026quot;\ncommand.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/916\"\u003e#916\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where adding a column with a type that generates\nits own CHECK constraint, such as \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or\n\u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e with\n\u003ccode\u003e~sqlalchemy.types.Boolean.create_constraint\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e,\nwould emit the constraint twice when the table was recreated, once under\nthe name generated by the naming convention in use and once under the\nname given to the type.  The constraint is now emitted once, using the\nsame name that would be used outside of batch mode.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1768\"\u003e#1768\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where a CHECK constraint generated by a type such\nas \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or \u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e\nwould lose the name established for it by the naming convention in use\nwhen the table was recreated, as the constraint was regenerated against\nthe temporary table used for the recreate operation.  The naming\nconvention is now resolved against the name of the table being replaced.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.2 to 4.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplemented a compatibility fix for supporting direct access of \u003ccode\u003eanyio.*\u003c/code\u003e submodules from the main package even when those submodules were not directly imported first (\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311\"\u003e#1311\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311%5C%3E\"\u003eagronholm/anyio#1311\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for the newer keyword-only arguments on \u003ccode\u003eanyio.Path\u003c/code\u003e methods to match the standard library \u003ccode\u003epathlib.Path\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eexists()\u003c/code\u003e (Python 3.12+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_dir()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_file()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eowner()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003egroup()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enewline\u003c/code\u003e on \u003ccode\u003eread_text()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1286\"\u003e#1286\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1293\"\u003e#1293\u003c/a\u003e; PR by \u003ca href=\"https://github.com/jaideeppyne\"\u003e\u003ccode\u003e@​jaideeppyne\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eamap\u003c/code\u003e, \u003ccode\u003egather\u003c/code\u003e, and \u003ccode\u003eas_completed\u003c/code\u003e utility functions to simplify common patterns (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1173\"\u003e#1173\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003e--anyio-mode\u003c/code\u003e command-line option as an alternative to the \u003ccode\u003eanyio_mode\u003c/code\u003e ini setting, and fix the pytest plugin's auto mode detection to recognize the mode when set via either mechanism(e.g: \u003ccode\u003epytest_asyncio\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1242\"\u003e#1242\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003eanyio.Future\u003c/code\u003e synchronization primitive which behaves similar to \u003ccode\u003easyncio.Future\u003c/code\u003e, allowing tasks to wait for a value (or exception) from another task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1146\"\u003e#1146\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded guidance for managing multiple memory object stream producers and consumers with cloned streams (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/330\"\u003e#330\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nightcityblade\"\u003e\u003ccode\u003e@​nightcityblade\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eStapledObjectStream.send_nowait()\u003c/code\u003e that delegates to the underlying \u003ccode\u003eObjectSendStream\u003c/code\u003e, if it implements it (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1241\"\u003e#1241\u003c/a\u003e; PR by \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003emove_on_at()\u003c/code\u003e and \u003ccode\u003efail_at()\u003c/code\u003e functions to complement \u003ccode\u003emove_on_after()\u003c/code\u003e and \u003ccode\u003efail_after()\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the default name for a task spawned with \u003ccode\u003eTaskGroup.create_task(func())\u003c/code\u003e to match the default task name for the analogous task spawned with \u003ccode\u003eTaskGroup.start_soon(func)\u003c/code\u003e or \u003ccode\u003eTaskGroup.start(func)\u003c/code\u003e in more situations. Previously, the default name of a \u003ccode\u003eTaskGroup.create_task\u003c/code\u003e task never included the module name. (The default name for a task spawned with \u003ccode\u003eTaskGroup.start_soon\u003c/code\u003e or \u003ccode\u003eTaskGroup.start\u003c/code\u003e typically includes the module name.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1234\"\u003e#1234\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the \u003ccode\u003eanyio\u003c/code\u003e and \u003ccode\u003eanyio.abc\u003c/code\u003e modules to lazily (much like \u003ccode\u003e810\u003c/code\u003e) import the necessary submodules. This is done by parsing the AST of the module and building a lookup table from the \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block. A fallback mode has been provided for installations where the source code is unavailable (e.g. PyInstaller). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1169\"\u003e#1169\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed free-threading compatibility issues arising from the fact that on Python 3.14 free-threading builds, newly created threads inherit the current context by default, causing AnyIO to behave erroneously in relation to \u003ccode\u003estart_blocking_portal()\u003c/code\u003e and \u003ccode\u003eanyio.to_thread.run_sync()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1224\"\u003e#1224\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eSpooledTemporaryFile.readinto()\u003c/code\u003e and \u003ccode\u003ereadinto1()\u003c/code\u003e reading twice before rollover, so the destination buffer was overwritten by the second read and the file position advanced twice, silently losing data (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1215\"\u003e#1215\u003c/a\u003e; PR by \u003ca href=\"https://github.com/c-tonneslan\"\u003e\u003ccode\u003e@​c-tonneslan\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003efail_after\u003c/code\u003e (and the new \u003ccode\u003efail_at\u003c/code\u003e) allowing for added exception context when raising \u003ccode\u003eTimeoutError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1227\"\u003e#1227\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the default \u003ccode\u003eTaskHandle.name\u003c/code\u003e missing part of the task name for tasks started with \u003ccode\u003eTaskGroup.start\u003c/code\u003e on Trio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1231\"\u003e#1231\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.run\u003c/code\u003e leaking, or at least, delaying collection of loop and root_task due to the root task being cached in a \u003ccode\u003eRunVar\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1203\"\u003e#1203\u003c/a\u003e; PR by \u003ca href=\"https://github.com/tapetersen\"\u003e\u003ccode\u003e@​tapetersen\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.Path.with_stem()\u003c/code\u003e silently producing a wrong path (e.g. \u003ccode\u003ePath(\u0026quot;.txt\u0026quot;)\u003c/code\u003e) instead of raising \u003ccode\u003eValueError\u003c/code\u003e when given an empty stem on a path with a non-empty suffix, unlike \u003ccode\u003epathlib.PurePath.with_stem\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1200\"\u003e#1200\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eUNIXSocketStream.aclose()\u003c/code\u003e raising \u003ccode\u003easyncio.InvalidStateError\u003c/code\u003e when a concurrent receive or send operation had just been cancelled on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1267\"\u003e#1267\u003c/a\u003e; PR by \u003ca href=\"https://github.com/alloutflo\"\u003e\u003ccode\u003e@​alloutflo\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the pytest plugin importing the deprecated \u003ccode\u003e_pytest.python.CallSpec2\u003c/code\u003e alias, which triggers \u003ccode\u003ePytestRemovedIn10Warning\u003c/code\u003e on \u003ccode\u003epytest\u0026gt;=9.2\u003c/code\u003e and crashes pytest at startup when \u003ccode\u003efilterwarnings = error\u003c/code\u003e is configured (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1271\"\u003e#1271\u003c/a\u003e; PR by \u003ca href=\"https://github.com/matthewfeickert\"\u003e\u003ccode\u003e@​matthewfeickert\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an asyncio worker thread race that could raise \u003ccode\u003eRuntimeError\u003c/code\u003e when the event loop closed between checking its state and scheduling the worker result (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1265\"\u003e#1265\u003c/a\u003e; PR by \u003ca href=\"https://github.com/hansu650\"\u003e\u003ccode\u003e@​hansu650\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens when \u003ccode\u003etotal_tokens\u003c/code\u003e was raised while the limiter was over-subscribed (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1223\"\u003e#1223\u003c/a\u003e; PR by \u003ca href=\"https://github.com/zelinewang\"\u003e\u003ccode\u003e@​zelinewang\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffcd1542cd6d127980205f90a0100078849dd703\"\u003e\u003ccode\u003effcd154\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/0ecf5ed98d294242509b043ebd1a0843e52d892f\"\u003e\u003ccode\u003e0ecf5ed\u003c/code\u003e\u003c/a\u003e Added a workaround for third party code accessing unimported submodules (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/928366259543412a2deb1e2ba09ea45ffa92ef4f\"\u003e\u003ccode\u003e9283662\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d137692a90f76e4f71605e32ea5ca94cab3a539d\"\u003e\u003ccode\u003ed137692\u003c/code\u003e\u003c/a\u003e Improved the instructions for AI agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/033fc52b8fa8e90c5d0ef24b10b3860e974a6265\"\u003e\u003ccode\u003e033fc52\u003c/code\u003e\u003c/a\u003e Shield TemporaryDirectory cleanup from cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1304\"\u003e#1304\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/942e9a6552cc10b5aaa779d84bfc8e2c3d5fcffc\"\u003e\u003ccode\u003e942e9a6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1305\"\u003e#1305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b825c3be7cb4ca1a8000b8065d4e147843deb704\"\u003e\u003ccode\u003eb825c3b\u003c/code\u003e\u003c/a\u003e Fixed pyproject.toml changes not triggering the test suite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9727dc504681e2986b5bc285de9571fb467539af\"\u003e\u003ccode\u003e9727dc5\u003c/code\u003e\u003c/a\u003e Fixed start inconsistencies between trio and asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b05fe6d160a640355c201363cab286a7d2581da8\"\u003e\u003ccode\u003eb05fe6d\u003c/code\u003e\u003c/a\u003e Fixed wrong type in move_on_after (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1297\"\u003e#1297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44d0c93cc20079acbf38ba4dbed5ab9df323f153\"\u003e\u003ccode\u003e44d0c93\u003c/code\u003e\u003c/a\u003e Fixed asyncio task group coroutine cleanup (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.2...4.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.9 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.9...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.2 to 8.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.5.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.5.0/\"\u003ehttps://pypi.org/project/click/8.5.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-5-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-5-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/33\"\u003ehttps://github.com/pallets/click/milestone/33\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2672\"\u003e#2672\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3637\"\u003e#3637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2986\"\u003e#2986\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3505\"\u003e#3505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2983\"\u003e#2983\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3473\"\u003e#3473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when \u003ca href=\"https://redirect.github.com/pallets/click/issues/2969\"\u003e#2969\u003c/a\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3572\"\u003e#3572\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3653\"\u003e#3653\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2877\"\u003e#2877\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3642\"\u003e#3642\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/3581\"\u003e#3581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3677\"\u003e#3677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2819\"\u003e#2819\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3678\"\u003e#3678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3681\"\u003e#3681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.5.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-08-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. {issue}\u003ccode\u003e2672\u003c/code\u003e {pr}\u003ccode\u003e3637\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. {issue}\u003ccode\u003e2986\u003c/code\u003e {pr}\u003ccode\u003e3505\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. {issue}\u003ccode\u003e2983\u003c/code\u003e {pr}\u003ccode\u003e3473\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when {pr}\u003ccode\u003e2969\u003c/code\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. {issue}\u003ccode\u003e3572\u003c/code\u003e {pr}\u003ccode\u003e3653\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix test failures when using pytest \u0026gt;= 9.1. {pr}\u003ccode\u003e3656\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. {issue}\u003ccode\u003e2877\u003c/code\u003e {pr}\u003ccode\u003e3642\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). {pr}\u003ccode\u003e3581\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. {pr}\u003ccode\u003e3677\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n{issue}\u003ccode\u003e2819\u003c/code\u003e {pr}\u003ccode\u003e3678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. {pr}\u003ccode\u003e3681\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\ntime. {pr}\u003ccode\u003e3641\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eget_binary_stream\u003c/code\u003e and {func}\u003ccode\u003eget_text_stream\u003c/code\u003e are deprecated and\nwill be removed in Click 9.0. {issue}\u003ccode\u003e3481\u003c/code\u003e {pr}\u003ccode\u003e3695\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe following \u003ccode\u003eclick.utils\u003c/code\u003e names were never intentionally public and are\nnow private (\u003ccode\u003e_\u003c/code\u003e-prefixed). The old names remain available with a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e until Click 9.0: \u003ccode\u003eLazyFile\u003c/code\u003e, \u003ccode\u003eKeepOpenFile\u003c/code\u003e,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8b19813f2bfca99f1018a587a8cf54fc959f2e5d\"\u003e\u003ccode\u003e8b19813\u003c/code\u003e\u003c/a\u003e Release version 8.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2c8cd3ac958a7eb316d67f2d316c27086c4c0369\"\u003e\u003ccode\u003e2c8cd3a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3778\"\u003e#3778\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/131c86aadddfa5cb6dca8339c9d6294c4eacb8ac\"\u003e\u003ccode\u003e131c86a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e1fd5946ab26aaf372009eaff1acf947140b40fb\"\u003e\u003ccode\u003ee1fd594\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a1d87858abd77fa8e3ffc204670ccd75b96c4781\"\u003e\u003ccode\u003ea1d8785\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2103e157683c5e4cadc8ee1838df526a54bde9a4\"\u003e\u003ccode\u003e2103e15\u003c/code\u003e\u003c/a\u003e Forward all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e and improve flag detection (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3777\"\u003e#3777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a6256bfb5971d5e58585fe7b6c656134e1ade5a4\"\u003e\u003ccode\u003ea6256bf\u003c/code\u003e\u003c/a\u003e Forwards all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/61b69e967e525bd502f5bf42def4d551e761fe0e\"\u003e\u003ccode\u003e61b69e9\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3776\"\u003e#3776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/9835b0f7612d1b1ea180a975fd6d24cf16791ba8\"\u003e\u003ccode\u003e9835b0f\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f36d58bbd7f188178de2d4fe1d0292c510375ca7\"\u003e\u003ccode\u003ef36d58b\u003c/code\u003e\u003c/a\u003e Refactor pager stream handling (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3767\"\u003e#3767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.2...8.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gitpython` from 3.1.58 to 3.1.62\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gitpython-developers/GitPython/releases\"\u003egitpython's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.62\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare next release by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2222\"\u003egitpython-developers/GitPython#2222\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep bare-repository worktrees non-bare by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2224\"\u003egitpython-developers/GitPython#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject unsafe submodule checkout paths by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2225\"\u003egitpython-developers/GitPython#2225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e from v0.16.0 to 0.16.5 in the pre-commit group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2226\"\u003egitpython-developers/GitPython#2226\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: join backslash line continuations when reading config values by \u003ca href=\"https://github.com/nkbeast\"\u003e\u003ccode\u003e@​nkbeast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2227\"\u003egitpython-developers/GitPython#2227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nkbeast\"\u003e\u003ccode\u003e@​nkbeast\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2227\"\u003egitpython-developers/GitPython#2227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.61...3.1.62\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.61...3.1.62\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.1.61\u003c/h2\u003e\n\u003cp\u003eFix accidental removal of exploitable regex in \u003ccode\u003eActor\u003c/code\u003e by bringing it back, and deprecating it.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix repository discovery precedence by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2218\"\u003egitpython-developers/GitPython#2218\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: wait for git daemon to listen before connecting by \u003ca href=\"https://github.com/Vogtinator\"\u003e\u003ccode\u003e@​Vogtinator\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2219\"\u003egitpython-developers/GitPython#2219\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore Actor.name_email_regex by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2221\"\u003egitpython-developers/GitPython#2221\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Vogtinator\"\u003e\u003ccode\u003e@​Vogtinator\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2219\"\u003egitpython-developers/GitPython#2219\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.60...3.1.61\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.60...3.1.61\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.1.60 Security\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare changelog prior to release by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2212\"\u003egitpython-developers/GitPython#2212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve Git config escape semantics by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2213\"\u003egitpython-developers/GitPython#2213\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHarden diff path and actor identity parsing by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2215\"\u003egitpython-developers/GitPython#2215\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire explicit opt-in for filesystem diffs by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2217\"\u003egitpython-developers/GitPython#2217\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.59...3.1.60\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.59...3.1.60\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.1.59 - Security\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare changelog for upcoming release by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2207\"\u003egitpython-developers/GitPython#2207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlock file-reading Git options by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2208\"\u003egitpython-developers/GitPython#2208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eindex: write blobs via git hash-object, not gitdb's odb.store by \u003ca href=\"https://github.com/caroescm\"\u003e\u003ccode\u003e@​caroescm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2209\"\u003egitpython-developers/GitPython#2209\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlock separate git directories during clone by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2210\"\u003egitpython-developers/GitPython#2210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: harden config parsing boundaries by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2211\"\u003egitpython-developers/GitPython#2211\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erepo.index.add()\u003c/code\u003e now respects worktree filters  \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2209\"\u003egitpython-developers/GitPython#2209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.58...3.1.59\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.58...3.1.59\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/db47516dac750c5968b8f6d388b18712c355df50\"\u003e\u003ccode\u003edb47516\u003c/code\u003e\u003c/a\u003e prepare new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/10ec385a725fee70def3d9bb7b52208e75174068\"\u003e\u003ccode\u003e10ec385\u003c/code\u003e\u003c/a\u003e get better commit messages from agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/b7548979693b3f7c8d13b8da2b7c3ecef07327da\"\u003e\u003ccode\u003eb754897\u003c/code\u003e\u003c/a\u003e test: cover subdirectory discovery and pathspec commands in bare-repo worktre...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/9ebf8b62dfb9ca05178334dc909a4d9a52b505df\"\u003e\u003ccode\u003e9ebf8b6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2227\"\u003e#2227\u003c/a\u003e from nkbeast/fix-config-backslash-continuation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/a15f7910d1d9a169b5a0c7adf14ce9bf4ede35d0\"\u003e\u003ccode\u003ea15f791\u003c/code\u003e\u003c/a\u003e fix: parse joined config values as a whole\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/60dd9467a73140e00b0d1b0857df5176660b3832\"\u003e\u003ccode\u003e60dd946\u003c/code\u003e\u003c/a\u003e fix: ignore continuation markers in config comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/075a664f3da8564c44f2b74536914b9ce9fb4cc1\"\u003e\u003ccode\u003e075a664\u003c/code\u003e\u003c/a\u003e fix: join backslash line continuations when reading config values\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/62d1e2f63ec51f868781c79f8280dc90b46af987\"\u003e\u003ccode\u003e62d1e2f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2226\"\u003e#2226\u003c/a\u003e from gitpython-developers/dependabot/pre_commit/pre-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/23d0e9269c84573129acd1f90dbedf639e889c8f\"\u003e\u003ccode\u003e23d0e92\u003c/code\u003e\u003c/a\u003e build(deps): bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/8a14adc62401f6b3cb8d9dcf8fa78615810a7e98\"\u003e\u003ccode\u003e8a14adc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2225\"\u003e#2225\u003c/a\u003e from gitpython-developers/submodule-path-hardening\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.58...3.1.62\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.5.4 to 3.5.6\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.5.6 (2026-09-14)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect a race condition that could lead to garbage collection\nunintentionally being disabled. See \u003ccode\u003ePR 529 \u0026lt;https://github.com/python-greenlet/greenlet/pull/529\u0026gt;\u003c/code\u003e_ by Yurii.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.5 (2026-08-10)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eLink the C++ runtime statically into the Windows wheels again, as the\nAppveyor builds did through 3.3.0. Since 3.3.1 \u003ccode\u003e_greenlet.pyd\u003c/code\u003e\nimported \u003ccode\u003eMSVCP140.dll\u003c/code\u003e, which no Windows CPython distribution ships,\nso importing greenlet failed on machines without the Visual C++\nredistributable. See \u003ccode\u003eissue 525 \u0026lt;https://github.com/python-greenlet/greenlet/issues/525\u0026gt;\u003c/code\u003e_. Issue\nand pull request by Daniel Sticker.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. note::\nBinary 3.15 wheels are now built with 3.15.0rc1. This should be\ncompatible with future 3.15 releases and is believed compatible\nwith 3.15b4 as well (but not earlier versions).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/abfe740315a9926ff180c622cf02f122c07f9126\"\u003e\u003ccode\u003eabfe740\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e23e3e47df21bbc7a83219621ce4966d349f7d2b\"\u003e\u003ccode\u003ee23e3e4\u003c/code\u003e\u003c/a\u003e Change note for \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8de830f6df6fefd533fedbe4bb0a2028bcf77372\"\u003e\u003ccode\u003e8de830f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e from Georggi/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/72d7cacf4cf667f92786db306be095b6041bca5a\"\u003e\u003ccode\u003e72d7cac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/530\"\u003e#530\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ac01b7d1a6b3a4d2477c17a1047af6d0056d69a7\"\u003e\u003ccode\u003eac01b7d\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e18f5a6d2696c031d34cf4933dcdd6a8e37f6f85\"\u003e\u003ccode\u003ee18f5a6\u003c/code\u003e\u003c/a\u003e Simplify GCDisabledGuard constructor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6aaf3af698aa7789075a904e5bbb70e24df06553\"\u003e\u003ccode\u003e6aaf3af\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ddb14535002029347139ce137c137a04eecf61c5\"\u003e\u003ccode\u003eddb1453\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/7de515cc948fcbca31abc672e0db9bf5d51460a5\"\u003e\u003ccode\u003e7de515c\u003c/code\u003e\u003c/a\u003e Update CHANGES: Credit for issue 525 and note about 3.15 binary wheels [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f3746aa53b16a2a13e8894e3fd91a13c4578a428\"\u003e\u003ccode\u003ef3746aa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/526\"\u003e#526\u003c/a\u003e from stickerdaniel/windows-static-runtime\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.4...3.5.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.18 to 3.20\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/releases\"\u003eidna's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.20\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 18.0.0.\u003c/li\u003e\n\u003cli\u003eBetter enforcement of the domain length limit in the incremental\ncodec.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.19\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestore the \u003ccode\u003estd3_rules\u003c/code\u003e option, which had no effect since changes\nto UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e processing in Unicode 16. Note that \u003ccode\u003euts46_remap()\u003c/code\u003e\ndefaults to enabling STD3 rules, so direct callers will see input\ncontaining non-LDH ASCII characters rejected again.\u003c/li\u003e\n\u003cli\u003ePerformance improvements to UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e mapping, particularly for\nASCII-only domains.\u003c/li\u003e\n\u003cli\u003eTest on free-threaded CPython with the GIL disabled and document\nthread safety.\u003c/li\u003e\n\u003cli\u003eExpose the Unicode version of the generated tables as\n\u003ccode\u003eidna.unicode_version\u003c/code\u003e, and show it in \u003ccode\u003eidna --version\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecode\u003c/code\u003e, \u003ccode\u003etext\u003c/code\u003e, \u003ccode\u003ecodepoint\u003c/code\u003e and \u003ccode\u003eposition\u003c/code\u003e attributes to\n\u003ccode\u003eIDNAError\u003c/code\u003e so that the failed rule and the offending character can\nbe identified without parsing the exception message.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003etransitional\u003c/code\u003e argument to \u003ccode\u003eencode()\u003c/code\u003e and\n\u003ccode\u003euts46_remap()\u003c/code\u003e is now completely ignored, and gives a deprecation warning\nfor the latter.\u003c/li\u003e\n\u003cli\u003eReject A-labels that are not the canonical Punycode encoding of\ntheir U-label.\u003c/li\u003e\n\u003cli\u003eFix CONTEXTJ violations raising \u003ccode\u003eIDNAError\u003c/code\u003e instead of\n\u003ccode\u003eInvalidCodepointContext\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eConsistently raise \u003ccode\u003eIDNAError\u003c/code\u003e for empty labels and non-ASCII bytes\npassed to label helper functions and the incremental codec.\u003c/li\u003e\n\u003cli\u003eAdd property-based tests, extended fuzzing targets, coverage\nmeasurement, and CI checks that the data tables match the generator\noutput.\u003c/li\u003e\n\u003cli\u003eVarious code quality and tooling improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for\ncontributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.md\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.20 (2026-09-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 18.0.0.\u003c/li\u003e\n\u003cli\u003eBetter enforcement of the domain length limit in the incremental\ncodec.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.19 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestore the \u003ccode\u003estd3_rules\u003c/code\u003e option, which had no effect since changes\nto UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e processing in Unicode 16. Note that \u003ccode\u003euts46_remap()\u003c/code\u003e\ndefaults to enabling STD3 rules, so direct callers will see input\ncontaining non-LDH ASCII characters rejected again.\u003c/li\u003e\n\u003cli\u003ePerformance improvements to UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e mapping, particularly for\nASCII-only domains.\u003c/li\u003e\n\u003cli\u003eTest on free-threaded CPython with the GIL disabled and document\nthread safety.\u003c/li\u003e\n\u003cli\u003eExpose the Unicode version of the generated tables as\n\u003ccode\u003eidna.unicode_version\u003c/code\u003e, and show it in \u003ccode\u003eidna --version\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecode\u003c/code\u003e, \u003ccode\u003etext\u003c/code\u003e, \u003ccode\u003ecodepoint\u003c/code\u003e and \u003ccode\u003eposition\u003c/code\u003e attributes to\n\u003ccode\u003eIDNAError\u003c/code\u003e so that the failed rule and the offending character can\nbe identified without parsing the exception message.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003etransitional\u003c/code\u003e argument to \u003ccode\u003eencode()\u003c/code\u003e and\n\u003ccode\u003euts46_remap()\u003c/code\u003e is now completely ignored, and gives a deprecation warning\nfor the latter.\u003c/li\u003e\n\u003cli\u003eReject A-labels that are not the canonical Punycode encoding of\ntheir U-label.\u003c/li\u003e\n\u003cli\u003eFix CONTEXTJ violations raising \u003ccode\u003eIDNAError\u003c/code\u003e instead of\n\u003ccode\u003eInvalidCodepointContext\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eConsistently raise \u003ccode\u003eIDNAError\u003c/code\u003e for empty labels and non-ASCII bytes\npassed to label helper functions and the incremental codec.\u003c/li\u003e\n\u003cli\u003eAdd property-based tests, extended fuzzing targets, coverage\nmeasurement, and CI checks that the data tables match the generator\noutput.\u003c/li\u003e\n\u003cli\u003eVarious code quality and tooling improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for\ncontributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d55e65e1a3b1ede7f556bc202738066f5597e249\"\u003e\u003ccode\u003ed55e65e\u003c/code\u003e\u003c/a\u003e Release 3.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0c0824a928e50048e59d4ce55fe760dba30528bc\"\u003e\u003ccode\u003e0c0824a\u003c/code\u003e\u003c/a\u003e Pre-release 3.20rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/bd7c316a08761c79ba557b5b9e6a3da24d71fa88\"\u003e\u003ccode\u003ebd7c316\u003c/code\u003e\u003c/a\u003e Note Python 3.15 support in the 3.20 changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b6cce8523eae3442aba976f01607b1cdf797c6ff\"\u003e\u003ccode\u003eb6cce85\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/276\"\u003e#276\u003c/a\u003e from kjd/unicode-18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/9a4bc59e9d5ab89e7916fc0a50650cb55e3faf26\"\u003e\u003ccode\u003e9a4bc59\u003c/code\u003e\u003c/a\u003e Update to Unicode 18.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/dfab5a06affddcc7781a7bbab1cac1bb7d3b4e05\"\u003e\u003ccode\u003edfab5a0\u003c/code\u003e\u003c/a\u003e Merge branch 'python-3.15'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/417c35496ccbffad4b0a434ac9b563ee6f8fa0a9\"\u003e\u003ccode\u003e417c354\u003c/code\u003e\u003c/a\u003e Read the latest Unicode version from the DerivedAge.txt header instead of the...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/cd1739200f3bf07871372bcb31c271de136eaccf\"\u003e\u003ccode\u003ecd17392\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/274\"\u003e#274\u003c/a\u003e from kjd/fix-decode-length-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5796d79d44c76a54f03e8938dd22edaa1221c27\"\u003e\u003ccode\u003ec5796d7\u003c/code\u003e\u003c/a\u003e Skip the decode round-trip check for domains past encode's length limit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d6ee690bf133e874351103b9fe838fdda2a7a09f\"\u003e\u003ccode\u003ed6ee690\u003c/code\u003e\u003c/a\u003e Update to Python 3.15 release candidate in CI and add trove classifier\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.18...v3.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `joblib` from 1.5.3 to 1.6.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/joblib/joblib/blob/main/CHANGES.rst\"\u003ejoblib's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 1.6.0 - 2026/08/31\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix caching of functions whose source cannot be retrieved, such as functions\ndefined in a notebook cell. Their identity fell back to\n\u003ccode\u003estr(hash(func.__code__))\u003c/code\u003e, which is salted by \u003ccode\u003ePYTHONHASHSEED\u003c/code\u003e and so\ndiffered between processes. A worker reading the \u003ccode\u003efunc_code.py\u003c/code\u003e written by\nanother one concluded that the function had changed and wiped the whole\ncache directory for it, discarding results computed by its peers.\n\u003ccode\u003efunc_code.py\u003c/code\u003e is also no longer rewritten in place, so a reader can no\nlonger catch it half-written and draw the same conclusion.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/issues/1694\"\u003ejoblib/joblib#1694\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop python 3.9 support. The oldest supported Python version\nis now Python 3.10.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1773\"\u003ejoblib/joblib#1773\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eeval_expr\u003c/code\u003e (used to evaluate the \u003ccode\u003epre_dispatch\u003c/code\u003e argument of\n\u003ccode\u003eParallel\u003c/code\u003e) to raise a \u003ccode\u003eValueError\u003c/code\u003e as documented instead of leaking a\n\u003ccode\u003eZeroDivisionError\u003c/code\u003e for expressions that divide or take a modulo by zero.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1810\"\u003ejoblib/joblib#1810\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eMemorizedResult\u003c/code\u003e now forwards \u003ccode\u003emmap_mode\u003c/code\u003e to its store backend, so a\ncached array reconstructed from a location is memory-mapped as requested\ninstead of being loaded fully into memory.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1799\"\u003ejoblib/joblib#1799\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUnvendor cloudpickle to more quickly benefit from maintenance releases\nof cloudpickle\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1775\"\u003ejoblib/joblib#1775\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eMemory.cache\u003c/code\u003e for functions with a keyword-only argument that has a\ndefault declared before a keyword-only argument without a default.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/issue...\n\n_Description has been truncated_","html_url":"https://github.com/Bik4ram/my_project/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bik4ram%2Fmy_project/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"},{"uuid":"5516302428","node_id":"PR_kwDOQeYl_s8AAAABESeotw","number":586,"state":"open","title":"chore(deps): bump the python-runtime group with 7 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-20T06:49:46.000Z","updated_at":"2026-09-20T06:49:52.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-runtime","update_count":7,"packages":[{"name":"xrpl-py","old_version":"5.0.0","new_version":"5.2.0","repository_url":"https://github.com/XRPLF/xrpl-py"},{"name":"numpy","old_version":"2.2.6","new_version":"2.5.3","repository_url":"https://github.com/numpy/numpy"},{"name":"opencv-python","old_version":"4.13.0.92","new_version":"5.0.0.93","repository_url":"https://github.com/opencv/opencv-python"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"python-dotenv","old_version":"0.21.1","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"aiohttp","old_version":"3.14.1","new_version":"3.14.3","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-runtime group with 7 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [xrpl-py](https://github.com/XRPLF/xrpl-py) | `5.0.0` | `5.2.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.2.6` | `2.5.3` |\n| [opencv-python](https://github.com/opencv/opencv-python) | `4.13.0.92` | `5.0.0.93` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `0.21.1` | `1.2.3` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.1` | `3.14.3` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n\nUpdates `xrpl-py` from 5.0.0 to 5.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/XRPLF/xrpl-py/releases\"\u003exrpl-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(coderabbit): reduce review noise and load .ai-review/instructions.md by \u003ca href=\"https://github.com/arshjafri-ripple\"\u003e\u003ccode\u003e@​arshjafri-ripple\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1024\"\u003eXRPLF/xrpl-py#1024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: remove integration test requirement for beta releases by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1039\"\u003eXRPLF/xrpl-py#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e signing prefixes (\u003ccode\u003eSponsor\u003c/code\u003e) by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1036\"\u003eXRPLF/xrpl-py#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Support LendingProtocolV1_1 by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1034\"\u003eXRPLF/xrpl-py#1034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/XRPLF/xrpl-py/compare/v5.1.0...v5.2.0\"\u003ehttps://github.com/XRPLF/xrpl-py/compare/v5.1.0...v5.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.2.0b0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSet dependabot version update frequency to quarterly by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/898\"\u003eXRPLF/xrpl-py#898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease pipeline by \u003ca href=\"https://github.com/shichengripple001\"\u003e\u003ccode\u003e@​shichengripple001\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/876\"\u003eXRPLF/xrpl-py#876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix number serialization by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/900\"\u003eXRPLF/xrpl-py#900\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdates to the Lending-Protocol transactions by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/901\"\u003eXRPLF/xrpl-py#901\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: improve int32 integration by \u003ca href=\"https://github.com/mvadari\"\u003e\u003ccode\u003e@​mvadari\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/902\"\u003eXRPLF/xrpl-py#902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eRequest.from_xrpl\u003c/code\u003e by aliasing it to \u003ccode\u003eRequest.from_dict\u003c/code\u003e by \u003ca href=\"https://github.com/mvadari\"\u003e\u003ccode\u003e@​mvadari\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/892\"\u003eXRPLF/xrpl-py#892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease 4.5.0: release-4.5.0 → main by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/904\"\u003eXRPLF/xrpl-py#904\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd pull request types to unit test workflow by \u003ca href=\"https://github.com/shichengripple001\"\u003e\u003ccode\u003e@​shichengripple001\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/911\"\u003eXRPLF/xrpl-py#911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8 by \u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/917\"\u003eXRPLF/xrpl-py#917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/912\"\u003eXRPLF/xrpl-py#912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: incorrect SField definitions for Lending Protocols and DynamicMPTs by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/918\"\u003eXRPLF/xrpl-py#918\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate trivy-action version by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/922\"\u003eXRPLF/xrpl-py#922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix _calculate_precision by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/924\"\u003eXRPLF/xrpl-py#924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop python 3.9 support by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/940\"\u003eXRPLF/xrpl-py#940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default algorithm in\u003ccode\u003eWallet\u003c/code\u003e class (breaking change) by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/942\"\u003eXRPLF/xrpl-py#942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): quarterly batch dependency upgrade 2026-Q2 by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/995\"\u003eXRPLF/xrpl-py#995\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCollection of bug-fixes by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/993\"\u003eXRPLF/xrpl-py#993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: docker path for integration test by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1003\"\u003eXRPLF/xrpl-py#1003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve significant trailing zeros in \u003ccode\u003eAmount.to_json\u003c/code\u003e for IOU values by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1001\"\u003eXRPLF/xrpl-py#1001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(wallet): infer signing algorithm from seed prefix in Wallet.from_seed / Wallet.from_secret by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/999\"\u003eXRPLF/xrpl-py#999\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease 5.0.0: release-5.0.0 → main by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1004\"\u003eXRPLF/xrpl-py#1004\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Batch (XLS-56) V1_1 signing support by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1015\"\u003eXRPLF/xrpl-py#1015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: support private xrpld images via committed config file by \u003ca href=\"https://github.com/rrmanukyan\"\u003e\u003ccode\u003e@​rrmanukyan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1019\"\u003eXRPLF/xrpl-py#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: Handle signing fields correctly in definitions generation by \u003ca href=\"https://github.com/mvadari\"\u003e\u003ccode\u003e@​mvadari\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1021\"\u003eXRPLF/xrpl-py#1021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Dynamic MPT (XLS-94d) by \u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/877\"\u003eXRPLF/xrpl-py#877\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand team required-reviewers into individual member logins for Slack notifications by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1029\"\u003eXRPLF/xrpl-py#1029\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport XLS-68 Sponsored Fees and Reserves by \u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1020\"\u003eXRPLF/xrpl-py#1020\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: ConfidentialMPT Support by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/919\"\u003eXRPLF/xrpl-py#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease 5.1.0: release-5.1.0 → main by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1032\"\u003eXRPLF/xrpl-py#1032\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(coderabbit): reduce review noise and load .ai-review/instructions.md by \u003ca href=\"https://github.com/arshjafri-ripple\"\u003e\u003ccode\u003e@​arshjafri-ripple\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1024\"\u003eXRPLF/xrpl-py#1024\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shichengripple001\"\u003e\u003ccode\u003e@​shichengripple001\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/876\"\u003eXRPLF/xrpl-py#876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/904\"\u003eXRPLF/xrpl-py#904\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/917\"\u003eXRPLF/xrpl-py#917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rrmanukyan\"\u003e\u003ccode\u003e@​rrmanukyan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1019\"\u003eXRPLF/xrpl-py#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arshjafri-ripple\"\u003e\u003ccode\u003e@​arshjafri-ripple\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1024\"\u003eXRPLF/xrpl-py#1024\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/XRPLF/xrpl-py/compare/v4.4.0...v5.2.0b0\"\u003ehttps://github.com/XRPLF/xrpl-py/compare/v4.4.0...v5.2.0b0\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/XRPLF/xrpl-py/blob/v5.2.0/CHANGELOG.md\"\u003exrpl-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[[5.2.0]]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for the \u003ccode\u003eLendingProtocolV1_1\u003c/code\u003e amendment.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eencode_for_signing_counterparty\u003c/code\u003e / \u003ccode\u003eencode_for_multisigning_counterparty\u003c/code\u003e and \u003ccode\u003eencode_for_signing_sponsor\u003c/code\u003e / \u003ccode\u003eencode_for_multisigning_sponsor\u003c/code\u003e for the role-specific signing prefixes introduced by \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport the \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e signing prefixes.\u003c/li\u003e\n\u003cli\u003eRegenerate \u003ccode\u003edefinitions.json\u003c/code\u003e from rippled 3.4.0: adds new fields (e.g. \u003ccode\u003eVaultKind\u003c/code\u003e, \u003ccode\u003eSubscriptionDate\u003c/code\u003e, \u003ccode\u003eRedemptionDate\u003c/code\u003e) and removes Hook/Emit field definitions, as Hooks is no longer supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[[5.1.0]]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for \u003ccode\u003eConfidential MPT\u003c/code\u003e (XLS-0096). The optional native cryptography (proof generation and balance decryption) is provided by the separate \u003ccode\u003exrpl.ext.confidential\u003c/code\u003e extension.\u003c/li\u003e\n\u003cli\u003eAdded support for the Sponsored Fees and Reserves (XLS-68)\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eDynamic Multi-Purpose Tokens\u003c/code\u003e (XLS-94)\u003c/li\u003e\n\u003cli\u003eAdd support for Batch (XLS-56) \u003ccode\u003eBatchV1_1\u003c/code\u003e signing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for the older \u003ccode\u003eBatch\u003c/code\u003e signing format (never live on any network, so no existing signatures are affected).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/a553301e2c4caaf0bf808fc48d18e5271a5c7d28\"\u003e\u003ccode\u003ea553301\u003c/code\u003e\u003c/a\u003e bump packages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/634ab7a4c5c18c547a9336fcaa8320a15ccca4ce\"\u003e\u003ccode\u003e634ab7a\u003c/code\u003e\u003c/a\u003e feat: Support LendingProtocolV1_1 (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/28836d0a7346e92adce877eeb02721fff218fb89\"\u003e\u003ccode\u003e28836d0\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e signing prefixes (\u003ccode\u003eSponsor\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/a29bdba371fabdf08aafda1dbbb15c8bfbfcc4a8\"\u003e\u003ccode\u003ea29bdba\u003c/code\u003e\u003c/a\u003e ci: remove integration test requirement for beta releases (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1039\"\u003e#1039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/10ed82ee1f25c8bef0bf3bbc08d2708d6dde2a0f\"\u003e\u003ccode\u003e10ed82e\u003c/code\u003e\u003c/a\u003e chore(coderabbit): reduce review noise and load .ai-review/instructions.md (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/ad08b5b79ee221fd32ca610bf72e6e0dcfb7c894\"\u003e\u003ccode\u003ead08b5b\u003c/code\u003e\u003c/a\u003e Release 5.1.0: release-5.1.0 → main (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1032\"\u003e#1032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/d80063149a70c5478d5f3fe5fef1b2bdd81bf67c\"\u003e\u003ccode\u003ed800631\u003c/code\u003e\u003c/a\u003e feat: ConfidentialMPT Support (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/919\"\u003e#919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/e648619de0961b13dc6f7548f4973bf5345b888e\"\u003e\u003ccode\u003ee648619\u003c/code\u003e\u003c/a\u003e Support XLS-68 Sponsored Fees and Reserves (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1020\"\u003e#1020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/524f230c6581a99d876137a4d8121391df691a30\"\u003e\u003ccode\u003e524f230\u003c/code\u003e\u003c/a\u003e Expand team required-reviewers into individual member logins for Slack notifi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/cddeb632e611348550edc4c9c03eb90ae562789a\"\u003e\u003ccode\u003ecddeb63\u003c/code\u003e\u003c/a\u003e Support for Dynamic MPT (XLS-94d) (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/877\"\u003e#877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/XRPLF/xrpl-py/compare/v5.0.0...v5.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.2.6 to 2.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.3 (Sep 6, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.3 Release Notes\u003c/h1\u003e\n\u003cp\u003eThe NumPy 2.5.3 is a patch release that fixes bugs discovered after the 2.5.2\nrelease. Apart from the usual bug and maintenance work, there are a number of\nStringDType related fixes for problems discovered during the ongoing string\nwork in the main branch.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCasting a fixed-width byte string array (\u003ccode\u003enp.bytes_\u003c/code\u003e) to \u003ccode\u003eStringDType\u003c/code\u003e\nnow raises \u003ccode\u003eTypeError\u003c/code\u003e when the bytes are not valid UTF-8. Previously the\ninvalid bytes were stored as-is and later caused undefined behavior in\nstring operations.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32296\"\u003egh-32296\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eMaskedArray._fill_value\u003c/code\u003e would become stale when ufuncs that change dtype\nleft the result holding a fill_value typed for the old dtype. The mismatch\nwas silent until something later called \u003ccode\u003e_check_fill_value\u003c/code\u003e, such as\n\u003ccode\u003e.view()\u003c/code\u003e, and then a \u003ccode\u003eTypeError\u003c/code\u003e would be raised. Now, when the copied\nfill_value is no longer valid for the new dtype, fall back to the\ndefault fill_value for that dtype instead of propagating the stale value.\nThis may raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is complex and the\nnew dtype is real.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32423\"\u003egh-32423\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 9 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eIason Krommydas\u003c/li\u003e\n\u003cli\u003eJames Davies +\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eMaanas Arora\u003c/li\u003e\n\u003cli\u003eMatti Picus\u003c/li\u003e\n\u003cli\u003eNathan Goldbaum\u003c/li\u003e\n\u003cli\u003eShikhar Goel +\u003c/li\u003e\n\u003cli\u003eYeonho Kim +\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePull requests merged\u003c/h2\u003e\n\u003cp\u003eA total of 27 pull requests were merged for this release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32235\"\u003e#32235\u003c/a\u003e: MAINT: Prepare 2.5.x for further development\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst\"\u003enumpy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis is a walkthrough of the NumPy 2.4.0 release on Linux, which will be the\nfirst feature release using the \u003ccode\u003enumpy/numpy-release \u0026lt;https://github.com/numpy/numpy-release\u0026gt;\u003c/code\u003e__ repository.\u003c/p\u003e\n\u003cp\u003eThe commands can be copied into the command line, but be sure to replace 2.4.0\nwith the correct version. This should be read together with the\n:ref:\u003ccode\u003egeneral release guide \u0026lt;prepare_release\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n\u003ch1\u003eFacility preparation\u003c/h1\u003e\n\u003cp\u003eBefore beginning to make a release, use the \u003ccode\u003erequirements/*_requirements.txt\u003c/code\u003e files to\nensure that you have the needed software. Most software can be installed with\npip, but some will require apt-get, dnf, or whatever your system uses for\nsoftware. You will also need a GitHub personal access token (PAT) to push the\ndocumentation. There are a few ways to streamline things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGit can be set up to use a keyring to store your GitHub personal access token.\nSearch online for the details.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ePrior to release\u003c/h1\u003e\n\u003ch2\u003eAdd/drop Python versions\u003c/h2\u003e\n\u003cp\u003eWhen adding or dropping Python versions, multiple config and CI files need to\nbe edited in addition to changing the minimum version in \u003ccode\u003epyproject.toml\u003c/code\u003e.\nMake these changes in an ordinary PR against main and backport if necessary.\nWe currently release wheels for new Python versions after the first Python RC\nonce manylinux and cibuildwheel support that new Python version.\u003c/p\u003e\n\u003ch2\u003eBackport pull requests\u003c/h2\u003e\n\u003cp\u003eChanges that have been marked for this release must be backported to the\nmaintenance/2.4.x branch.\u003c/p\u003e\n\u003ch2\u003eUpdate 2.4.0 milestones\u003c/h2\u003e\n\u003cp\u003eLook at the issues/prs with 2.4.0 milestones and either push them off to a\nlater version, or maybe remove the milestone. You may need to add a milestone.\u003c/p\u003e\n\u003ch2\u003eCheck the numpy-release repo\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/dd88c0c19b54ad9ed3533224221285bf0873249a\"\u003e\u003ccode\u003edd88c0c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32511\"\u003e#32511\u003c/a\u003e from charris/prepare-2.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/edcac6acc392f4010933ee83e8a4769a7cfe92c5\"\u003e\u003ccode\u003eedcac6a\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.3 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/fd4d908aff89773ead13f7c6a0ab31153f14439e\"\u003e\u003ccode\u003efd4d908\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32509\"\u003e#32509\u003c/a\u003e from charris/backport-32496\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/65bb1da13d0ee784be84d173b86784f0d64bdaca\"\u003e\u003ccode\u003e65bb1da\u003c/code\u003e\u003c/a\u003e BUG: fix crash in ufunc.resolve_dtypes with a Python scalar type (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32496\"\u003e#32496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/294956e85dfaea149aada1278c2ed6be0f6f28c8\"\u003e\u003ccode\u003e294956e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32506\"\u003e#32506\u003c/a\u003e from charris/backport-32503\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/26428d9a3f5ab4f604b326347e3a9c6dcc00c1cb\"\u003e\u003ccode\u003e26428d9\u003c/code\u003e\u003c/a\u003e DOC: fix scipy docs links in intersphinx mapping (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32507\"\u003e#32507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/5fab1cbc6aa9e119d9f931243a56c6fbca989476\"\u003e\u003ccode\u003e5fab1cb\u003c/code\u003e\u003c/a\u003e DOC: use static scipy doc site for intershpinx (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32503\"\u003e#32503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/7beed2f7e9a24e493a04ff7e2eb1db0d7f9c50e6\"\u003e\u003ccode\u003e7beed2f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32481\"\u003e#32481\u003c/a\u003e from ngoldbaum/stringdtype-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/8972f70798a2ba1bb4557157982fd6001906f993\"\u003e\u003ccode\u003e8972f70\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32478\"\u003e#32478\u003c/a\u003e from charris/backport-32466\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/ab1b58902a868d4151ef3cf8dbeb91d8a1924fa4\"\u003e\u003ccode\u003eab1b589\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32477\"\u003e#32477\u003c/a\u003e from charris/backport-32423\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.2.6...v2.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opencv-python` from 4.13.0.92 to 5.0.0.93\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/opencv/opencv-python/releases\"\u003eopencv-python's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.0.0.93\u003c/h2\u003e\n\u003cp\u003eOpenCV 5.0.0 released!\u003c/p\u003e\n\u003cp\u003eOpenCV 5.0.0 overview: \u003ca href=\"https://opencv.org/opencv-5\"\u003ehttps://opencv.org/opencv-5\u003c/a\u003e\nOpenCV 4.x -\u0026gt; 5.x migration guide: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-4-to-5-migration\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-4-to-5-migration\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/opencv/opencv-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 0.21.1 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v0.21.1...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.1 to 3.14.3\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Team-Hamsa/LFG/pull/586","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Team-Hamsa%2FLFG/issues/586","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/586/packages"},{"uuid":"5514402833","node_id":"PR_kwDOQWOdqc8AAAABEQ_z5Q","number":588,"state":"open","title":"chore(deps): Bump the python-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-19T23:36:07.000Z","updated_at":"2026-09-23T22:42:47.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"python-dependencies","update_count":16,"packages":[{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [uvicorn](https://github.com/Kludex/uvicorn), [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy), [alembic](https://github.com/sqlalchemy/alembic), [pydantic](https://github.com/pydantic/pydantic), [pydantic-settings](https://github.com/pydantic/pydantic-settings), [av](https://github.com/PyAV-Org/PyAV), [cryptography](https://github.com/pyca/cryptography), [openai](https://github.com/openai/openai-python), [anthropic](https://github.com/anthropics/anthropic-sdk-python), [litellm](https://github.com/BerriAI/litellm), [uiprotect](https://github.com/uilibs/uiprotect), [pywebpush](https://github.com/web-push-libs/pywebpush), [aiosmtplib](https://github.com/cole/aiosmtplib), [sentence-transformers](https://github.com/huggingface/sentence-transformers), [python-json-logger](https://github.com/nhairs/python-json-logger) and [pyjwt](https://github.com/jpadilla/pyjwt) to permit the latest version.\nUpdates `uvicorn` from 0.52.1 to 0.53.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/098b206ff7b01098561956ff4e7746d05e02acc6\"\u003e\u003ccode\u003e098b206\u003c/code\u003e\u003c/a\u003e Remove timing race from SIGHUP supervisor test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3127\"\u003e#3127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/968f15e5d09df5f6b8959975f18687b9d755862d\"\u003e\u003ccode\u003e968f15e\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3113\"\u003e#3113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d4c08cce9eeabf64695c326b0e45c47c6a0337b\"\u003e\u003ccode\u003e7d4c08c\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 11 update...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fe528a480c0aec3aea3ee8ef13251b5216c47ae9\"\u003e\u003ccode\u003efe528a4\u003c/code\u003e\u003c/a\u003e Require explicit opt-in for zttp HTTP/2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fa324a415364563cf45908966435e2480a6b46bf\"\u003e\u003ccode\u003efa324a4\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump httpx2 from 2.10.0 to 2.12.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3121\"\u003e#3121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.53.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` to 2.0.54\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.54\u003c/h1\u003e\n\u003cp\u003eReleased: September 15, 2026\u003c/p\u003e\n\u003ch2\u003eplatform\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [change]\u003c/strong\u003e Binary wheels are no longer built for Python 3.7.  PyPI now rejects wheel\nfiles whose filename does not begin with the normalized project name, and\nthe packaging tools that can be installed on Python 3.7 do not produce\nsuch a filename.  As a result, SQLAlchemy 2.0.44 was the last release to\npublish Python 3.7 wheels to PyPI, and releases 2.0.45 and later have\nbeen available on Python 3.7 only as a source distribution; the wheel\nbuilds for Python 3.7 are now removed.  Python 3.7 remains supported by\nthe 2.0 series.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [bug]\u003c/strong\u003e Fixed issue where the Cython extensions were compiled without the\n\u003ccode\u003efreethreading_compatible\u003c/code\u003e directive, so that they did not declare\nthemselves as safe to run without the GIL.  On a free-threaded Python\ninterpreter such as Python 3.13t or 3.14t, importing SQLAlchemy would\ncause the interpreter to re-enable the GIL, emitting a\n\u003ccode\u003eRuntimeWarning\u003c/code\u003e.  The directive is now set when building for Python\n3.13 and above, and a test has been added which confirms that importing\nSQLAlchemy on a free-threaded build does not enable the GIL.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13592\"\u003e#13592\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` to 1.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.20.0\u003c/h1\u003e\n\u003cp\u003eReleased: September 11, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [batch]\u003c/strong\u003e Added a warning for the case where an unnamed CHECK constraint on a\nreflected table is omitted from a batch \u0026quot;recreate\u0026quot; operation.  An unnamed\nCHECK constraint can't be reliably carried over in a batch recreate\nas it may refer to columns that are being dropped or changed.  This\nomission was previously a silent operation.   The presence of any\n\u003ccode\u003e~sqlalchemy.schema.CheckConstraint\u003c/code\u003e in\n\u003ccode\u003eOperations.batch_alter_table.table_args\u003c/code\u003e is taken to indicate\nthat the case has been accommodated, and no warning is emitted.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1846\"\u003e#1846\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [autogenerate]\u003c/strong\u003e Autogenerate now renders a warning comment above any rendered\n\u003ccode\u003eOperations.drop_constraint()\u003c/code\u003e directive for which the constraint name\nis \u003ccode\u003eNone\u003c/code\u003e, as is the case when a constraint that has no name in the model\nis dropped, most typically within the \u003ccode\u003edowngrade()\u003c/code\u003e function of a\nmigration that adds an unnamed constraint.  A warning is also emitted on\nthe console when the migration script is generated.   The directive\nrequires a non-None name in order to be able to emit a \u0026quot;DROP CONSTRAINT\u0026quot;\ncommand.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/916\"\u003e#916\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where adding a column with a type that generates\nits own CHECK constraint, such as \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or\n\u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e with\n\u003ccode\u003e~sqlalchemy.types.Boolean.create_constraint\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e,\nwould emit the constraint twice when the table was recreated, once under\nthe name generated by the naming convention in use and once under the\nname given to the type.  The constraint is now emitted once, using the\nsame name that would be used outside of batch mode.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1768\"\u003e#1768\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where a CHECK constraint generated by a type such\nas \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or \u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e\nwould lose the name established for it by the naming convention in use\nwhen the table was recreated, as the constraint was regenerated against\nthe temporary table used for the recreate operation.  The naming\nconvention is now resolved against the name of the table being replaced.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.15.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBehavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ecase_sensitive\u003c/code\u003e now applies to init kwargs and config-file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/900\"\u003e#900\u003c/a\u003e). \u003ccode\u003eInitSettingsSource\u003c/code\u003e and the JSON/TOML/YAML config sources previously ignored \u003ccode\u003ecase_sensitive\u003c/code\u003e. Since it defaults to \u003ccode\u003eFalse\u003c/code\u003e, \u003cstrong\u003ecase-insensitive matching is now the default\u003c/strong\u003e for these sources — e.g. \u003ccode\u003eSettings(TeSt=...)\u003c/code\u003e now populates a \u003ccode\u003etest\u003c/code\u003e field where it previously did not. Nested keys are still matched case-sensitively.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFields with unresolved forward references now emit a warning\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/901\"\u003e#901\u003c/a\u003e). Settings sources can silently fail to resolve such fields; they now raise \u003ccode\u003eIncompleteFieldDefinitionWarning\u003c/code\u003e telling you to call \u003ccode\u003emodel_rebuild()\u003c/code\u003e. If you have \u003ccode\u003efilterwarnings = error\u003c/code\u003e configured, this may surface as a new failure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNon-JSON env values for strict fields now raise \u003ccode\u003eValidationError\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/926\"\u003e#926\u003c/a\u003e) instead of a less specific error.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eShow environment variable names in CLI help\u003c/strong\u003e via \u003ccode\u003ecli_show_env_vars=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/860\"\u003e#860\u003c/a\u003e), so generated \u003ccode\u003e--help\u003c/code\u003e output doubles as configuration documentation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePYDANTIC_SETTINGS_DEBUG\u003c/code\u003e for debugging settings resolution\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/913\"\u003e#913\u003c/a\u003e). Set it to a truthy value with \u003ccode\u003eDEBUG\u003c/code\u003e logging enabled to see each source's contribution in priority order, which source won for each value, and which \u003ccode\u003eenv_file\u003c/code\u003e/secret files were probed, loaded, or skipped — the long-standing \u0026quot;why isn't my \u003ccode\u003e.env\u003c/code\u003e being picked up?\u0026quot; question.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003etoml_table_header\u003c/code\u003e for regular TOML files\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/882\"\u003e#882\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/887\"\u003e#887\u003c/a\u003e), letting you root settings at a nested table in any TOML file, not just \u003ccode\u003epyproject.toml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eTraversable\u003c/code\u003e support for JSON/TOML/YAML file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/902\"\u003e#902\u003c/a\u003e), so you can load config packaged inside a distribution — including files inside a zip or wheel — via \u003ccode\u003eimportlib.resources.files(...)\u003c/code\u003e without casting to \u003ccode\u003ePath\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGCP: \u003ccode\u003eproject_id\u003c/code\u003e can come from an earlier settings source\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003e#878\u003c/a\u003e), rather than only from the constructor or \u003ccode\u003eGOOGLE_CLOUD_PROJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix env vars not loading on Windows with \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/894\"\u003e#894\u003c/a\u003e). Windows upper-cases \u003ccode\u003eos.environ\u003c/code\u003e keys, so fields raised \u003ccode\u003eField required\u003c/code\u003e instead of picking up their values.\u003c/li\u003e\n\u003cli\u003eRead secret files as UTF-8 instead of the platform locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/917\"\u003e#917\u003c/a\u003e). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAliasPath\u003c/code\u003e on nested model fields not JSON-decoding env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/898\"\u003e#898\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix case-insensitive matching for \u003cstrong\u003eoptional\u003c/strong\u003e nested models (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/905\"\u003e#905\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix dotenv extras being wrongly claimed by a complex field sharing a name prefix (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/912\"\u003e#912\u003c/a\u003e) — e.g. \u003ccode\u003edbx_token\u003c/code\u003e being swallowed by a \u003ccode\u003edb: dict\u003c/code\u003e field.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e corrupting discriminated unions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/876\"\u003e#876\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSecret\u003c/code\u003e subclasses crashing when loaded from the environment (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/920\"\u003e#920\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix enum names not parsing through nested annotations such as \u003ccode\u003eOptional[Annotated[MyEnum, ...]]\u003c/code\u003e with \u003ccode\u003eenv_parse_enums=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/910\"\u003e#910\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty \u003ccode\u003eyaml_config_section\u003c/code\u003e now falls back to defaults instead of raising \u003ccode\u003eAttributeError: 'NoneType' object has no attribute 'keys'\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/914\"\u003e#914\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e no longer follows symlinks pointing outside \u003ccode\u003esecrets_dir\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/889\"\u003e#889\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGCP: skip the \u003ccode\u003elist_secrets\u003c/code\u003e call when \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003e#862\u003c/a\u003e), lowering the required IAM permissions to just \u003ccode\u003eroles/secretmanager.secretAccessor\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAWS: \u003ccode\u003etypes-boto3[secretsmanager]\u003c/code\u003e is no longer required at runtime (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/880\"\u003e#880\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument JSON parsing of complex env values, plus a comma-separated-values recipe (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/919\"\u003e#919\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRecommend an async settings loading pattern (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/908\"\u003e#908\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify behavior when an unprefixed value is present in a dotenv file (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/895\"\u003e#895\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify environment variable helper descriptions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003e#867\u003c/a\u003e) and fix assorted typos (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/904\"\u003e#904\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate documentation link for Pydantic settings by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/863\"\u003epydantic/pydantic-settings#863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/865\"\u003epydantic/pydantic-settings#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify environment variable helper descriptions by \u003ca href=\"https://github.com/vip892766gma\"\u003e\u003ccode\u003e@​vip892766gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003epydantic/pydantic-settings#867\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/870\"\u003epydantic/pydantic-settings#870\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/875\"\u003epydantic/pydantic-settings#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip list_secrets call when case_sensitive=True by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003epydantic/pydantic-settings#862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGoogleSecretManagerSettingsSource: read project_id from previous sources by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003epydantic/pydantic-settings#878\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f725ca187bee4212e9ef799eefa3cb25be788462\"\u003e\u003ccode\u003ef725ca1\u003c/code\u003e\u003c/a\u003e Prepare release 2.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/28f35c25fac5d61210d532c31a300d49c0b684a4\"\u003e\u003ccode\u003e28f35c2\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9056db049560897229f2603493753bae27b6479f\"\u003e\u003ccode\u003e9056db0\u003c/code\u003e\u003c/a\u003e test: move function-local imports to the top of test modules (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f077e3ab3d9492838c7ef9275a88c95134688095\"\u003e\u003ccode\u003ef077e3a\u003c/code\u003e\u003c/a\u003e fix: raise ValidationError for non-JSON env values on strict fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ae25d703c458b57f5a9a425f6ec9a28ad868f980\"\u003e\u003ccode\u003eae25d70\u003c/code\u003e\u003c/a\u003e fix: treat Secret subclasses as non-complex fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/716\"\u003e#716\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/920\"\u003e#920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/798dcea2a23b08a3e9b37994014e036224f6dd18\"\u003e\u003ccode\u003e798dcea\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/a190041d353bda2d432ea1908de4c499ae89ee0a\"\u003e\u003ccode\u003ea190041\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/925\"\u003e#925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/5d9333282b5c85d65a457c45e4476369b9949726\"\u003e\u003ccode\u003e5d93332\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/921\"\u003e#921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/d2fdeda91157140d2ff0c05404f32a9b1218115a\"\u003e\u003ccode\u003ed2fdeda\u003c/code\u003e\u003c/a\u003e fix: read secret files as UTF-8 instead of the locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/917\"\u003e#917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2256a4e60f83f2da81e7654252562fc4841aa5d4\"\u003e\u003ccode\u003e2256a4e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/915\"\u003e#915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `av` to 18.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyAV-Org/PyAV/releases\"\u003eav's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev18.1.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInfer the specific stream and codec context types for all FFmpeg encoder names in type-checked code by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.supported_options\u003c/code\u003e to discover generic and codec-specific options by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2032\"\u003e#2032\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ePacket.rescale_ts()\u003c/code\u003e to rescale packet PTS, DTS, and duration to a new \u003ccode\u003eAVRational\u003c/code\u003e time base by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSupport reusing the thread's current CUDA context via a \u003ccode\u003ecurrent_ctx\u003c/code\u003e flag on \u003ccode\u003eCudaContext\u003c/code\u003e and \u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e, for interop with libraries like PyTorch that initialize CUDA first by \u003ca href=\"https://github.com/Yozer\"\u003e\u003ccode\u003e@​Yozer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2339\"\u003e#2339\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e no longer requires restating \u003ccode\u003eprimary_ctx\u003c/code\u003e/\u003ccode\u003ecurrent_ctx\u003c/code\u003e when passing an explicit \u003ccode\u003ecuda_context\u003c/code\u003e; the flags are only validated when explicitly given by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSupport passing an explicit CUDA stream to FFmpeg CUDA operations, including NVENC input and output, via a \u003ccode\u003ecuda_stream\u003c/code\u003e parameter on \u003ccode\u003eCudaContext\u003c/code\u003e; currently limited to logical CUDA device 0 by \u003ca href=\"https://github.com/Yozer\"\u003e\u003ccode\u003e@​Yozer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2360\"\u003e#2360\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eav.AVRational\u003c/code\u003e, an exact rational number stored as two int32s that mirrors FFmpeg's \u003ccode\u003eAVRational\u003c/code\u003e. \u003ccode\u003eCodec.frame_rates\u003c/code\u003e now holds these rather than \u003ccode\u003efractions.Fraction\u003c/code\u003e, and every setter that accepts a \u003ccode\u003eFraction\u003c/code\u003e also accepts an \u003ccode\u003eAVRational\u003c/code\u003e. Unset rational attributes are falsy, so test them with \u003ccode\u003eif not stream.time_base:\u003c/code\u003e rather than \u003ccode\u003eis None\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eFrame.metadata\u003c/code\u003e, the metadata FFmpeg attaches to a frame, by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.level\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVideoCodecContext.field_order\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.save\u003c/code\u003e now forwards keyword arguments to the encoder, letting callers trade file size for speed (e.g. \u003ccode\u003epred=\u0026quot;none\u0026quot;\u003c/code\u003e or \u003ccode\u003ecompression_level=1\u003c/code\u003e for PNG, \u003ccode\u003eqscale=2\u003c/code\u003e for JPG) by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInputContainer.start_time_realtime\u003c/code\u003e, the stream's start time in microseconds since the Unix epoch, which RTSP derives from RTCP sender reports, by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2365\"\u003e#2365\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eVideoFrame.save\u003c/code\u003e raising \u003ccode\u003eAttributeError\u003c/code\u003e when given a \u003ccode\u003ePath\u003c/code\u003e rather than a \u003ccode\u003estr\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix a frame rate assigned to a \u003ccode\u003eVideoStream\u003c/code\u003e after \u003ccode\u003eadd_stream\u003c/code\u003e being dropped from the output; the codec context's frame rate is now copied to the stream before the header is written by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2301\"\u003e#2301\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePrevent crashes and corrupted output when structural codec properties are changed after an output stream has been opened by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e, reported by \u003ca href=\"https://github.com/oakaigh\"\u003e\u003ccode\u003e@​oakaigh\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2232\"\u003e#2232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix a crash when using a stream that has no \u003ccode\u003eCodecContext\u003c/code\u003e (a demuxed stream with no available decoder, such as one from a truncated file, or a stream created by \u003ccode\u003eadd_mux_stream\u003c/code\u003e); decoding now raises \u003ccode\u003eDecoderNotFoundError\u003c/code\u003e, encoding now raises \u003ccode\u003eEncoderNotFoundError\u003c/code\u003e, and \u003ccode\u003eBitStreamFilterContext\u003c/code\u003e accepts such a stream as \u003ccode\u003eout_stream\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e, reported by \u003ca href=\"https://github.com/justinrmiller\"\u003e\u003ccode\u003e@​justinrmiller\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2344\"\u003e#2344\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport building from source against FFmpeg 9.0 by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e. The binary wheels still ship FFmpeg 8.1.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Yozer\"\u003e\u003ccode\u003e@​Yozer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/pull/2339\"\u003ePyAV-Org/PyAV#2339\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyAV-Org/PyAV/compare/v18.0.0...v18.1.0\"\u003ehttps://github.com/PyAV-Org/PyAV/compare/v18.0.0...v18.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyAV-Org/PyAV/blob/v18.1.0/CHANGELOG.rst\"\u003eav's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev18.1.0\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInfer the specific stream and codec context types for all FFmpeg encoder names in type-checked code by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.supported_options\u003c/code\u003e to discover generic and codec-specific options by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2032\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ePacket.rescale_ts()\u003c/code\u003e to rescale packet PTS, DTS, and duration to a new \u003ccode\u003eAVRational\u003c/code\u003e time base by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSupport reusing the thread's current CUDA context via a \u003ccode\u003ecurrent_ctx\u003c/code\u003e flag on \u003ccode\u003eCudaContext\u003c/code\u003e and \u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e, for interop with libraries like PyTorch that initialize CUDA first by :gh-user:\u003ccode\u003eYozer\u003c/code\u003e (:pr:\u003ccode\u003e2339\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e no longer requires restating \u003ccode\u003eprimary_ctx\u003c/code\u003e/\u003ccode\u003ecurrent_ctx\u003c/code\u003e when passing an explicit \u003ccode\u003ecuda_context\u003c/code\u003e; the flags are only validated when explicitly given by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSupport passing an explicit CUDA stream to FFmpeg CUDA operations, including NVENC input and output, via a \u003ccode\u003ecuda_stream\u003c/code\u003e parameter on \u003ccode\u003eCudaContext\u003c/code\u003e; currently limited to logical CUDA device 0 by :gh-user:\u003ccode\u003eYozer\u003c/code\u003e (:pr:\u003ccode\u003e2360\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eav.AVRational\u003c/code\u003e, an exact rational number stored as two int32s that mirrors FFmpeg's \u003ccode\u003eAVRational\u003c/code\u003e. \u003ccode\u003eCodec.frame_rates\u003c/code\u003e now holds these rather than \u003ccode\u003efractions.Fraction\u003c/code\u003e, and every setter that accepts a \u003ccode\u003eFraction\u003c/code\u003e also accepts an \u003ccode\u003eAVRational\u003c/code\u003e. Unset rational attributes are falsy, so test them with \u003ccode\u003eif not stream.time_base:\u003c/code\u003e rather than \u003ccode\u003eis None\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eFrame.metadata\u003c/code\u003e, the metadata FFmpeg attaches to a frame, by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.level\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVideoCodecContext.field_order\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.save\u003c/code\u003e now forwards keyword arguments to the encoder, letting callers trade file size for speed (e.g. \u003ccode\u003epred=\u0026quot;none\u0026quot;\u003c/code\u003e or \u003ccode\u003ecompression_level=1\u003c/code\u003e for PNG, \u003ccode\u003eqscale=2\u003c/code\u003e for JPG) by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInputContainer.start_time_realtime\u003c/code\u003e, the stream's start time in microseconds since the Unix epoch, which RTSP derives from RTCP sender reports, by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2365\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eVideoFrame.save\u003c/code\u003e raising \u003ccode\u003eAttributeError\u003c/code\u003e when given a \u003ccode\u003ePath\u003c/code\u003e rather than a \u003ccode\u003estr\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFix a frame rate assigned to a \u003ccode\u003eVideoStream\u003c/code\u003e after \u003ccode\u003eadd_stream\u003c/code\u003e being dropped from the output; the codec context's frame rate is now copied to the stream before the header is written by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2301\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc.:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport building from source against FFmpeg 9.0 by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e. The binary wheels still ship FFmpeg 8.1.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePrevent crashes and corrupted output when structural codec properties are changed after an output stream has been opened by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e, reported by :gh-user:\u003ccode\u003eoakaigh\u003c/code\u003e (:issue:\u003ccode\u003e2232\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix a crash when using a stream that has no \u003ccode\u003eCodecContext\u003c/code\u003e (a demuxed stream with no available decoder, such as one from a truncated file, or a stream created by \u003ccode\u003eadd_mux_stream\u003c/code\u003e); decoding now raises \u003ccode\u003eDecoderNotFoundError\u003c/code\u003e, encoding now raises \u003ccode\u003eEncoderNotFoundError\u003c/code\u003e, and \u003ccode\u003eBitStreamFilterContext\u003c/code\u003e accepts such a stream as \u003ccode\u003eout_stream\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e, reported by :gh-user:\u003ccode\u003ejustinrmiller\u003c/code\u003e (:issue:\u003ccode\u003e2344\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev18.0.0\u003c/h2\u003e\n\u003cp\u003eBreaking:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemove Python 3.10\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport HW encoding via a \u003ccode\u003ehwaccel\u003c/code\u003e parameter on \u003ccode\u003eOutputContainer.add_stream\u003c/code\u003e (e.g. \u003ccode\u003eh264_vaapi\u003c/code\u003e, \u003ccode\u003eh264_nvenc\u003c/code\u003e, \u003ccode\u003eh264_videotoolbox\u003c/code\u003e); software frames passed to \u003ccode\u003eencode\u003c/code\u003e are uploaded to the device automatically by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2156\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eUse FFmpeg 8.1.2 in the binary wheels by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eExpose \u003ccode\u003esw_format\u003c/code\u003e on \u003ccode\u003eVideoCodecContext\u003c/code\u003e, and allow configuring the software format of hardware encoders by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eoptions\u003c/code\u003e parameter to \u003ccode\u003eAudioResampler\u003c/code\u003e for passing \u003ccode\u003elibswresample\u003c/code\u003e options (e.g. \u003ccode\u003eresampler\u003c/code\u003e, \u003ccode\u003efilter_size\u003c/code\u003e, \u003ccode\u003ecutoff\u003c/code\u003e) by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2262\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eyuv420p10le\u003c/code\u003e in \u003ccode\u003eVideoFrame.to_ndarray\u003c/code\u003e and \u003ccode\u003eVideoFrame.from_ndarray\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e1981\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eat\u003c/code\u003e parameter to \u003ccode\u003eGraph.push\u003c/code\u003e and \u003ccode\u003eGraph.vpush\u003c/code\u003e to push a frame to a single buffer source by index, for multi-input filters like \u003ccode\u003eoverlay\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efind_best_pix_fmt_of_list\u003c/code\u003e now returns the loss as a \u003ccode\u003ePixFmtLoss\u003c/code\u003e \u003ccode\u003eenum.IntFlag\u003c/code\u003e instead of a plain \u003ccode\u003eint\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2300\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eColorspace.BT2020\u003c/code\u003e by :gh-user:\u003ccode\u003emark-oshea\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eBitStreamFilterContext\u003c/code\u003e now accepts a \u003ccode\u003eCodec\u003c/code\u003e or a codec-name \u003ccode\u003estr\u003c/code\u003e as \u003ccode\u003ein_stream\u003c/code\u003e to pin the input codec without a full \u003ccode\u003eStream\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/7e3d950a8b72062502c1a60d672f8ca565313af5\"\u003e\u003ccode\u003e7e3d950\u003c/code\u003e\u003c/a\u003e Release 18.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/842955f0cb6df927a42172ff14de186aec6e9a00\"\u003e\u003ccode\u003e842955f\u003c/code\u003e\u003c/a\u003e Changelog entries missed since 18.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/fdb4ce4e18181332b0704b78a5e655e8acc6e7e1\"\u003e\u003ccode\u003efdb4ce4\u003c/code\u003e\u003c/a\u003e Add InputContainer.start_time_realtime, closes \u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2365\"\u003e#2365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/b9ef85f33cca825f7f47bfb04217f92f27c60b8e\"\u003e\u003ccode\u003eb9ef85f\u003c/code\u003e\u003c/a\u003e Forward encoder options from \u003ccode\u003eVideoFrame.save()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/f711ab6866f27608c8b6a1e60e4512e98a52cc75\"\u003e\u003ccode\u003ef711ab6\u003c/code\u003e\u003c/a\u003e Disable avx-512 in build-deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/883642e7e68497de5c31487deaf48a11b364135e\"\u003e\u003ccode\u003e883642e\u003c/code\u003e\u003c/a\u003e Test with ffmpeg 9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/b35726c2b80f54b572d8c95f9bbae71ffa7ec9c6\"\u003e\u003ccode\u003eb35726c\u003c/code\u003e\u003c/a\u003e FFmpeg 9.0 reorders AVCodecID\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/f6f0a5e3d975aab851e12ca881bdadfdd8f9ec74\"\u003e\u003ccode\u003ef6f0a5e\u003c/code\u003e\u003c/a\u003e Avoid probing primary context flags for no reason\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/387fca5ec3eadbdd9ba286cac2918b74a5385b42\"\u003e\u003ccode\u003e387fca5\u003c/code\u003e\u003c/a\u003e Support explicit CUDA streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/32e9f7de15c3ecdddd78cc17b5ed4cdafdd15149\"\u003e\u003ccode\u003e32e9f7d\u003c/code\u003e\u003c/a\u003e Refresh installation documentation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PyAV-Org/PyAV/compare/v18.0.0...v18.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` to 3.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.14.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.13.0...v3.14.0\"\u003e3.14.0\u003c/a\u003e (2026-09-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e normalize errors raised while reading streams (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3827\"\u003e#3827\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d7c41efee1b0802b79f3f88a678ef2052b06e9ce\"\u003ed7c41ef\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebound vector store file polling (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3401\"\u003e#3401\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ae41bc46cdd53d17e948ac8a73e16bdbf34123a1\"\u003eae41bc4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexample:\u003c/strong\u003e refresh realtime push_to_talk_app session types (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2926\"\u003e#2926\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/0b7ad38292ef862f1dd07f71543b2f60eade8999\"\u003e0b7ad38\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efiles:\u003c/strong\u003e normalize PathLike upload tuples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3475\"\u003e#3475\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/90ac74ccfe7a966787d1f204755d4cd4cc4d406a\"\u003e90ac74c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einclude completion in content filter errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3094\"\u003e#3094\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e57a1b19fbcc32306a691e63334fd2dc4b1a804c\"\u003ee57a1b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elogging:\u003c/strong\u003e support standard OPENAI_LOG levels (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3734\"\u003e#3734\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/44000e0fc5e11692663045d6183568ff3ec32736\"\u003e44000e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enormalize API error codes to strings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3532\"\u003e#3532\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/233d9557be3e7ee186b5ac3f1ab634a257134ac1\"\u003e233d955\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3531\"\u003e#3531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/5bae14cb22724ef0a9db0d3a7fb7556d28b3fee3\"\u003e\u003ccode\u003e5bae14c\u003c/code\u003e\u003c/a\u003e release: 3.14.1 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3856\"\u003e#3856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003e\u003ccode\u003ef86c721\u003c/code\u003e\u003c/a\u003e fix(client): validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e\u003ccode\u003e6520df1\u003c/code\u003e\u003c/a\u003e fix(responses): skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b3c04f4e701e07726f320295a38928421946e530\"\u003e\u003ccode\u003eb3c04f4\u003c/code\u003e\u003c/a\u003e fix(azure): preserve deployment routing across copy/with_options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3593\"\u003e#3593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003e\u003ccode\u003eccc10f5\u003c/code\u003e\u003c/a\u003e fix: log only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e\u003ccode\u003e9640f29\u003c/code\u003e\u003c/a\u003e chore: remove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e\u003ccode\u003e8cb9ded\u003c/code\u003e\u003c/a\u003e docs: fix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003e\u003ccode\u003ea3d83b5\u003c/code\u003e\u003c/a\u003e docs: clarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e\u003ccode\u003e54f460e\u003c/code\u003e\u003c/a\u003e fix(examples): refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003e\u003ccode\u003ed241ed6\u003c/code\u003e\u003c/a\u003e fix(examples): split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.53.0...v3.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` to 1.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.6.0\u003c/h2\u003e\n\u003ch2\u003e1.6.0 (2026-09-15)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.5.0...v1.6.0\"\u003ev1.5.0...v1.6.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add auto mode tool permissions for Managed Agents (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/909d92ff57dd27270796407547ffbbf521cf941e\"\u003e909d92f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add compaction parameter and signed compaction blocks (beta) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/8689179d2c760f005d0f7736387d352b71f05bee\"\u003e8689179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add enum types for workspace data-residency geo fields (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3dc6dbfcea444305dd9b0cc418e26e14163bac78\"\u003e3dc6dbf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add thinking_mismatch_allowed entries to input_transformations (beta) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/14d179280ebfe241ef0604fd6afc331fc69528fd\"\u003e14d1792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add url_sources to the web fetch tool (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4ba7115da810cade002b1893973ac3812466d2f4\"\u003e4ba7115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add workspace_id parameter to user profiles methods (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1c359b22de5a33df1c30aabe367c7381510783e8\"\u003e1c359b2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e support async credential token providers (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/95e93f763e104110fc0fb855175a8551dcbe5931\"\u003e95e93f7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e mark usage iteration model as nullable (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/520d000440ddbc2262e5814d76c3add2380395db\"\u003e520d000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e use one input transformation type for message and delta event (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/ae86d7d7b689e9a9635270621af9fe9e7040ed57\"\u003eae86d7d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e honor Retry-After values above 60 seconds (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2d03ba20c747c0ee3b58f696355ce41acc605460\"\u003e2d03ba2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e ignore invalid Retry-After values and validate maxRetries (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/909d92ff57dd27270796407547ffbbf521cf941e\"\u003e909d92f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e retry connection errors in the async client and stop blocking in the coroutine retry loop (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/909d92ff57dd27270796407547ffbbf521cf941e\"...\n\n_Description has been truncated_","html_url":"https://github.com/project-argusai/ArgusAI/pull/588","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-argusai%2FArgusAI/issues/588","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/588/packages"},{"uuid":"5509193051","node_id":"PR_kwDOS6olns8AAAABEM2nGQ","number":21,"state":"open","title":"chore(deps): update cryptography requirement from \u003e=42.0.0 to \u003e=50.0.1","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-19T09:51:10.000Z","updated_at":"2026-09-19T09:51:18.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"cryptography","old_version":"\u003e=42.0.0","new_version":"\u003e=50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/42.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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\u003c/details\u003e","html_url":"https://github.com/donny-devops/pqc-sdk/pull/21","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/donny-devops%2Fpqc-sdk/issues/21","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/21/packages"},{"uuid":"5509025500","node_id":"PR_kwDOTduCbs8AAAABEMuexg","number":185,"state":"closed","title":"chore(deps): bump the python-runtime group with 7 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-09-19T09:50:45.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-19T09:12:23.000Z","updated_at":"2026-09-19T09:50:47.000Z","time_to_close":2302,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-runtime","update_count":7,"packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"django","old_version":"5.2.17","new_version":"6.1.1","repository_url":"https://github.com/django/django"},{"name":"gunicorn","old_version":"23.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography), [django](https://github.com/django/django), [django-allauth[mfa]](https://github.com/sponsors/pennersr), [gunicorn](https://github.com/benoitc/gunicorn), [psycopg[binary]](https://github.com/psycopg/psycopg), [procrastinate[django]](https://github.com/procrastinate-org/procrastinate) and [django-anymail[resend]](https://github.com/anymail/django-anymail) to permit the latest version.\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django` from 5.2.17 to 6.1.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/249b13d6e93ee3164dee8ed1775395622a50c337\"\u003e\u003ccode\u003e249b13d\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5f26fa88415db2268dcc3d865c5c1062c0a1d751\"\u003e\u003ccode\u003e5f26fa8\u003c/code\u003e\u003c/a\u003e [6.1.x] Added release date for 6.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fdcf78a14109a28433cf2b0983a75322baf5d0f7\"\u003e\u003ccode\u003efdcf78a\u003c/code\u003e\u003c/a\u003e [6.1.x] Added remaining community package mentions to the documentation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/72415689785fdf68238a288e71338a2f7b8deb2a\"\u003e\u003ccode\u003e7241568\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37222\"\u003e#37222\u003c/a\u003e -- Fixed QuerySet.distinct() crash on duplicated selecti...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/ef3fc8054fea8a728cfb879375a858a6f181b8d9\"\u003e\u003ccode\u003eef3fc80\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37312\"\u003e#37312\u003c/a\u003e, Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36605\"\u003e#36605\u003c/a\u003e -- Fixed annotation preservation and key se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/b09cb6bb9489dda57969108d058ac40e15d6584e\"\u003e\u003ccode\u003eb09cb6b\u003c/code\u003e\u003c/a\u003e [6.1.x] Clarified scope of object-level admin view permissions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/a6d3aa22a5ca5a3519cee39cf358ebdfa9fa1756\"\u003e\u003ccode\u003ea6d3aa2\u003c/code\u003e\u003c/a\u003e [6.1.x] Corrected heading hierarchy in the admin actions documentation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9031d4185a7eaf4056dc3161859b8fe5874f0c28\"\u003e\u003ccode\u003e9031d41\u003c/code\u003e\u003c/a\u003e [6.1.x] Clarified object-level permission checks in admin actions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc805c6f3416c626074fdfaf992df09c02502737\"\u003e\u003ccode\u003efc805c6\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37311\"\u003e#37311\u003c/a\u003e -- Prevented consumption of rhs iterators in annotation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/4b0185a5fb02a8c691bee4ce82e70174e061a228\"\u003e\u003ccode\u003e4b0185a\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37300\"\u003e#37300\u003c/a\u003e -- Preserved parent instance hints on custom Prefetch qu...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.17...6.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` to 65.19.3\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 23.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg[binary]` to 3.3.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg[binary]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.6\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1245](https://github.com/psycopg/psycopg/issues/1245)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDon't wait forever for a query to terminate after interrupting it, for\ninstance if the server is unresponsive. The fix requires libpq 17 or newer\n(:ticket:\u003ccode\u003e[#1371](https://github.com/psycopg/psycopg/issues/1371)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eCancel a running query upon receiving \u003ccode\u003e!SystemExit\u003c/code\u003e (:ticket:\u003ccode\u003e[#1384](https://github.com/psycopg/psycopg/issues/1384)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReport \u003ccode\u003e!None\u003c/code\u003e instead of \u003ccode\u003e65535\u003c/code\u003e as the \u003ccode\u003eColumn.precision\u003c/code\u003e of an\n:sql:\u003ccode\u003einterval\u003c/code\u003e column declared with a fields restriction and no explicit\nprecision, such as e.g. :sql:\u003ccode\u003einterval day to second\u003c/code\u003e (:ticket:\u003ccode\u003e[#1397](https://github.com/psycopg/psycopg/issues/1397)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix dumping of nested subclasses of lists as arrays (:ticket:\u003ccode\u003e[#1398](https://github.com/psycopg/psycopg/issues/1398)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eDEALLOCATE ALL\u003c/code\u003e (:ticket:\u003ccode\u003e[#1408](https://github.com/psycopg/psycopg/issues/1408)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eBetter guards dumping large Python \u003ccode\u003e!int\u003c/code\u003e to binary numeric (:ticket:\u003ccode\u003e[#1414](https://github.com/psycopg/psycopg/issues/1414)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eImprove performance of async queries by reducing the overhead of the\n\u003ccode\u003e!wait_async()\u003c/code\u003e function (:ticket:\u003ccode\u003e[#1331](https://github.com/psycopg/psycopg/issues/1331)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ea542c9534cc9841d50450e0c156b549cc6c805a\"\u003e\u003ccode\u003eea542c9\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/8d31e4711c22b206d8863b9397b3b34f5b106e4d\"\u003e\u003ccode\u003e8d31e47\u003c/code\u003e\u003c/a\u003e chore(deps): bump the actions group across 1 directory with 4 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/268f863e0e8dbdbaf4f10616ebd14ff00edaeb51\"\u003e\u003ccode\u003e268f863\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1370\"\u003e#1370\u003c/a\u003e from Sanjays2402/fix/truncated-binary-copy-error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a412fa4d682f035a9cf3c7886a5c95c15c64ba96\"\u003e\u003ccode\u003ea412fa4\u003c/code\u003e\u003c/a\u003e docs: put together different issues fixed around copy parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/f757307068aef06e439cf164915a3781acf483b5\"\u003e\u003ccode\u003ef757307\u003c/code\u003e\u003c/a\u003e fix: clearer error messages according to truncated copy message part\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/b1f17c44096b8fbc90836d9652d083f23c88e28d\"\u003e\u003ccode\u003eb1f17c4\u003c/code\u003e\u003c/a\u003e test: move existing COPY format parsing tests into a single module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/21eba573f9356276b2a3e0b7c1d86fad03f2872f\"\u003e\u003ccode\u003e21eba57\u003c/code\u003e\u003c/a\u003e test: drop useless parametrization of copy binary parsigh test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/6780e17bcee0b838dedd0aa9c1b6dcc563a50cec\"\u003e\u003ccode\u003e6780e17\u003c/code\u003e\u003c/a\u003e fix(copy): handle truncated binary row headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2f2fcfbf35af4b80a4755fff75fe8b8f5e059193\"\u003e\u003ccode\u003e2f2fcfb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1364\"\u003e#1364\u003c/a\u003e from DylanYoung/fix_client_encoding_aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ccc351ec3180969d105199012a017240492a43c0\"\u003e\u003ccode\u003eccc351e\u003c/code\u003e\u003c/a\u003e refactor: don't store the encodings raw table as a dict\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.2.0...3.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `procrastinate[django]` to 3.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/procrastinate-org/procrastinate/releases\"\u003eprocrastinate[django]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.9.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd task middleware by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1556\"\u003eprocrastinate-org/procrastinate#1556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003econtrib/django: auto-close Django DB connections around each task by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1577\"\u003eprocrastinate-org/procrastinate#1577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd worker middleware by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1579\"\u003eprocrastinate-org/procrastinate#1579\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix worker stop request lost during startup and de-flake shutdown tests by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1564\"\u003eprocrastinate-org/procrastinate#1564\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd GitHub CLI feature to devcontainer by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1554\"\u003eprocrastinate-org/procrastinate#1554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Renovate blockers: ignore pre-commit.ci commits and re-pin benchmark action by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1566\"\u003eprocrastinate-org/procrastinate#1566\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove gitIgnoredAuthors to stop Renovate/pre-commit.ci force-push loop by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1569\"\u003eprocrastinate-org/procrastinate#1569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace deprecated migra with results by \u003ca href=\"https://github.com/EdwardBetts\"\u003e\u003ccode\u003e@​EdwardBetts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1511\"\u003eprocrastinate-org/procrastinate#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeflake test_sync_task_runs_in_parallel by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1574\"\u003eprocrastinate-org/procrastinate#1574\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClean up pyproject.toml by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1575\"\u003eprocrastinate-org/procrastinate#1575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeflake test_polling by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1578\"\u003eprocrastinate-org/procrastinate#1578\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix App.task / Blueprint.task not rendering in the API reference by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1562\"\u003eprocrastinate-org/procrastinate#1562\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependencies\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency django to v6.0.4 [SECURITY] by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1538\"\u003eprocrastinate-org/procrastinate#1538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pytest from 9.0.2 to 9.0.3 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1539\"\u003eprocrastinate-org/procrastinate#1539\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate astral-sh/setup-uv action to v8 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1541\"\u003eprocrastinate-org/procrastinate#1541\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v6.0.5 [SECURITY] by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1545\"\u003eprocrastinate-org/procrastinate#1545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ghcr.io/devcontainers/features/node Docker tag to v2 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1542\"\u003eprocrastinate-org/procrastinate#1542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump idna from 3.11 to 3.15 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1549\"\u003eprocrastinate-org/procrastinate#1549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1532\"\u003eprocrastinate-org/procrastinate#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1565\"\u003eprocrastinate-org/procrastinate#1565\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1567\"\u003eprocrastinate-org/procrastinate#1567\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1503\"\u003eprocrastinate-org/procrastinate#1503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1570\"\u003eprocrastinate-org/procrastinate#1570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop Renovate from proposing setuptools major updates by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1572\"\u003eprocrastinate-org/procrastinate#1572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1573\"\u003eprocrastinate-org/procrastinate#1573\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1576\"\u003eprocrastinate-org/procrastinate#1576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies to v7 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1581\"\u003eprocrastinate-org/procrastinate#1581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1580\"\u003eprocrastinate-org/procrastinate#1580\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EdwardBetts\"\u003e\u003ccode\u003e@​EdwardBetts\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1511\"\u003eprocrastinate-org/procrastinate#1511\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/procrastinate-org/procrastinate/compare/3.8.1...3.9.0\"\u003ehttps://github.com/procrastinate-org/procrastinate/compare/3.8.1...3.9.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/28462ad6e549bd8827eb67bfbe8a6519670198e6\"\u003e\u003ccode\u003e28462ad\u003c/code\u003e\u003c/a\u003e Update all dependencies (\u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/issues/1580\"\u003e#1580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/9d7ee553542cf6e19181acc2348311300a8154a7\"\u003e\u003ccode\u003e9d7ee55\u003c/code\u003e\u003c/a\u003e Update all dependencies to v7 (\u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/issues/1581\"\u003e#1581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/353773353dfea46b9cf428ad638e771f5df38699\"\u003e\u003ccode\u003e3537733\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] auto fixes from pre-commit.com hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/727c7de184be270a258489bfac389daca4c2a1a3\"\u003e\u003ccode\u003e727c7de\u003c/code\u003e\u003c/a\u003e Update all dependencies to v7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/4133f7de69607d90f05b821a50e38e51cb0e16f1\"\u003e\u003ccode\u003e4133f7d\u003c/code\u003e\u003c/a\u003e Update all dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/3d82ddba0ef235a736ea80fc1e68208feeae78b1\"\u003e\u003ccode\u003e3d82ddb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/issues/1579\"\u003e#1579\u003c/a\u003e from procrastinate-org/worker-middleware-feature\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/b3eb4d1debc9b5017f62d2693f75e73a5fc2d8e0\"\u003e\u003ccode\u003eb3eb4d1\u003c/code\u003e\u003c/a\u003e Raise MiddlewareKindMismatch for a sync worker middleware\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/7a36eff7ffb655253cdfd104190470703cff23d5\"\u003e\u003ccode\u003e7a36eff\u003c/code\u003e\u003c/a\u003e Frame Django DB cleanup as a built-in use and link the integration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/032edaef1e1c1dc31b1432c3fc37be5207d22cc8\"\u003e\u003ccode\u003e032edae\u003c/code\u003e\u003c/a\u003e Restructure middleware how-to around both middleware kinds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/6a4a9daa790744c49f6ea3561e3b3a27faf522f1\"\u003e\u003ccode\u003e6a4a9da\u003c/code\u003e\u003c/a\u003e Scope the MiddlewareKindMismatch note to task middleware\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/procrastinate-org/procrastinate/compare/3.0.0...3.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[resend]` to 15.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[resend]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.2\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-2\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[resend]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.2\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-09-05\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES:** Add support for inbound messages using S3 encryption.\n  This requires the :pypi:`amazon-s3-encryption-client-python` package, which\n  is now included when installing with the ``django-anymail[amazon-ses]`` extra.\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eAmazon SES:\u003c/strong\u003e When using the S3 receipt action for inbound email, large\nmessages are now downloaded and parsed incrementally to reduce memory usage.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eMailtrap:\u003c/strong\u003e Support signature verification for tracking event webhooks.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eMailtrap:\u003c/strong\u003e Add support for inbound email. See\n\u003ccode\u003edocs \u0026amp;lt;https://anymail.dev/en/stable/esps/mailtrap/#inbound-webhook\u0026amp;gt;\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Add support for Postmark's bulk API. See\n\u003ccode\u003eUsing Postmark's bulk API \u0026amp;lt;https://anymail.dev/en/stable/esps/postmark/#using-postmark-s-bulk-api\u0026amp;gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Add \u003ccode\u003ePOSTMARK_MESSAGE_STREAM\u003c/code\u003e option to specify the id of the\nPostmark message stream used for sending. With Django 6.1 \u003ccode\u003eMAILERS\u003c/code\u003e you can\nuse a different \u003ccode\u003emessage_stream\u003c/code\u003e for each configured mailer.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eResend:\u003c/strong\u003e Large inbound messages are now downloaded and parsed\nincrementally to reduce memory usage.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES:** Avoid a Python bug that could corrupt images and attachments\n  in inbound messages.\n\n* **Inbound:** ``AnymailInboundMessage``'s ``text`` and ``html`` attributes\n  and ``get_content_text()`` method now normalize line endings to ``\\n``.\n  In earlier releases, either ``\\n`` or ``\\r\\n`` could be returned,\n  inconsistently and somewhat unpredictably.\n\n\nv15.1\n-----\n\n*2026-07-30*\n\nFixes\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/81c6505911b2770ba348e86a0b92a5dc0a65cde2\"\u003e\u003ccode\u003e81c6505\u003c/code\u003e\u003c/a\u003e Release 15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8ce3acac0f7d8f113dfc302bf2936a21b899957c\"\u003e\u003ccode\u003e8ce3aca\u003c/code\u003e\u003c/a\u003e Mailgun: Stop polling event API in integration tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d3c121cd868ec0648eb8a2b5bcd03ba8ad7343cd\"\u003e\u003ccode\u003ed3c121c\u003c/code\u003e\u003c/a\u003e Resend: Stream inbound messages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/9ab940e8900a1703b898833e45a650772bd8c909\"\u003e\u003ccode\u003e9ab940e\u003c/code\u003e\u003c/a\u003e Mailtrap: Make inbound download chunk size configurable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/854084129d43859af6d1ff9daf49394e2807f420\"\u003e\u003ccode\u003e8540841\u003c/code\u003e\u003c/a\u003e Remove unused AnymailInboundMessage.parse_raw_mime_file()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/05dd35a7c0925c2a4b4e038cfb3eb1a19657a055\"\u003e\u003ccode\u003e05dd35a\u003c/code\u003e\u003c/a\u003e Amazon SES: Stream inbound messages from S3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d8b4593eae39c9502bed325e7790b757ab3f6d2c\"\u003e\u003ccode\u003ed8b4593\u003c/code\u003e\u003c/a\u003e Inbound: Normalize line endings on text parts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/aef5d9d52a2ddcb56d6e7e2c66dbdeb9ed6ad908\"\u003e\u003ccode\u003eaef5d9d\u003c/code\u003e\u003c/a\u003e Brevo: Update quirks documentation for HTML body\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/bc8d362f3d9c8b00582b4a129f4b184c835a3a42\"\u003e\u003ccode\u003ebc8d362\u003c/code\u003e\u003c/a\u003e Mailtrap: Make inbound work with example payload\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7bc95200055af32d1926b5038c60a8378838c773\"\u003e\u003ccode\u003e7bc9520\u003c/code\u003e\u003c/a\u003e Amazon SES: Support inbound S3 encryption\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/AIJSAI/backyard/pull/185","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AIJSAI%2Fbackyard/issues/185","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/185/packages"},{"uuid":"5507547597","node_id":"PR_kwDOUTCdd88AAAABELl5rw","number":2,"state":"open","title":"chore(deps): bump the uv group across 2 directories with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-19T03:51:06.000Z","updated_at":"2026-09-19T03:51:56.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":15,"packages":[{"name":"aiohttp","old_version":"3.13.3","new_version":"3.14.3","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"h2","old_version":"4.4.0","new_version":"4.4.1","repository_url":"https://github.com/python-hyper/h2"},{"name":"httpcore2","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"httpx2","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"pyjwt","old_version":"2.10.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-dotenv","old_version":"1.1.0","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 9 updates in the /examples/python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.13.3` | `3.14.3` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.0` |\n| [h2](https://github.com/python-hyper/h2) | `4.4.0` | `4.4.1` |\n| [httpcore2](https://github.com/pydantic/httpx2) | `2.9.0` | `2.10.0` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.9.0` | `2.10.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.10.1` | `2.13.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.0` | `1.2.2` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n\nBumps the uv group with 12 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [web3](https://github.com/ApeWorX/web3.py) | `7.6.0` | `7.15.0` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.13.3` | `3.14.3` |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.14.2` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.0` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.15` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.1` | `2.20.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.10.1` | `2.13.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.0` | `1.2.2` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [starlette](https://github.com/Kludex/starlette) | `0.52.1` | `1.3.1` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `9.0.3` |\n\n\nUpdates `aiohttp` from 3.13.3 to 3.14.3\nUpdates `cryptography` from 46.0.5 to 50.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.5...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `h2` from 4.4.0 to 4.4.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-hyper/h2/blob/master/CHANGELOG.rst\"\u003eh2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.4.1 (2026-08-03)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance improvement: remove consumed frames in-place from data buffer.\u003c/li\u003e\n\u003cli\u003eReject duplicate Host headers in request headers. Thanks to Sunand Mohan for the report.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/bc239af1d1b85bc70482804f30a0e0e587d90a08\"\u003e\u003ccode\u003ebc239af\u003c/code\u003e\u003c/a\u003e v4.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/92b925ed1b1817c82db32893503f74f47fcf4452\"\u003e\u003ccode\u003e92b925e\u003c/code\u003e\u003c/a\u003e add test for duplicate host headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/292a40829feefda98c8509dcdbbb4a57af9bd6a6\"\u003e\u003ccode\u003e292a408\u003c/code\u003e\u003c/a\u003e reject duplicate Host headers in request headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/04d3b87cbc1db020d28c7cfb44fe194558efbdde\"\u003e\u003ccode\u003e04d3b87\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/439b970d0fa19891fa81068907de97dfa3a07c3a\"\u003e\u003ccode\u003e439b970\u003c/code\u003e\u003c/a\u003e prepare for next release cycle\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/9a7ff7430df669fa8e90b6121f3cc1ed64d1115a\"\u003e\u003ccode\u003e9a7ff74\u003c/code\u003e\u003c/a\u003e performance: remove consumed frames in place from data buffer (\u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1321\"\u003e#1321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-hyper/h2/compare/v4.4.0...v4.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpcore2` from 2.9.0 to 2.10.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpcore2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🚀 Performance and memory improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSending large HTTP/2 request bodies no longer copies the body quadratically - sending a 256 MiB body went from ~36s to under 0.1s (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSSE parsing is up to 35x faster on highly fragmented streams (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCookie extraction is now skipped for responses without a \u003ccode\u003eSet-Cookie\u003c/code\u003e header, making typical requests roughly 8% faster (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🕸️ WebAssembly / Emscripten support\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ehttpx2\u003c/code\u003e now runs on Pyodide / Emscripten, using a JavaScript \u003ccode\u003efetch\u003c/code\u003e-based transport defined in \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1114\"\u003epydantic/httpx2#1114\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e!\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running on WebAssembly / Emscripten via Pyodide by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1071\"\u003epydantic/httpx2#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd RFC 9110 status code constants by \u003ca href=\"https://github.com/mbeijen\"\u003e\u003ccode\u003e@​mbeijen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1069\"\u003epydantic/httpx2#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove SSE chunk buffering performance by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip cookie extraction without \u003ccode\u003eSet-Cookie\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e by \u003ca href=\"https://github.com/ItsDrike\"\u003e\u003ccode\u003e@​ItsDrike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1121\"\u003epydantic/httpx2#1121\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce WebSocket max message size across fragments by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1085\"\u003epydantic/httpx2#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore unsolicited and duplicate Pong frames by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1122\"\u003epydantic/httpx2#1122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid quadratic copying when sending large HTTP/2 request bodies by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePropagate the original exception instead of raising \u003ccode\u003eKeyError\u003c/code\u003e when an HTTP/2 stream fails by \u003ca href=\"https://github.com/yhay81\"\u003e\u003ccode\u003e@​yhay81\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1093\"\u003epydantic/httpx2#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStart TLS for the \u003ccode\u003ewss\u003c/code\u003e scheme in SOCKS5 proxy connections by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1104\"\u003epydantic/httpx2#1104\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🙏 New Contributors\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/a966320e75477b8c55ee78fdb8f57ead6a574cb0\"\u003e\u003ccode\u003ea966320\u003c/code\u003e\u003c/a\u003e Version 2.10.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1129\"\u003e#1129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/586f968f5510aa4d3b7edd1f1b039684c42945ee\"\u003e\u003ccode\u003e586f968\u003c/code\u003e\u003c/a\u003e Avoid quadratic copying when sending large HTTP/2 request bodies (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dee1d1ace3021404d0aa255957821eda97c94c43\"\u003e\u003ccode\u003edee1d1a\u003c/code\u003e\u003c/a\u003e Return \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dec24ad57d1d337de7de23c011eb566a145e7b40\"\u003e\u003ccode\u003edec24ad\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/454b8b2197f62d699ff3ad762917643926b4da77\"\u003e\u003ccode\u003e454b8b2\u003c/code\u003e\u003c/a\u003e Ignore unsolicited and duplicate Pong frames (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/cbfc0e04ef6507da29ccbb3b9c2e5b23dd693414\"\u003e\u003ccode\u003ecbfc0e0\u003c/code\u003e\u003c/a\u003e Improve SSE chunk buffering performance (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1117\"\u003e#1117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/ad141d876c7d3c3f58555cbb0a178ec2c1f15b51\"\u003e\u003ccode\u003ead141d8\u003c/code\u003e\u003c/a\u003e Refactor SSE parser coordination (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1118\"\u003e#1118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e0b01245e42d2091034ee9455cbb068bc0d6c0c6\"\u003e\u003ccode\u003ee0b0124\u003c/code\u003e\u003c/a\u003e Make \u003ccode\u003e_client\u003c/code\u003e depend on the \u003ccode\u003e_transports\u003c/code\u003e package instead of its submodules ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e52f963c62f397f225c8d29573aedbe5ae613906\"\u003e\u003ccode\u003ee52f963\u003c/code\u003e\u003c/a\u003e Skip dependencies not needed on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1114\"\u003e#1114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/5d9eedc98186c612d0e426df417f78f6ec21e9ca\"\u003e\u003ccode\u003e5d9eedc\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.9.0...v2.10.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx2` from 2.9.0 to 2.10.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpx2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🚀 Performance and memory improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSending large HTTP/2 request bodies no longer copies the body quadratically - sending a 256 MiB body went from ~36s to under 0.1s (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSSE parsing is up to 35x faster on highly fragmented streams (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCookie extraction is now skipped for responses without a \u003ccode\u003eSet-Cookie\u003c/code\u003e header, making typical requests roughly 8% faster (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🕸️ WebAssembly / Emscripten support\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ehttpx2\u003c/code\u003e now runs on Pyodide / Emscripten, using a JavaScript \u003ccode\u003efetch\u003c/code\u003e-based transport defined in \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1114\"\u003epydantic/httpx2#1114\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e!\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running on WebAssembly / Emscripten via Pyodide by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1071\"\u003epydantic/httpx2#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd RFC 9110 status code constants by \u003ca href=\"https://github.com/mbeijen\"\u003e\u003ccode\u003e@​mbeijen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1069\"\u003epydantic/httpx2#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove SSE chunk buffering performance by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip cookie extraction without \u003ccode\u003eSet-Cookie\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e by \u003ca href=\"https://github.com/ItsDrike\"\u003e\u003ccode\u003e@​ItsDrike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1121\"\u003epydantic/httpx2#1121\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce WebSocket max message size across fragments by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1085\"\u003epydantic/httpx2#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore unsolicited and duplicate Pong frames by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1122\"\u003epydantic/httpx2#1122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid quadratic copying when sending large HTTP/2 request bodies by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePropagate the original exception instead of raising \u003ccode\u003eKeyError\u003c/code\u003e when an HTTP/2 stream fails by \u003ca href=\"https://github.com/yhay81\"\u003e\u003ccode\u003e@​yhay81\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1093\"\u003epydantic/httpx2#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStart TLS for the \u003ccode\u003ewss\u003c/code\u003e scheme in SOCKS5 proxy connections by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1104\"\u003epydantic/httpx2#1104\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🙏 New Contributors\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/blob/main/src/httpx2/CHANGELOG.md\"\u003ehttpx2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.10.0 (August 9th, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running on WebAssembly / Emscripten via Pyodide, using a JavaScript\n\u003ccode\u003efetch\u003c/code\u003e-based transport defined in \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd RFC 9110 status code constants. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove SSE chunk buffering performance. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003e#1117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip cookie extraction for responses without \u003ccode\u003eSet-Cookie\u003c/code\u003e headers. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003e#1107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce the WebSocket max message size across fragmented messages. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1085\"\u003e#1085\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIgnore unsolicited and duplicate WebSocket Pong frames. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.9.1 (July 24th, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlias \u003ccode\u003ehttpcore\u003c/code\u003e imports to \u003ccode\u003ehttpcore2\u003c/code\u003e in \u003ccode\u003ealias_httpx()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1082\"\u003e#1082\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/a966320e75477b8c55ee78fdb8f57ead6a574cb0\"\u003e\u003ccode\u003ea966320\u003c/code\u003e\u003c/a\u003e Version 2.10.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1129\"\u003e#1129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dee1d1ace3021404d0aa255957821eda97c94c43\"\u003e\u003ccode\u003edee1d1a\u003c/code\u003e\u003c/a\u003e Return \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dec24ad57d1d337de7de23c011eb566a145e7b40\"\u003e\u003ccode\u003edec24ad\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/454b8b2197f62d699ff3ad762917643926b4da77\"\u003e\u003ccode\u003e454b8b2\u003c/code\u003e\u003c/a\u003e Ignore unsolicited and duplicate Pong frames (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/cbfc0e04ef6507da29ccbb3b9c2e5b23dd693414\"\u003e\u003ccode\u003ecbfc0e0\u003c/code\u003e\u003c/a\u003e Improve SSE chunk buffering performance (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1117\"\u003e#1117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/ad141d876c7d3c3f58555cbb0a178ec2c1f15b51\"\u003e\u003ccode\u003ead141d8\u003c/code\u003e\u003c/a\u003e Refactor SSE parser coordination (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1118\"\u003e#1118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e0b01245e42d2091034ee9455cbb068bc0d6c0c6\"\u003e\u003ccode\u003ee0b0124\u003c/code\u003e\u003c/a\u003e Make \u003ccode\u003e_client\u003c/code\u003e depend on the \u003ccode\u003e_transports\u003c/code\u003e package instead of its submodules ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e52f963c62f397f225c8d29573aedbe5ae613906\"\u003e\u003ccode\u003ee52f963\u003c/code\u003e\u003c/a\u003e Skip dependencies not needed on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1114\"\u003e#1114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/5d9eedc98186c612d0e426df417f78f6ec21e9ca\"\u003e\u003ccode\u003e5d9eedc\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/55fad715eb24b3b1c6bbf96757bcb49a03e121de\"\u003e\u003ccode\u003e55fad71\u003c/code\u003e\u003c/a\u003e Bump the python-packages group across 1 directory with 15 updates (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1112\"\u003e#1112\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.9.0...v2.10.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.10.1 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0\u003c/h2\u003e\n\u003ch1\u003ePyJWT 2.13.0 — Security Release\u003c/h1\u003e\n\u003cp\u003eThis release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\"\u003e\u003ccode\u003eGHSA-xgmm-8j9v-c9wx\u003c/code\u003e\u003c/a\u003e — JWK JSON accepted as HMAC secret (algorithm confusion).\u003c/strong\u003e \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e previously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms in \u003ccode\u003ealgorithms=[…]\u003c/code\u003e and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. \u003cem\u003eReported by \u003ca href=\"https://github.com/aradona91\"\u003e\u003ccode\u003e@​aradona91\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\"\u003e\u003ccode\u003eGHSA-jq35-7prp-9v3f\u003c/code\u003e\u003c/a\u003e — Algorithm allow-list bypass with \u003ccode\u003ePyJWK\u003c/code\u003e / \u003ccode\u003ePyJWKClient\u003c/code\u003e.\u003c/strong\u003e When verifying with a \u003ccode\u003ePyJWK\u003c/code\u003e, the caller's \u003ccode\u003ealgorithms=[…]\u003c/code\u003e allow-list was checked against the token header \u003ccode\u003ealg\u003c/code\u003e as a string only; actual verification used the algorithm bound to the \u003ccode\u003ePyJWK\u003c/code\u003e. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header \u003ccode\u003ealg\u003c/code\u003e to match the \u003ccode\u003ePyJWK\u003c/code\u003e's algorithm before verification. \u003cem\u003eReported by \u003ca href=\"https://github.com/sushi-gif\"\u003e\u003ccode\u003e@​sushi-gif\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\"\u003e\u003ccode\u003eGHSA-w7vc-732c-9m39\u003c/code\u003e\u003c/a\u003e — DoS via base64 decode of unused payload segment when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/strong\u003e For detached-payload JWS (\u003ccode\u003eb64=false\u003c/code\u003e), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied \u003ccode\u003edetached_payload\u003c/code\u003e. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. \u003cem\u003eReported by \u003ca href=\"https://github.com/thesmartshadow\"\u003e\u003ccode\u003e@​thesmartshadow\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\"\u003e\u003ccode\u003eGHSA-993g-76c3-p5m4\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e accepts non-HTTP(S) URIs.\u003c/strong\u003e \u003ccode\u003ePyJWKClient.fetch_data\u003c/code\u003e passed its URI to \u003ccode\u003eurllib.request.urlopen\u003c/code\u003e, which by default also handles \u003ccode\u003efile://\u003c/code\u003e, \u003ccode\u003eftp://\u003c/code\u003e, and \u003ccode\u003edata:\u003c/code\u003e schemes. An application that fed an attacker-influenced URI into \u003ccode\u003ePyJWKClient\u003c/code\u003e could be coerced into reading local files or reaching other unintended schemes. \u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects any URI whose scheme isn't \u003ccode\u003ehttp\u003c/code\u003e or \u003ccode\u003ehttps\u003c/code\u003e. \u003cem\u003eReported by \u003ca href=\"https://github.com/KEIJOT\"\u003e\u003ccode\u003e@​KEIJOT\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\"\u003e\u003ccode\u003eGHSA-fhv5-28vv-h8m8\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e cache wiped on fetch error.\u003c/strong\u003e A \u003ccode\u003efinally\u003c/code\u003e-block \u003ccode\u003eput(jwk_set=None)\u003c/code\u003e cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. \u003cem\u003eReported by \u003ca href=\"https://github.com/eddieran\"\u003e\u003ccode\u003e@​eddieran\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty HMAC keys outright in \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e with \u003ccode\u003eInvalidKeyError\u003c/code\u003e instead of accepting them with only a warning. Defends against the \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e footgun. \u003cem\u003eThanks to \u003ca href=\"https://github.com/SnailSploit\"\u003e\u003ccode\u003e@​SnailSploit\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/spartan8806\"\u003e\u003ccode\u003e@​spartan8806\u003c/code\u003e\u003c/a\u003e for the reports.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eForward per-call \u003ccode\u003eoptions\u003c/code\u003e (including \u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e) from \u003ccode\u003ePyJWT.decode\u003c/code\u003e through to \u003ccode\u003ePyJWS._verify_signature\u003c/code\u003e. The option was previously silently dropped between the two layers, so it only took effect when set on the \u003ccode\u003ePyJWT\u003c/code\u003e instance. \u003cem\u003eThanks to \u003ca href=\"https://github.com/WLUB\"\u003e\u003ccode\u003e@​WLUB\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRFC 7797 §3 compliance for \u003ccode\u003eb64=false\u003c/code\u003e:\u003c/strong\u003e the encoder now auto-adds \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e to \u003ccode\u003ecrit\u003c/code\u003e, and the decoder rejects tokens that set \u003ccode\u003eb64=false\u003c/code\u003e without listing it in \u003ccode\u003ecrit\u003c/code\u003e. \u003cem\u003eThanks to \u003ca href=\"https://github.com/MachineLearning-Nerd\"\u003e\u003ccode\u003e@​MachineLearning-Nerd\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups, by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1152\"\u003e#1152\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eUpgrade notes\u003c/h2\u003e\n\u003cp\u003eMost fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmpty HMAC keys now raise.\u003c/strong\u003e If your app passed \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e or \u003ccode\u003eb\u0026quot;\u0026quot;\u003c/code\u003e as a secret (often via a missing env var, e.g. \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e), \u003ccode\u003eencode\u003c/code\u003e/\u003ccode\u003edecode\u003c/code\u003e will now raise \u003ccode\u003eInvalidKeyError\u003c/code\u003e. This is the intended behavior — fix the configuration.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWK\u003c/code\u003e decoding now requires the token's \u003ccode\u003ealg\u003c/code\u003e to match the JWK's algorithm.\u003c/strong\u003e Previously a mismatch was silently honored if the header \u003ccode\u003ealg\u003c/code\u003e appeared in the allow-list. Tokens that relied on this mismatch will now fail with \u003ccode\u003eInvalidAlgorithmError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects non-HTTP(S) URIs at construction time.\u003c/strong\u003e Tests or dev environments that fetched JWKS from \u003ccode\u003efile://\u003c/code\u003e URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct \u003ccode\u003ePyJWKSet.from_dict(...)\u003c/code\u003e directly).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eb64=false\u003c/code\u003e tokens are now strictly RFC 7515 / 7797 compliant.\u003c/strong\u003e Tokens with a non-empty compact-form payload segment, or that omit \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e from \u003ccode\u003ecrit\u003c/code\u003e, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e set per-call now takes effect.\u003c/strong\u003e Callers who passed \u003ccode\u003eoptions={\u0026quot;enforce_minimum_key_length\u0026quot;: True}\u003c/code\u003e to \u003ccode\u003ejwt.decode()\u003c/code\u003e previously got no enforcement; they will now get \u003ccode\u003eInvalidKeyError\u003c/code\u003e on undersized keys, as documented.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd typing_extensions dependency for Python \u0026lt; 3.11 by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1151\"\u003ejpadilla/pyjwt#1151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.0\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by \u003ca href=\"https://github.com/dmbs335\"\u003e\u003ccode\u003e@​dmbs335\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f\"\u003eGHSA-752w-5fwx-jx9f\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.13.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject JWK JSON documents passed as raw HMAC secrets in\n  ``HMACAlgorithm.prepare_key`` to close an algorithm-confusion gap that\n  the existing PEM/SSH guard did not cover. Reported by @aradona91 in\n  `GHSA-xgmm-8j9v-c9wx \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\u0026gt;`__.\n- Bind the JWT header ``alg`` to ``PyJWK.algorithm_name`` during\n  verification so the caller's ``algorithms=[...]`` allow-list cannot be\n  bypassed when decoding with a ``PyJWK`` / ``PyJWKClient`` key. Reported\n  by @sushi-gif in `GHSA-jq35-7prp-9v3f \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\u0026gt;`__.\n- Reject non-``http(s)`` URI schemes in ``PyJWKClient`` so attacker-\n  influenced URIs cannot read local files or reach unintended schemes via\n  urllib's default ``file://`` / ``ftp://`` / ``data:`` handlers. Reported\n  by @KEIJOT in `GHSA-993g-76c3-p5m4 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\u0026gt;`__.\n- Preserve the cached JWK Set on fetch errors in ``PyJWKClient.fetch_data``.\n  The previous ``finally``-block ``put(None)`` pattern cleared the cache\n  on any transient outage, turning one bad JWKS request into application-\n  wide auth failure. Reported by @eddieran in `GHSA-fhv5-28vv-h8m8 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\u0026gt;`__.\n- Skip the unconditional base64 decode of the compact-form payload segment\n  when ``b64=false`` is set in the protected header, and require that\n  segment to be empty (RFC 7515 Appendix F detached form). Closes an\n  unauthenticated DoS amplifier. Reported by @thesmartshadow in\n  `GHSA-w7vc-732c-9m39 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject empty HMAC keys outright in ``HMACAlgorithm.prepare_key`` with\n  ``InvalidKeyError`` instead of accepting them with only a warning.\n  Thanks to @SnailSploit and @spartan8806 for independently flagging the\n  footgun.\n- Forward per-call ``options`` (including ``enforce_minimum_key_length``)\n  from ``PyJWT.decode`` through to ``PyJWS._verify_signature`` so the\n  option actually takes effect when set at the call site rather than only\n  on the ``PyJWT`` instance. Thanks to @WLUB for the report.\n- RFC 7797 §3 compliance for ``b64=false``: the encoder now auto-adds\n  ``\u0026amp;quot;b64\u0026amp;quot;`` to the ``crit`` header parameter, and the decoder rejects\n  tokens that set ``b64=false`` without listing it in ``crit``. Thanks to\n  @MachineLearning-Nerd for the report.\n\nChanged\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1152](https://github.com/jpadilla/pyjwt/issues/1152) \u0026amp;lt;https://github.com/jpadilla/pyjwt/pull/1152\u0026amp;gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ccode\u003ev2.12.1 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u0026amp;gt;\u003c/code\u003e__\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7144e4534c34810f4525dc4578a32addd8212cff\"\u003e\u003ccode\u003e7144e45\u003c/code\u003e\u003c/a\u003e Apply ruff format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/d2f4bec4963897c0ef96ef64a875894f2c8542ab\"\u003e\u003ccode\u003ed2f4bec\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003ecast()\u003c/code\u003e calls with cross-version \u003ccode\u003etype: ignore\u003c/code\u003e for \u003ccode\u003eprepare_key\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/22f478cebddd8294259c30f037ecb92b0b348774\"\u003e\u003ccode\u003e22f478c\u003c/code\u003e\u003c/a\u003e Remove redundant casts in \u003ccode\u003eRSAAlgorithm.prepare_key\u003c/code\u003e and `ECAlgorithm.prepare...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/95791b1759b8aa4f2203575d344d5c78564cdc81\"\u003e\u003ccode\u003e95791b1\u003c/code\u003e\u003c/a\u003e Bundle security fixes and hardening into 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/dcc27a9d3182a2349c30b160758785c6ce7a6508\"\u003e\u003ccode\u003edcc27a9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1155\"\u003e#1155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9d08a9a1896845ed8eaf88e6f6ac61e5800c3e7a\"\u003e\u003ccode\u003e9d08a9a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/b87c10014d4109f0214fea188d00faaaf8a80e64\"\u003e\u003ccode\u003eb87c100\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1154\"\u003e#1154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/40e3147eb5f790d8d041772e5fc00728a176c812\"\u003e\u003ccode\u003e40e3147\u003c/code\u003e\u003c/a\u003e Migrate development extras to dependency groups (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1152\"\u003e#1152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a4e1a3d1218b01c5806420b8f16d9308ac4adc30\"\u003e\u003ccode\u003ea4e1a3d\u003c/code\u003e\u003c/a\u003e Add typing_extensions dependency for Python \u0026lt; 3.11 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/bd9700cca7f9258fadcc429c1034e508025931f2\"\u003e\u003ccode\u003ebd9700c\u003c/code\u003e\u003c/a\u003e Use PyJWK algorithm when encoding without explicit algorithm (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.10.1...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.0 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.1.1] - 2025-06-24\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCLI: Ensure \u003ccode\u003efind_dotenv\u003c/code\u003e work reliably on python 3.13 by [\u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/563\"\u003e#563\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.0...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.33.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e docs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e docs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e docs: exclude Response.is_permanent_redirect from API docs (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e docs: clarify Quickstart POST example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.6.3 to 2.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been read and decompressed partially. (Reported by \u003ca href=\"https://github.com/Cycloctane\"\u003e\u003ccode\u003e@​Cycloctane\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or \u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed using the official \u003ca href=\"https://pypi.org/project/brotli/\"\u003eBrotli\u003c/a\u003e library. (Reported by \u003ca href=\"https://github.com/kimkou2024\"\u003e\u003ccode\u003e@​kimkou2024\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee GHSA-mf9v-mfxr-j63j for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip sensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by \u003ca href=\"https://github.com/christos-spearbit\"\u003e\u003ccode\u003e@​christos-spearbit\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3763\"\u003eurllib3/urllib3#3763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3720\"\u003eurllib3/urllib3#3720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003eurllib3/urllib3#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3777\"\u003eurllib3/urllib3#3777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed data buffered from previous partial reads. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3636\"\u003eurllib3/urllib3#3636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the response after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4967\"\u003eurllib3/urllib3#4967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eHTTPResponse.read_chunked()\u003c/code\u003e to handle \u003ccode\u003eamt=0\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3793\"\u003eurllib3/urllib3#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003e_TYPE_BODY\u003c/code\u003e type alias to include missing \u003ccode\u003eIterable[str]\u003c/code\u003e, matching the documented and runtime behavior of chunked request bodies. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3798\"\u003eurllib3/urllib3#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eLocationParseError\u003c/code\u003e when paths resembling schemeless URIs were passed to \u003ccode\u003eHTTPConnectionPool.urlopen()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3352\"\u003eurllib3/urllib3#3352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eBaseHTTPResponse.readinto()\u003c/code\u003e type annotation to accept \u003ccode\u003ememoryview\u003c/code\u003e in addition to \u003ccode\u003ebytearray\u003c/code\u003e, matching the \u003ccode\u003eio.RawIOBase.readinto\u003c/code\u003e contract and enabling use with \u003ccode\u003eio.BufferedReader\u003c/code\u003e without type errors. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3764\"\u003eurllib3/urllib3#3764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/blob/main/CHANGES.rst\"\u003eurllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.7.0 (2026-05-07)\u003c/h1\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues.\nImpact was limited to specific use cases detailed in the accompanying\nadvisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been\nread and decompressed partially.\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or\n\u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed\nusing the official \u003ccode\u003eBrotli \u0026lt;https://pypi.org/project/brotli/\u0026gt;\u003c/code\u003e__ library.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee \u003ccode\u003eGHSA-mf9v-mfxr-j63j \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j\u0026gt;\u003c/code\u003e__\nfor details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip\nsensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when\nredirecting to a different host.\n(\u003ccode\u003eGHSA-qccp-gfcp-xxvc \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc\u0026gt;\u003c/code\u003e__)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better\nvisibility of existing deprecation notices. Rescheduled the removal of\ndeprecated features to version 3.0.\n(\u003ccode\u003e[#3763](https://github.com/urllib3/urllib3/issues/3763) \u0026lt;https://github.com/urllib3/urllib3/issues/3763\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9.\n(\u003ccode\u003e[#3720](https://github.com/urllib3/urllib3/issues/3720) \u0026lt;https://github.com/urllib3/urllib3/issues/3720\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10.\n(\u003ccode\u003e[#4979](https://github.com/urllib3/urllib3/issues/4979) \u0026lt;https://github.com/urllib3/urllib3/issues/4979\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0.\n(\u003ccode\u003e[#3777](https://github.com/urllib3/urllib3/issues/3777) \u0026lt;https://github.com/urllib3/urllib3/issues/3777\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed\ndata buffered from previous partial reads.\n(\u003ccode\u003e[#3636](https://github.com/urllib3/urllib3/issues/3636) \u0026lt;https://github.com/urllib3/urllib3/issues/3636\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the\nresponse after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2\"\u003e\u003ccode\u003e9a950b9\u003c/code\u003e\u003c/a\u003e Release 2.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc\"\u003e\u003ccode\u003e5ec0de4\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2bdcc44d1e163fb5cc48a8662425e35e15adfe6a\"\u003e\u003ccode\u003e2bdcc44\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/f45b0df09d8620ac6ed0491eb9362c8c87b7bc2c\"\u003e\u003ccode\u003ef45b0...\n\n_Description has been truncated_","html_url":"https://github.com/dabelstech-creator/cdp-sdk/pull/2","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabelstech-creator%2Fcdp-sdk/issues/2","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2/packages"},{"uuid":"5507189123","node_id":"PR_kwDOPCehC88AAAABELUD2A","number":221,"state":"closed","title":"Bump cryptography from 49.0.0 to 50.0.0","user":"dependabot[bot]","labels":["lgtm","approved","size/M","dependencies","python:uv"],"assignees":["nabuskey"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-22T21:02:06.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-19T02:33:25.000Z","updated_at":"2026-09-22T21:02:15.000Z","time_to_close":325721,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"cryptography","old_version":"49.0.0","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps [cryptography](https://github.com/pyca/cryptography) from 49.0.0 to 50.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/49.0.0...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=uv\u0026previous-version=49.0.0\u0026new-version=50.0.0)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/kubeflow/mcp-apache-spark-history-server/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/kubeflow/mcp-apache-spark-history-server/pull/221","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubeflow%2Fmcp-apache-spark-history-server/issues/221","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/221/packages"},{"uuid":"5506212254","node_id":"PR_kwDOUE4m3s8AAAABEKg5kg","number":14,"state":"closed","title":"chore(deps): bump the python-runtime group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-25T23:58:36.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-19T00:00:03.000Z","updated_at":"2026-09-25T23:58:38.000Z","time_to_close":604713,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-runtime","update_count":16,"packages":[{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"numpy","old_version":"2.5.2","new_version":"2.5.3","repository_url":"https://github.com/numpy/numpy"},{"name":"onnxruntime","old_version":"1.29.0","new_version":"1.30.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"openai","old_version":"3.3.1","new_version":"3.14.1","repository_url":"https://github.com/openai/openai-python"},{"name":"piper-tts","old_version":"1.4.2","new_version":"1.8.0","repository_url":"https://github.com/OHF-voice/piper1-gpl"},{"name":"playwright","old_version":"1.55.0","new_version":"1.63.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"scipy","old_version":"1.18.0","new_version":"1.18.1","repository_url":"https://github.com/scipy/scipy"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.2","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"uvicorn","old_version":"0.52.4","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"vllm","old_version":"0.27.1","new_version":"0.29.0","repository_url":"https://github.com/vllm-project/vllm"},{"name":"huggingface-hub","old_version":"1.28.0","new_version":"1.31.0","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"ninja","old_version":"1.13.0","new_version":"1.13.2","repository_url":"https://github.com/ninja-build/ninja"},{"name":"accelerate","old_version":"1.14.0","new_version":"1.15.0","repository_url":"https://github.com/huggingface/accelerate"},{"name":"torch","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"transformers","old_version":"5.15.1","new_version":"5.17.0","repository_url":"https://github.com/huggingface/transformers"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-runtime group with 16 updates in the /requirements directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.5.2` | `2.5.3` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.29.0` | `1.30.0` |\n| [openai](https://github.com/openai/openai-python) | `3.3.1` | `3.14.1` |\n| [piper-tts](https://github.com/OHF-voice/piper1-gpl) | `1.4.2` | `1.8.0` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.55.0` | `1.63.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [scipy](https://github.com/scipy/scipy) | `1.18.0` | `1.18.1` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.4` | `0.53.0` |\n| [vllm](https://github.com/vllm-project/vllm) | `0.27.1` | `0.29.0` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.28.0` | `1.31.0` |\n| [ninja](https://github.com/ninja-build/ninja) | `1.13.0` | `1.13.2` |\n| [accelerate](https://github.com/huggingface/accelerate) | `1.14.0` | `1.15.0` |\n| [torch](https://github.com/pytorch/pytorch) | `2.13.0` | `2.14.0` |\n| [transformers](https://github.com/huggingface/transformers) | `5.15.1` | `5.17.0` |\n\n\nUpdates `cryptography` from 46.0.5 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.5...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.5.2 to 2.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.3 (Sep 6, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.3 Release Notes\u003c/h1\u003e\n\u003cp\u003eThe NumPy 2.5.3 is a patch release that fixes bugs discovered after the 2.5.2\nrelease. Apart from the usual bug and maintenance work, there are a number of\nStringDType related fixes for problems discovered during the ongoing string\nwork in the main branch.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCasting a fixed-width byte string array (\u003ccode\u003enp.bytes_\u003c/code\u003e) to \u003ccode\u003eStringDType\u003c/code\u003e\nnow raises \u003ccode\u003eTypeError\u003c/code\u003e when the bytes are not valid UTF-8. Previously the\ninvalid bytes were stored as-is and later caused undefined behavior in\nstring operations.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32296\"\u003egh-32296\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eMaskedArray._fill_value\u003c/code\u003e would become stale when ufuncs that change dtype\nleft the result holding a fill_value typed for the old dtype. The mismatch\nwas silent until something later called \u003ccode\u003e_check_fill_value\u003c/code\u003e, such as\n\u003ccode\u003e.view()\u003c/code\u003e, and then a \u003ccode\u003eTypeError\u003c/code\u003e would be raised. Now, when the copied\nfill_value is no longer valid for the new dtype, fall back to the\ndefault fill_value for that dtype instead of propagating the stale value.\nThis may raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is complex and the\nnew dtype is real.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32423\"\u003egh-32423\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 9 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eIason Krommydas\u003c/li\u003e\n\u003cli\u003eJames Davies +\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eMaanas Arora\u003c/li\u003e\n\u003cli\u003eMatti Picus\u003c/li\u003e\n\u003cli\u003eNathan Goldbaum\u003c/li\u003e\n\u003cli\u003eShikhar Goel +\u003c/li\u003e\n\u003cli\u003eYeonho Kim +\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePull requests merged\u003c/h2\u003e\n\u003cp\u003eA total of 27 pull requests were merged for this release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32235\"\u003e#32235\u003c/a\u003e: MAINT: Prepare 2.5.x for further development\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/dd88c0c19b54ad9ed3533224221285bf0873249a\"\u003e\u003ccode\u003edd88c0c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32511\"\u003e#32511\u003c/a\u003e from charris/prepare-2.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/edcac6acc392f4010933ee83e8a4769a7cfe92c5\"\u003e\u003ccode\u003eedcac6a\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.3 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/fd4d908aff89773ead13f7c6a0ab31153f14439e\"\u003e\u003ccode\u003efd4d908\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32509\"\u003e#32509\u003c/a\u003e from charris/backport-32496\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/65bb1da13d0ee784be84d173b86784f0d64bdaca\"\u003e\u003ccode\u003e65bb1da\u003c/code\u003e\u003c/a\u003e BUG: fix crash in ufunc.resolve_dtypes with a Python scalar type (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32496\"\u003e#32496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/294956e85dfaea149aada1278c2ed6be0f6f28c8\"\u003e\u003ccode\u003e294956e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32506\"\u003e#32506\u003c/a\u003e from charris/backport-32503\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/26428d9a3f5ab4f604b326347e3a9c6dcc00c1cb\"\u003e\u003ccode\u003e26428d9\u003c/code\u003e\u003c/a\u003e DOC: fix scipy docs links in intersphinx mapping (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32507\"\u003e#32507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/5fab1cbc6aa9e119d9f931243a56c6fbca989476\"\u003e\u003ccode\u003e5fab1cb\u003c/code\u003e\u003c/a\u003e DOC: use static scipy doc site for intershpinx (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32503\"\u003e#32503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/7beed2f7e9a24e493a04ff7e2eb1db0d7f9c50e6\"\u003e\u003ccode\u003e7beed2f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32481\"\u003e#32481\u003c/a\u003e from ngoldbaum/stringdtype-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/8972f70798a2ba1bb4557157982fd6001906f993\"\u003e\u003ccode\u003e8972f70\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32478\"\u003e#32478\u003c/a\u003e from charris/backport-32466\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/ab1b58902a868d4151ef3cf8dbeb91d8a1924fa4\"\u003e\u003ccode\u003eab1b589\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32477\"\u003e#32477\u003c/a\u003e from charris/backport-32423\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.5.2...v2.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `onnxruntime` from 1.29.0 to 1.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/onnxruntime/releases\"\u003eonnxruntime's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eONNX Runtime v1.30.0\u003c/h2\u003e\n\u003cp\u003eONNX Runtime 1.30.0 expands generative AI inference, improves CPU and GPU performance, adds Go bindings, and strengthens runtime reliability. These notes cover changes since ONNX Runtime 1.29.1.\u003c/p\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExpanded CUDA inference support with variable-length causal convolution for continuous batching, speculative decoding in paged XQA, and INT4 paged KV caches with per-channel scales (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32168\"\u003e#32168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32340\"\u003e#32340\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32515\"\u003e#32515\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImproved WebGPU PagedAttention, added GPT-OSS support and INT8 KV-cache block quantization, and extended convolution optimizations (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31727\"\u003e#31727\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32277\"\u003e#32277\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32284\"\u003e#32284\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32420\"\u003e#32420\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded fused CPU LinearAttention kernels for AVX-512, Arm64 NEON, and SVE, plus AVX2 LayerNorm/RMSNorm acceleration (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31674\"\u003e#31674\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31973\"\u003e#31973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32178\"\u003e#32178\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32356\"\u003e#32356\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded Go bindings for the ONNX Runtime C API and DeepSeek Engram contrib operators (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29615\"\u003e#29615\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32268\"\u003e#32268\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAnnouncements \u0026amp; Compatibility\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFP4 QMoE kernels are now enabled by default in CUDA builds, with Windows build support added in this release. Source builds can opt out with \u003ccode\u003e-Donnxruntime_USE_FP4_QMOE=OFF\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32096\"\u003e#32096\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32163\"\u003e#32163\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA fpA-intB builds now default to a compact kernel set for FP16 activations, INT4/INT8 weights, scale-only quantization, and \u003ccode\u003eblock_size=32\u003c/code\u003e. Set \u003ccode\u003e-Donnxruntime_USE_FPA_INTB_GEMM_FULL=ON\u003c/code\u003e when building from source to retain the full kernel set, including BF16, zero-point, bias, larger-block-size, and native Hopper variants (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32324\"\u003e#32324\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCPU FP16 \u003ccode\u003eGemm\u003c/code\u003e and \u003ccode\u003eMatMul\u003c/code\u003e execution is gated on hardware acceleration. CPU-assigned FP16 nodes without a matching kernel now fall back to FP32 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32301\"\u003e#32301\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32197\"\u003e#32197\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eWebGPU plugin EP packaging now supports Linux AArch64. Plugin versions were advanced to WebGPU 0.4.0 and CUDA 0.2 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32287\"\u003e#32287\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31960\"\u003e#31960\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31970\"\u003e#31970\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity \u0026amp; Reliability\u003c/h2\u003e\n\u003ch3\u003eModel Loading, Memory, and Input Validation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimited nested model-graph depth and canonicalized external-data locations to harden model loading (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32344\"\u003e#32344\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32135\"\u003e#32135\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded checked rounding for BFC arena allocations and fixed prepacked-weight reference lifetimes (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32010\"\u003e#32010\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32040\"\u003e#32040\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eStrengthened shape, rank, and parameter validation for \u003ccode\u003eSplit\u003c/code\u003e, \u003ccode\u003eScan\u003c/code\u003e, \u003ccode\u003eGatherND\u003c/code\u003e, \u003ccode\u003eScatterND\u003c/code\u003e, \u003ccode\u003eSpaceToDepth\u003c/code\u003e/\u003ccode\u003eDepthToSpace\u003c/code\u003e, \u003ccode\u003eCrop\u003c/code\u003e, \u003ccode\u003eConv\u003c/code\u003e, \u003ccode\u003eNormalizer\u003c/code\u003e, and pooling (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29461\"\u003e#29461\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31668\"\u003e#31668\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32034\"\u003e#32034\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32039\"\u003e#32039\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32076\"\u003e#32076\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32157\"\u003e#32157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32160\"\u003e#32160\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32161\"\u003e#32161\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32345\"\u003e#32345\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32349\"\u003e#32349\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eHardened generation and attention input handling, including attention-attribute narrowing, \u003ccode\u003eBifurcationDetector\u003c/code\u003e inputs, generation subgraph shapes, and QEmbed segment inputs. BeamSearch buffer expansion now uses dynamic shape storage (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31648\"\u003e#31648\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31701\"\u003e#31701\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32009\"\u003e#32009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32078\"\u003e#32078\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32144\"\u003e#32144\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eValidated \u003ccode\u003eTreeEnsemble\u003c/code\u003e node references and bounded subtree comparison, rejected non-finite CPU \u003ccode\u003eRoiAlign\u003c/code\u003e coordinates, and required \u003ccode\u003eImageScaler\u003c/code\u003e bias to match the channel count (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32031\"\u003e#32031\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32043\"\u003e#32043\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32011\"\u003e#32011\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32002\"\u003e#32002\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded an allowlist of safe LoRA adapter parameter data types, validated \u003ccode\u003eMatMulFpQ4\u003c/code\u003e shape inputs, and checked MLAS blockwise quantization/dequantization index ranges (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31682\"\u003e#31682\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32032\"\u003e#32032\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32007\"\u003e#32007\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eGPU Bounds and Resource Lifetimes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHardened CUDA indexing and buffer-size arithmetic in \u003ccode\u003eMatMulNBits\u003c/code\u003e, \u003ccode\u003eRemovePadding\u003c/code\u003e, \u003ccode\u003eRotaryEmbedding\u003c/code\u003e, \u003ccode\u003eSparseAttention\u003c/code\u003e, Whisper beam search, NMS, QDQ, and \u003ccode\u003eGatherElements\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31643\"\u003e#31643\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31994\"\u003e#31994\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31995\"\u003e#31995\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31996\"\u003e#31996\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31998\"\u003e#31998\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32014\"\u003e#32014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32029\"\u003e#32029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32030\"\u003e#32030\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed overflow in CUDA reduction scans and Softmax offset arithmetic, and handled zero-sized outputs in CUDA random-generator kernels (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32137\"\u003e#32137\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32330\"\u003e#32330\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31997\"\u003e#31997\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed CUDA MultiHeadAttention shared-cache scratch lifetimes and kept \u003ccode\u003eCudaAsyncBuffer\u003c/code\u003e staging storage alive across CUDA graph replay (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31968\"\u003e#31968\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32121\"\u003e#32121\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed WebGPU out-of-bounds subgroup-matrix loads for partial tiles, zero-initialized writable device-allocator buffers, and rejected foreign GPU handles in built-in data transfers (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32364\"\u003e#32364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32063\"\u003e#32063\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32317\"\u003e#32317\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependencies and Tooling\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgraded Protobuf to 33.6 and refreshed Python documentation dependencies, including an ONNX security-related update (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29906\"\u003e#29906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32190\"\u003e#32190\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32424\"\u003e#32424\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUpdated JavaScript dependencies including \u003ccode\u003ejs-yaml\u003c/code\u003e, \u003ccode\u003ejoi\u003c/code\u003e, \u003ccode\u003efast-uri\u003c/code\u003e, and the Next.js end-to-end fixture (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32397\"\u003e#32397\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32486\"\u003e#32486\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32488\"\u003e#32488\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32505\"\u003e#32505\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32508\"\u003e#32508\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePinned GitHub Actions to full-length commit SHAs and strengthened packaging infrastructure with authenticated package feeds and NPM network isolation (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32176\"\u003e#32176\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32005\"\u003e#32005\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32440\"\u003e#32440\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Features\u003c/h2\u003e\n\u003ch3\u003eCore APIs \u0026amp; Runtime\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Go bindings for the ONNX Runtime C API (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29615\"\u003e#29615\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eExtended memory importing with host-pointer support and added access to preallocated outputs through \u003ccode\u003eKernelContext::GetPreallocatedOutput\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29726\"\u003e#29726\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32089\"\u003e#32089\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded packed-attention workspace recipes and estimates, and made workspace input-shape handling aware of optional inputs (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32283\"\u003e#32283\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32321\"\u003e#32321\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32312\"\u003e#32312\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded DeepSeek Engram contrib operators, \u003ccode\u003eEngramGate\u003c/code\u003e and \u003ccode\u003eNGramHashMapping\u003c/code\u003e, and expanded kernel coverage for Qwen-3.5 operators (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32268\"\u003e#32268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32106\"\u003e#32106\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/f2c39fe2f838cf35ce7da92824f5a5e3ee6e88a7\"\u003e\u003ccode\u003ef2c39fe\u003c/code\u003e\u003c/a\u003e [CUDA] Add INT4 paged KV cache with per-channel scales (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32515\"\u003e#32515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/5894ba8a53526b3aeb702bd86e6b117c9df8fa4f\"\u003e\u003ccode\u003e5894ba8\u003c/code\u003e\u003c/a\u003e Add portable random-access file reads to Env (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32503\"\u003e#32503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/a2ee3eb43052de307003e6256fc9258ce19d9c34\"\u003e\u003ccode\u003ea2ee3eb\u003c/code\u003e\u003c/a\u003e Fix CUDA plugin device discovery on WSL (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32517\"\u003e#32517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/b652e595b04d202b7f71af1d9105a183fac2b100\"\u003e\u003ccode\u003eb652e59\u003c/code\u003e\u003c/a\u003e [WebGPU] Prepack Conv weights for the im2col-matmul path (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32420\"\u003e#32420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/0f0f29f5015f16926912ae47061e6a3eedcfbe04\"\u003e\u003ccode\u003e0f0f29f\u003c/code\u003e\u003c/a\u003e Get rid of spurious warning about not being able to find spectre mitigation (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/23dd6510fd395b4556f474c1c0079be2a8b7a8c8\"\u003e\u003ccode\u003e23dd651\u003c/code\u003e\u003c/a\u003e Register ONNX schemas only when static registration is disabled (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32353\"\u003e#32353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/33af5d32801b2e631ebece4f382f4ba775f17d8c\"\u003e\u003ccode\u003e33af5d3\u003c/code\u003e\u003c/a\u003e Release external data loaders after graph initialization (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32502\"\u003e#32502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/2e3c24d5963d62d0bd7c9d306433b19b7304d5d2\"\u003e\u003ccode\u003e2e3c24d\u003c/code\u003e\u003c/a\u003e Clarify external initializer and EP context path interaction (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32442\"\u003e#32442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/e76036b8e49515ee7dd2dd0ac39c9d8b7533d38a\"\u003e\u003ccode\u003ee76036b\u003c/code\u003e\u003c/a\u003e [CUDA] Pin FP8 GEMV residency for grids just past two blocks per SM (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32433\"\u003e#32433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/82583c5b6398a9c37815f91e9cd1d7c165a132a7\"\u003e\u003ccode\u003e82583c5\u003c/code\u003e\u003c/a\u003e Add session option for a BNHS GroupQueryAttention Value cache layout (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32139\"\u003e#32139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/onnxruntime/compare/v1.29.0...v1.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 3.3.1 to 3.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.14.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.14.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.13.0...v3.14.0\"\u003e3.14.0\u003c/a\u003e (2026-09-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e normalize errors raised while reading streams (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3827\"\u003e#3827\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d7c41efee1b0802b79f3f88a678ef2052b06e9ce\"\u003ed7c41ef\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebound vector store file polling (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3401\"\u003e#3401\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ae41bc46cdd53d17e948ac8a73e16bdbf34123a1\"\u003eae41bc4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexample:\u003c/strong\u003e refresh realtime push_to_talk_app session types (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2926\"\u003e#2926\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/0b7ad38292ef862f1dd07f71543b2f60eade8999\"\u003e0b7ad38\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efiles:\u003c/strong\u003e normalize PathLike upload tuples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3475\"\u003e#3475\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/90ac74ccfe7a966787d1f204755d4cd4cc4d406a\"\u003e90ac74c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einclude completion in content filter errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3094\"\u003e#3094\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e57a1b19fbcc32306a691e63334fd2dc4b1a804c\"\u003ee57a1b1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.13.0...v3.14.0\"\u003e3.14.0\u003c/a\u003e (2026-09-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e normalize errors raised while reading streams (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3827\"\u003e#3827\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d7c41efee1b0802b79f3f88a678ef2052b06e9ce\"\u003ed7c41ef\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebound vector store file polling (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3401\"\u003e#3401\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ae41bc46cdd53d17e948ac8a73e16bdbf34123a1\"\u003eae41bc4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexample:\u003c/strong\u003e refresh realtime push_to_talk_app session types (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2926\"\u003e#2926\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/0b7ad38292ef862f1dd07f71543b2f60eade8999\"\u003e0b7ad38\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efiles:\u003c/strong\u003e normalize PathLike upload tuples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3475\"\u003e#3475\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/90ac74ccfe7a966787d1f204755d4cd4cc4d406a\"\u003e90ac74c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einclude completion in content filter errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3094\"\u003e#3094\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e57a1b19fbcc32306a691e63334fd2dc4b1a804c\"\u003ee57a1b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elogging:\u003c/strong\u003e support standard OPENAI_LOG levels (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3734\"\u003e#3734\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/44000e0fc5e11692663045d6183568ff3ec32736\"\u003e44000e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enormalize API error codes to strings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3532\"\u003e#3532\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/233d9557be3e7ee186b5ac3f1ab634a257134ac1\"\u003e233d955\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3531\"\u003e#3531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/5bae14cb22724ef0a9db0d3a7fb7556d28b3fee3\"\u003e\u003ccode\u003e5bae14c\u003c/code\u003e\u003c/a\u003e release: 3.14.1 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3856\"\u003e#3856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003e\u003ccode\u003ef86c721\u003c/code\u003e\u003c/a\u003e fix(client): validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e\u003ccode\u003e6520df1\u003c/code\u003e\u003c/a\u003e fix(responses): skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b3c04f4e701e07726f320295a38928421946e530\"\u003e\u003ccode\u003eb3c04f4\u003c/code\u003e\u003c/a\u003e fix(azure): preserve deployment routing across copy/with_options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3593\"\u003e#3593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003e\u003ccode\u003eccc10f5\u003c/code\u003e\u003c/a\u003e fix: log only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e\u003ccode\u003e9640f29\u003c/code\u003e\u003c/a\u003e chore: remove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e\u003ccode\u003e8cb9ded\u003c/code\u003e\u003c/a\u003e docs: fix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003e\u003ccode\u003ea3d83b5\u003c/code\u003e\u003c/a\u003e docs: clarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e\u003ccode\u003e54f460e\u003c/code\u003e\u003c/a\u003e fix(examples): refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003e\u003ccode\u003ed241ed6\u003c/code\u003e\u003c/a\u003e fix(examples): split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v3.3.1...v3.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `piper-tts` from 1.4.2 to 1.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/OHF-voice/piper1-gpl/releases\"\u003epiper-tts's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Thai phonemizer using TLTK in the new \u003ccode\u003eth\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type thai\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;thai\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng's Thai voice is a placeholder: its \u003ccode\u003eth_dict\u003c/code\u003e holds no lexicon, so unspaced Thai is never segmented; the leading vowels เ แ โ ใ ไ are not reordered; and a tone mark deletes the syllable's vowel, collapsing ป่า/ป้า/ป๊า/ป๋า to the same phonemes\u003c/li\u003e\n\u003cli\u003eTLTK does dictionary-based word segmentation and emits a tone digit (1-5) per syllable, in the same style \u003ccode\u003ephonemize_chinese\u003c/code\u003e uses for Mandarin tones\u003c/li\u003e\n\u003cli\u003eThe whole inventory already has ids in the default IPA map, so Thai voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --th\u003c/code\u003e, and install the \u003ccode\u003eth\u003c/code\u003e extra in CI so the Thai tests run\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Japanese phonemizer using OpenJTalk (\u003ccode\u003epyopenjtalk-plus\u003c/code\u003e) in the new \u003ccode\u003eja\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type japanese\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;japanese\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng has no kanji coverage (it reads out Unicode character names) and no pitch accent\u003c/li\u003e\n\u003cli\u003eFull-context labels are parsed for pitch accent and mapped to IPA, so Japanese voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --ja\u003c/code\u003e, and install the \u003ccode\u003eja\u003c/code\u003e extra in CI so the Japanese tests run\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elibpiper\u003c/code\u003e: add \u003ccode\u003epiper_create_options\u003c/code\u003e and \u003ccode\u003epiper_create_with_options()\u003c/code\u003e, with \u003ccode\u003epiper_create()\u003c/code\u003e kept as a wrapper for ABI compatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRun the g2pW model through \u003ccode\u003epiper.g2pw_onnx\u003c/code\u003e instead of \u003ccode\u003eg2pw.api\u003c/code\u003e, dropping \u003ccode\u003etorch\u003c/code\u003e (~750 MB installed) and \u003ccode\u003erequests\u003c/code\u003e from the \u003ccode\u003ezh\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eg2pw.api\u003c/code\u003e imports torch only to build padded tensors and iterate batches; the model itself already ran under onnxruntime\u003c/li\u003e\n\u003cli\u003eAlso 1.5-2x faster, since it no longer forks DataLoader worker processes on every call\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eg2pW\u003c/code\u003e is still required, for its pinyin/bopomofo lookup tables\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hebrew phonemizer using Nakdimon\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003elibpiper\u003c/code\u003e C++ CLI executable ported from the legacy Piper repository, plus a C++ test suite\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elibpiper\u003c/code\u003e builds on Windows (MSVC, MSYS2-GCC) and Windows CI\u003c/li\u003e\n\u003cli\u003eBump embedded espeak-ng version\u003c/li\u003e\n\u003cli\u003eAdd default speaker id for multi-speaker voices\u003c/li\u003e\n\u003cli\u003eAdd vowel clustering support (\u003ccode\u003e--data.vowel_clusters\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd in-memory patching for alignments\u003c/li\u003e\n\u003cli\u003eTraining: add MRD (Multi-Resolution STFT) discriminator, loss/MOS tracking with UTMOS, silence-trim fixes, and dataloader performance improvements\u003c/li\u003e\n\u003cli\u003ePass custom phoneme id map when training\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/blob/main/CHANGELOG.md\"\u003epiper-tts's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Thai phonemizer using TLTK in the new \u003ccode\u003eth\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type thai\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;thai\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng's Thai voice is a placeholder: its \u003ccode\u003eth_dict\u003c/code\u003e holds no lexicon, so unspaced Thai is never segmented; the leading vowels เ แ โ ใ ไ are not reordered; and a tone mark deletes the syllable's vowel, collapsing ป่า/ป้า/ป๊า/ป๋า to the same phonemes\u003c/li\u003e\n\u003cli\u003eTLTK does dictionary-based word segmentation and emits a tone digit (1-5) per syllable, in the same style \u003ccode\u003ephonemize_chinese\u003c/code\u003e uses for Mandarin tones\u003c/li\u003e\n\u003cli\u003eThe whole inventory already has ids in the default IPA map, so Thai voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --th\u003c/code\u003e, and install the \u003ccode\u003eth\u003c/code\u003e extra in CI so the Thai tests run\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Japanese phonemizer using OpenJTalk (\u003ccode\u003epyopenjtalk-plus\u003c/code\u003e) in the new \u003ccode\u003eja\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type japanese\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;japanese\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng has no kanji coverage (it reads out Unicode character names) and no pitch accent\u003c/li\u003e\n\u003cli\u003eFull-context labels are parsed for pitch accent and mapped to IPA, so Japanese voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --ja\u003c/code\u003e, and install the \u003ccode\u003eja\u003c/code\u003e extra in CI so the Japanese tests run\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elibpiper\u003c/code\u003e: add \u003ccode\u003epiper_create_options\u003c/code\u003e and \u003ccode\u003epiper_create_with_options()\u003c/code\u003e, with \u003ccode\u003epiper_create()\u003c/code\u003e kept as a wrapper for ABI compatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRun the g2pW model through \u003ccode\u003epiper.g2pw_onnx\u003c/code\u003e instead of \u003ccode\u003eg2pw.api\u003c/code\u003e, dropping \u003ccode\u003etorch\u003c/code\u003e (~750 MB installed) and \u003ccode\u003erequests\u003c/code\u003e from the \u003ccode\u003ezh\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eg2pw.api\u003c/code\u003e imports torch only to build padded tensors and iterate batches; the model itself already ran under onnxruntime\u003c/li\u003e\n\u003cli\u003eAlso 1.5-2x faster, since it no longer forks DataLoader worker processes on every call\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eg2pW\u003c/code\u003e is still required, for its pinyin/bopomofo lookup tables\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hebrew phonemizer using Nakdimon\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003elibpiper\u003c/code\u003e C++ CLI executable ported from the legacy Piper repository, plus a C++ test suite\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elibpiper\u003c/code\u003e builds on Windows (MSVC, MSYS2-GCC) and Windows CI\u003c/li\u003e\n\u003cli\u003eBump embedded espeak-ng version\u003c/li\u003e\n\u003cli\u003eAdd default speaker id for multi-speaker voices\u003c/li\u003e\n\u003cli\u003eAdd vowel clustering support (\u003ccode\u003e--data.vowel_clusters\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd in-memory patching for alignments\u003c/li\u003e\n\u003cli\u003eTraining: add MRD (Multi-Resolution STFT) discriminator, loss/MOS tracking with UTMOS, silence-trim fixes, and dataloader performance improvements\u003c/li\u003e\n\u003cli\u003ePass custom phoneme id map when training\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/639388b6317fc4731e91d53da42aea68fd4166ff\"\u003e\u003ccode\u003e639388b\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/46d794711decab265e7f04c8a9a2f03f5d40b244\"\u003e\u003ccode\u003e46d7947\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/OHF-voice/piper1-gpl/issues/293\"\u003e#293\u003c/a\u003e from OHF-Voice/claude/thai-piper-training-feasibility...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/9336d103bd2aa8f94d21c8b14c3e0d7727da292c\"\u003e\u003ccode\u003e9336d10\u003c/code\u003e\u003c/a\u003e Fix Thai test collection aborting CI on a broken optional dependency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/fb14e09b49725af3cd806d2aba6c9f33501546ce\"\u003e\u003ccode\u003efb14e09\u003c/code\u003e\u003c/a\u003e Add Thai phonemizer (TLTK segmentation + G2P -\u0026gt; IPA + tone digits)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/850c45a3d70b5981de4d908ba98caf39796e7201\"\u003e\u003ccode\u003e850c45a\u003c/code\u003e\u003c/a\u003e fix: Phase 1 relaxed poly fallback for mobile (\u003ca href=\"https://redirect.github.com/OHF-voice/piper1-gpl/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/b2758261878e4d832acb208e33915df8954ae2d4\"\u003e\u003ccode\u003eb275826\u003c/code\u003e\u003c/a\u003e Add Chinese pinyin support – Phase 1 (monophonic dict fallback, honest scopin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/7b8e8f7197a480047677715f00d3d78903b55a2a\"\u003e\u003ccode\u003e7b8e8f7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/OHF-voice/piper1-gpl/issues/275\"\u003e#275\u003c/a\u003e from OHF-Voice/claude/version-1-7-0-release-2b37ec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/222159fb3a25672b1a1a6c8f4d5f9351ed68ad3d\"\u003e\u003ccode\u003e222159f\u003c/code\u003e\u003c/a\u003e Silence pylint redefined-outer-name in the phonemizer tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/af4ff76238e6aee94f95555fbff87c001ecf94bc\"\u003e\u003ccode\u003eaf4ff76\u003c/code\u003e\u003c/a\u003e Make the mypy exclude for vendored VITS code actually work\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/c0f3289b64e2eb704ac115af61cac90228e2f7d2\"\u003e\u003ccode\u003ec0f3289\u003c/code\u003e\u003c/a\u003e Release 1.7.0: add --ja setup flag and test Japanese in CI\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/OHF-voice/piper1-gpl/compare/v1.4.2...v1.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `playwright` from 1.55.0 to 1.63.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/playwright-python/releases\"\u003eplaywright's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.63.0\u003c/h2\u003e\n\u003ch2\u003e🪟 Locate across frames\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://playwright.dev/python/docs/api/class-page#page-frame-locator\"\u003epage.frame_locator()\u003c/a\u003e and \u003ca href=\"https://playwright.dev/python/docs/api/class-frame#frame-frame-locator\"\u003eframe.frame_locator()\u003c/a\u003e called without a selector search in any frame of the\nsubtree, so you no longer need to locate the iframe first:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e# Finds the button in any frame on the page.\r\npage.frame_locator().get_by_role(\u0026quot;button\u0026quot;).click()\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe rest of the locator resolves inside a single frame, just like a regular locator, and an error is thrown when it\nmatches elements in several frames.\u003c/p\u003e\n\u003ch2\u003e👁️ Visible-only locators\u003c/h2\u003e\n\u003cp\u003eNew \u003ca href=\"https://playwright.dev/python/docs/api/class-locator#locator-visible\"\u003elocator.visible\u003c/a\u003e returns a locator that matches only visible elements. It is the recommended\nreplacement for the \u003ccode\u003e:visible\u003c/code\u003e CSS pseudo-class:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003epage.locator(\u0026quot;button\u0026quot;).visible.click()\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003e🖼️ Aria and screen snapshots in traces\u003c/h2\u003e\n\u003cp\u003eNew \u003ca href=\"https://playwright.dev/python/docs/api/class-tracing#tracing-start-option-aria-snapshots\"\u003e\u003ccode\u003earia_snapshots\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://playwright.dev/python/docs/api/class-tracing#tracing-start-option-screen-snapshots\"\u003e\u003ccode\u003escreen_snapshots\u003c/code\u003e\u003c/a\u003e options of\n\u003ca href=\"https://playwright.dev/python/docs/api/class-tracing#tracing-start\"\u003etracing.start()\u003c/a\u003e capture an aria snapshot and a screenshot of the page on every action:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003econtext.tracing.start(snapshots=True, aria_snapshots=True, screen_snapshots=True)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eWith aria and screen snapshots recorded, the new \u003cstrong\u003eDisplay Aria\u003c/strong\u003e mode in the trace viewer shows the action screenshot\nside by side with the aria snapshot, and hovering an aria node highlights it on the screenshot.\u003c/p\u003e\n\u003ch2\u003eNew APIs\u003c/h2\u003e\n\u003ch3\u003eBrowser and Context\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://playwright.dev/python/docs/api/class-browser#browser-new-context-option-http-credentials\"\u003e\u003ccode\u003ehttp_credentials\u003c/code\u003e\u003c/a\u003e now also accepts an array of credentials. The first entry matching the request origin is used, and entries without an origin match any request.\u003c/li\u003e\n\u003cli\u003eNew option \u003ca href=\"https://playwright.dev/python/docs/api/class-browsercontext#browser-context-storage-state-option-opfs\"\u003e\u003ccode\u003eopfs\u003c/code\u003e\u003c/a\u003e includes the \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system\"\u003eorigin private file system\u003c/a\u003e in the storage state, so it can be persisted and restored into later contexts.\u003c/li\u003e\n\u003cli\u003eNew events \u003ca href=\"https://playwright.dev/python/docs/api/class-page#page-event-dialog-closed\"\u003epage.on('dialogclosed')\u003c/a\u003e and \u003ca href=\"https://playwright.dev/python/docs/api/class-browsercontext#browser-context-event-dialog-closed\"\u003ebrowserContext.on('dialogclosed')\u003c/a\u003e are emitted when a JavaScript dialog is accepted, dismissed or closed by the user.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCommand line\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eplaywright install --no-remove\u003c/code\u003e keeps the browsers of other Playwright installations instead of removing them.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eplaywright codegen --http-credentials\u003c/code\u003e records against pages behind HTTP authentication.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAnnouncements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e⚠️ Ubuntu 20.04 is not supported anymore.\u003c/li\u003e\n\u003cli\u003e🐧 On Linux arm64, Playwright now downloads the \u003ca href=\"https://developer.chrome.com/blog/chrome-for-testing\"\u003eChrome for Testing\u003c/a\u003e build of Chromium, the same build used on all other platforms.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/8cb967b3e4199bef5ce38e1cf34df1bf79cb8a8d\"\u003e\u003ccode\u003e8cb967b\u003c/code\u003e\u003c/a\u003e cherry-pick(\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3200\"\u003e#3200\u003c/a\u003e): devops(docker): move docker publishing to Azure Pipelines\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/ab18c77c56f64b47e871bf4d8b08fd0675559377\"\u003e\u003ccode\u003eab18c77\u003c/code\u003e\u003c/a\u003e chore: roll Playwright to 1.63.0 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3198\"\u003e#3198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/0e66a0927e5431b0f659ff41b6544de96b0486f5\"\u003e\u003ccode\u003e0e66a09\u003c/code\u003e\u003c/a\u003e devops(pipeline): resolve pip and npm packages from DevDiv_PublicPackages fee...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/010a9cc73f8a90bc2d7b9e34591c4e2c4a4ea566\"\u003e\u003ccode\u003e010a9cc\u003c/code\u003e\u003c/a\u003e Pin GitHub Actions to full-length commit SHAs (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3176\"\u003e#3176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/154f67ced51ada646b0fcf8574897d96c9712aa3\"\u003e\u003ccode\u003e154f67c\u003c/code\u003e\u003c/a\u003e fix(sync): wait for initialize before leaving \u003cstrong\u003eenter\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3168\"\u003e#3168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/4af2fc65fb05eb04904b69b6206e9d07ca2b4cbc\"\u003e\u003ccode\u003e4af2fc6\u003c/code\u003e\u003c/a\u003e chore: roll Playwright to 1.62.1 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3169\"\u003e#3169\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/4d2e058f43f05448ad29b19e82919be5b86e8349\"\u003e\u003ccode\u003e4d2e058\u003c/code\u003e\u003c/a\u003e fix(connection): register protocol callback only after successful send (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3167\"\u003e#3167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/eab2bca195df8709bd32fc11129c268cf8963cd2\"\u003e\u003ccode\u003eeab2bca\u003c/code\u003e\u003c/a\u003e chore(deps): remove unused development dependencies (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3164\"\u003e#3164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/3b7c24c3e67dc84f7b0eddd0c5fd2ca685705021\"\u003e\u003ccode\u003e3b7c24c\u003c/code\u003e\u003c/a\u003e chore: roll Playwright to 1.62.0 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/1db079f769ff42c60b7bde3498fb98f638131534\"\u003e\u003ccode\u003e1db079f\u003c/code\u003e\u003c/a\u003e build(deps): bump typing-extensions from 4.15.0 to 4.16.0 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3162\"\u003e#3162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/playwright-python/compare/v1.55.0...v1.63.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `scipy` from 1.18.0 to 1.18.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/scipy/scipy/releases\"\u003escipy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eSciPy 1.18.1 Release Notes\u003c/h1\u003e\n\u003cp\u003eSciPy \u003ccode\u003e1.18.1\u003c/code\u003e is a bug-fix release with no new features\ncompared to \u003ccode\u003e1.18.0\u003c/code\u003e. This release includes binaries on\nPyPI for Python \u003ccode\u003e3.15\u003c/code\u003e, and the minimum required version\nof the GCC toolchain has been increased to \u003ccode\u003e10.3...\n\n_Description has been truncated_","html_url":"https://github.com/debpalash/friday/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/debpalash%2Ffriday/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"},{"uuid":"5499672238","node_id":"PR_kwDOQgqbUs8AAAABEFKnmA","number":1014,"state":"open","title":"chore(deps): bump the python-minor-patch group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-18T12:41:02.000Z","updated_at":"2026-09-18T12:41:44.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":12,"packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"httpx2","old_version":"2.9.1","new_version":"2.13.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"msgpack","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"orjson","old_version":"3.11.9","new_version":"3.12.0","repository_url":"https://github.com/ijl/orjson"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.2","new_version":"2.15.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.69.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.51","new_version":"2.0.53","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.9.1` | `2.13.0` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.1` | `1.2.2` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.9` | `3.12.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.2` | `2.15.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.69.1` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.51` | `2.0.53` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.1` | `0.53.0` |\n\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx2` from 2.9.1 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpx2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🔐 Reliable TLS verification controls\u003c/h3\u003e\n\u003cp\u003eThe CLI \u003ccode\u003e--no-verify\u003c/code\u003e flag now disables TLS certificate verification as intended, and \u003ccode\u003e--verify\u003c/code\u003e provides an explicit counterpart (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003epydantic/httpx2#1140\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003epydantic/httpx2#1186\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🧹 Safer async stream cleanup\u003c/h3\u003e\n\u003cp\u003eStopping a streamed response early no longer risks a nested async generator finalization error (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003epydantic/httpx2#1179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake the \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag disable TLS certificate verification and add an explicit \u003ccode\u003e--verify\u003c/code\u003e counterpart in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003epydantic/httpx2#1140\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003epydantic/httpx2#1186\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Trio 0.34.0 or later for the \u003ccode\u003etrio\u003c/code\u003e extra in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003epydantic/httpx2#1179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.12.0...v2.13.0\"\u003ehttps://github.com/pydantic/httpx2/compare/v2.12.0...v2.13.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.12.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🛡️ Bounded response decompression\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ehttpx2\u003c/code\u003e now decodes \u003ccode\u003egzip\u003c/code\u003e, \u003ccode\u003edeflate\u003c/code\u003e, Brotli, and Zstandard responses incrementally. Each decode step emits at most 1 MiB, so streaming a highly compressed response no longer requires materializing an entire inflated network chunk in memory (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1126\"\u003epydantic/httpx2#1126\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e📦 Shared Zstandard API\u003c/h3\u003e\n\u003cp\u003ePython 3.13 and earlier now use \u003ccode\u003ebackports.zstd\u003c/code\u003e, which provides the same bounded incremental decompression API as \u003ccode\u003ecompression.zstd\u003c/code\u003e on Python 3.14 and later (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1146\"\u003epydantic/httpx2#1146\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebackports.zstd\u003c/code\u003e for Zstandard decoding on Python 3.13 and earlier by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1146\"\u003epydantic/httpx2#1146\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/blob/main/src/httpx2/CHANGELOG.md\"\u003ehttpx2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0 (September 14th, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake the \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag disable TLS certificate verification and add an explicit \u003ccode\u003e--verify\u003c/code\u003e counterpart.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003e#1140\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003e#1204\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.12.0 (August 18th, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebackports.zstd\u003c/code\u003e for Zstandard decoding on Python 3.13 and earlier.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBound peak memory while streaming compressed responses and close response streams when decoding fails.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.11.0 (August 18th, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the public \u003ccode\u003eOrigin\u003c/code\u003e value object and \u003ccode\u003eURL.origin\u003c/code\u003e property for normalized,\nhashable origin comparisons. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1134\"\u003e#1134\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Brotli 1.2.0 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1141\"\u003e#1141\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestore deprecated status code aliases. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1135\"\u003e#1135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExtract HTTP/2 release notes from changelog headings correctly. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1136\"\u003e#1136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect explicit \u003ccode\u003eTransfer-Encoding\u003c/code\u003e headers and expose buffered request body lengths to WSGI applications.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1137\"\u003e#1137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate multipart part header names and values before serialization.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1142\"\u003e#1142\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.10.0 (August 9th, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f2951854442e78cb8f6d2256b7c1d83bd2b77d0b\"\u003e\u003ccode\u003ef295185\u003c/code\u003e\u003c/a\u003e Prepare version 2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/8f215b5c9768ba8152c7aaf52fd85efb80ea992b\"\u003e\u003ccode\u003e8f215b5\u003c/code\u003e\u003c/a\u003e Use portable links in API docstrings (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1202\"\u003e#1202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/36d636a002a42f961d1da4233546fe2f2c83c9c1\"\u003e\u003ccode\u003e36d636a\u003c/code\u003e\u003c/a\u003e Group \u003ccode\u003ehttpx2.__all__\u003c/code\u003e exports by source module (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1188\"\u003e#1188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f1064aaf67dab1598bb817fa0bff871f5bb2d7fa\"\u003e\u003ccode\u003ef1064aa\u003c/code\u003e\u003c/a\u003e Bump the python-packages group across 1 directory with 11 updates (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/bc27137977442cbfecb357046fd90f38c7f13108\"\u003e\u003ccode\u003ebc27137\u003c/code\u003e\u003c/a\u003e Update uv-dynamic-versioning requirement from \u0026gt;=0.14.0 to \u0026gt;=0.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/62e08275346151351af60632a2258dea47218b6c\"\u003e\u003ccode\u003e62e0827\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/c9b1d33ae220d8a7c50a0e4996cde1013081b198\"\u003e\u003ccode\u003ec9b1d33\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003e--no-verify\u003c/code\u003e flag with \u003ccode\u003e--verify\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1140\"\u003e#1140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e3a87b1582c604b5aaf1d0f20b5def1ff9ece220\"\u003e\u003ccode\u003ee3a87b1\u003c/code\u003e\u003c/a\u003e Convert \u003ccode\u003eTimeout\u003c/code\u003e and \u003ccode\u003eLimits\u003c/code\u003e to dataclasses (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1167\"\u003e#1167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/4c02c4beda777933ab7eb36836a66ca11d73dc03\"\u003e\u003ccode\u003e4c02c4b\u003c/code\u003e\u003c/a\u003e Fixed a grammatical mistake. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1154\"\u003e#1154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/71ae23be5448f859c2b4e21d9972ddfa7b8d759d\"\u003e\u003ccode\u003e71ae23b\u003c/code\u003e\u003c/a\u003e Version 2.12.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.9.1...v2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix docstring for read_size by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/700\"\u003emsgpack/msgpack-python#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eunpacker: fix silent datetime truncation with datetime=3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/701\"\u003emsgpack/msgpack-python#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erun test with debug build by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/702\"\u003emsgpack/msgpack-python#702\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: add reentrant guard to Unpacker.feed() by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/704\"\u003emsgpack/msgpack-python#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 6.0.3 to 7.0.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/705\"\u003emsgpack/msgpack-python#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/707\"\u003emsgpack/msgpack-python#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_unpack.py: add tests for ExtraData by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/708\"\u003emsgpack/msgpack-python#708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/709\"\u003emsgpack/msgpack-python#709\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime() precision for far-future datetimes by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in test and docs by \u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/719\"\u003emsgpack/msgpack-python#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in unpackb() ExtraData path for non-contiguous input by \u003ca href=\"https://github.com/ThomasWaldmann\"\u003e\u003ccode\u003e@​ThomasWaldmann\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/722\"\u003emsgpack/msgpack-python#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/721\"\u003emsgpack/msgpack-python#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 4.1.1 to 4.2.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/724\"\u003emsgpack/msgpack-python#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert Packer's buf_size once by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: translate RecursionError to StackError in fallback Unpacker.skip() by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/727\"\u003emsgpack/msgpack-python#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate nanoseconds range when unpacking timestamps in the C extension by \u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid parallel execution of the recursion-limit nesting test on free-threaded builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/729\"\u003emsgpack/msgpack-python#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise OverflowError when use_single_float cannot represent a value by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.2 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/730\"\u003emsgpack/msgpack-python#730\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.2\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-08-27\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix the \u003ccode\u003eread_size\u003c/code\u003e documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silent truncation when unpacking an out-of-range timestamp with \u003ccode\u003etimestamp=3\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/701\"\u003e#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent reentrant calls to \u003ccode\u003eUnpacker.feed()\u003c/code\u003e while unpacking. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/704\"\u003e#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/707\"\u003e#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e precision for far-future datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/710\"\u003e#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in the documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/712\"\u003e#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate the nanoseconds range when unpacking timestamps in the C extension. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a use-after-free in the \u003ccode\u003eunpackb()\u003c/code\u003e \u003ccode\u003eExtraData\u003c/code\u003e path for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/722\"\u003e#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent a buffer overflow when converting \u003ccode\u003ePacker\u003c/code\u003e's \u003ccode\u003ebuf_size\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTranslate \u003ccode\u003eRecursionError\u003c/code\u003e to \u003ccode\u003eStackError\u003c/code\u003e in the fallback \u003ccode\u003eUnpacker.skip()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eOverflowError\u003c/code\u003e when \u003ccode\u003euse_single_float=True\u003c/code\u003e cannot represent a value. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/7381b318f51688f3f941df0b4c056d7a7a20c9d0\"\u003e\u003ccode\u003e7381b31\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ee1bd3c02d5494921653a0f7ffc264b8591de713\"\u003e\u003ccode\u003eee1bd3c\u003c/code\u003e\u003c/a\u003e release v1.2.2 (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/57d28a250c4904685f3a4f4135b301def517681e\"\u003e\u003ccode\u003e57d28a2\u003c/code\u003e\u003c/a\u003e Raise OverflowError when use_single_float cannot represent a value (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/d374a17e88f20c221760454e8829dc58ad5222a8\"\u003e\u003ccode\u003ed374a17\u003c/code\u003e\u003c/a\u003e Avoid parallel execution of the recursion-limit nesting test on free-threaded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/e94e1dc078547c58855c7cc60b6e54c44deb903d\"\u003e\u003ccode\u003ee94e1dc\u003c/code\u003e\u003c/a\u003e Validate nanoseconds range when unpacking timestamps in the C extension (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/2e4be090f6a42e1ad19526ca6f6ee67f3476389a\"\u003e\u003ccode\u003e2e4be09\u003c/code\u003e\u003c/a\u003e fix: translate RecursionError to StackError in fallback Unpacker.skip() (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/9f9bdae0773166e8ed50dfdd1ed13cc4296819ce\"\u003e\u003ccode\u003e9f9bdae\u003c/code\u003e\u003c/a\u003e Convert Packer's buf_size once (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/809bfcda6d7186fbb34f6ea1b984a61344ba55d2\"\u003e\u003ccode\u003e809bfcd\u003c/code\u003e\u003c/a\u003e remove unused variable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/186d4dbc126b659eff1509c850300e207d8aaad5\"\u003e\u003ccode\u003e186d4db\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 4.1.1 to 4.2.0(\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ea6b84f5ee6d97ae2089f1eb025034a6847d1ccb\"\u003e\u003ccode\u003eea6b84f\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencie...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.11.9 to 3.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/releases\"\u003eorjson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/blob/master/CHANGELOG.md\"\u003eorjson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0 - 2026-08-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6737895a1a4e3e26df0569a40147893a786f9a58\"\u003e\u003ccode\u003e6737895\u003c/code\u003e\u003c/a\u003e 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/c2a6e8ff7b898635fb68a85bd5a62df1edf61cfc\"\u003e\u003ccode\u003ec2a6e8f\u003c/code\u003e\u003c/a\u003e JsonWriter, iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6a2d7a7d66dc3c5698625a7b334c40db459e46ae\"\u003e\u003ccode\u003e6a2d7a7\u003c/code\u003e\u003c/a\u003e yyjson 1ea2fb0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/97bf170d9726e91c891f35eae4892801520b9dce\"\u003e\u003ccode\u003e97bf170\u003c/code\u003e\u003c/a\u003e build update\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/ijl/orjson/compare/3.11.9...3.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.12 to 2.9.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.13\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1848](https://github.com/psycopg/psycopg2/issues/1848)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed bytea input.\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed int64 input in arrays (:ticket:\u003ccode\u003e[#1847](https://github.com/psycopg/psycopg2/issues/1847)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003epyproject.toml\u003c/code\u003e file to declare a PEP 517 build backend\n(:ticket:\u003ccode\u003e[#1788](https://github.com/psycopg/psycopg2/issues/1788)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f650e7afed0c94f596594e8328a0c7fa65a9d0e5\"\u003e\u003ccode\u003ef650e7a\u003c/code\u003e\u003c/a\u003e chore: bump to release 2.9.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/368c8a1ca6d80088703a693ce64b68ad7d346698\"\u003e\u003ccode\u003e368c8a1\u003c/code\u003e\u003c/a\u003e chore!: drop support for Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/9b39e65ab232f0a267a278cdaef1bd9975d88c65\"\u003e\u003ccode\u003e9b39e65\u003c/code\u003e\u003c/a\u003e chore: drop scaleway build support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/2ca70416be6d4d3d8170ec439876c0b3569af718\"\u003e\u003ccode\u003e2ca7041\u003c/code\u003e\u003c/a\u003e fix: fix handling of PostgreSQL 18 exceptions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/5385c027ef62ce14e57a7379e0375868507d6746\"\u003e\u003ccode\u003e5385c02\u003c/code\u003e\u003c/a\u003e Build CPython 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/1d32e1f6678ffa8ab8897ca81826bf4dde6354cd\"\u003e\u003ccode\u003e1d32e1f\u003c/code\u003e\u003c/a\u003e ci: only attempt triggering documentation refresh when pushing on main repo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/433e7b77a7b700fbb1cdc6e9dca6b5948d07fc23\"\u003e\u003ccode\u003e433e7b7\u003c/code\u003e\u003c/a\u003e chore: add pyproject.toml file to declare a PEP 517 build backend\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/8fb80bc3b2c358f4e3c54e33a37326d3f8b3ff6a\"\u003e\u003ccode\u003e8fb80bc\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed int64 input in arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f98014a46a1e34f024ebd6134d1d87b77490c500\"\u003e\u003ccode\u003ef98014a\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed bytea input\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/822b79cfe12ca0a04482acd382cae669a16aa789\"\u003e\u003ccode\u003e822b79c\u003c/code\u003e\u003c/a\u003e chore: bump dependencies in binary package\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.12...2.9.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.14.2 to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.15.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBehavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ecase_sensitive\u003c/code\u003e now applies to init kwargs and config-file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/900\"\u003e#900\u003c/a\u003e). \u003ccode\u003eInitSettingsSource\u003c/code\u003e and the JSON/TOML/YAML config sources previously ignored \u003ccode\u003ecase_sensitive\u003c/code\u003e. Since it defaults to \u003ccode\u003eFalse\u003c/code\u003e, \u003cstrong\u003ecase-insensitive matching is now the default\u003c/strong\u003e for these sources — e.g. \u003ccode\u003eSettings(TeSt=...)\u003c/code\u003e now populates a \u003ccode\u003etest\u003c/code\u003e field where it previously did not. Nested keys are still matched case-sensitively.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFields with unresolved forward references now emit a warning\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/901\"\u003e#901\u003c/a\u003e). Settings sources can silently fail to resolve such fields; they now raise \u003ccode\u003eIncompleteFieldDefinitionWarning\u003c/code\u003e telling you to call \u003ccode\u003emodel_rebuild()\u003c/code\u003e. If you have \u003ccode\u003efilterwarnings = error\u003c/code\u003e configured, this may surface as a new failure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNon-JSON env values for strict fields now raise \u003ccode\u003eValidationError\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/926\"\u003e#926\u003c/a\u003e) instead of a less specific error.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eShow environment variable names in CLI help\u003c/strong\u003e via \u003ccode\u003ecli_show_env_vars=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/860\"\u003e#860\u003c/a\u003e), so generated \u003ccode\u003e--help\u003c/code\u003e output doubles as configuration documentation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePYDANTIC_SETTINGS_DEBUG\u003c/code\u003e for debugging settings resolution\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/913\"\u003e#913\u003c/a\u003e). Set it to a truthy value with \u003ccode\u003eDEBUG\u003c/code\u003e logging enabled to see each source's contribution in priority order, which source won for each value, and which \u003ccode\u003eenv_file\u003c/code\u003e/secret files were probed, loaded, or skipped — the long-standing \u0026quot;why isn't my \u003ccode\u003e.env\u003c/code\u003e being picked up?\u0026quot; question.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003etoml_table_header\u003c/code\u003e for regular TOML files\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/882\"\u003e#882\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/887\"\u003e#887\u003c/a\u003e), letting you root settings at a nested table in any TOML file, not just \u003ccode\u003epyproject.toml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eTraversable\u003c/code\u003e support for JSON/TOML/YAML file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/902\"\u003e#902\u003c/a\u003e), so you can load config packaged inside a distribution — including files inside a zip or wheel — via \u003ccode\u003eimportlib.resources.files(...)\u003c/code\u003e without casting to \u003ccode\u003ePath\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGCP: \u003ccode\u003eproject_id\u003c/code\u003e can come from an earlier settings source\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003e#878\u003c/a\u003e), rather than only from the constructor or \u003ccode\u003eGOOGLE_CLOUD_PROJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix env vars not loading on Windows with \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/894\"\u003e#894\u003c/a\u003e). Windows upper-cases \u003ccode\u003eos.environ\u003c/code\u003e keys, so fields raised \u003ccode\u003eField required\u003c/code\u003e instead of picking up their values.\u003c/li\u003e\n\u003cli\u003eRead secret files as UTF-8 instead of the platform locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/917\"\u003e#917\u003c/a\u003e). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAliasPath\u003c/code\u003e on nested model fields not JSON-decoding env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/898\"\u003e#898\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix case-insensitive matching for \u003cstrong\u003eoptional\u003c/strong\u003e nested models (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/905\"\u003e#905\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix dotenv extras being wrongly claimed by a complex field sharing a name prefix (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/912\"\u003e#912\u003c/a\u003e) — e.g. \u003ccode\u003edbx_token\u003c/code\u003e being swallowed by a \u003ccode\u003edb: dict\u003c/code\u003e field.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e corrupting discriminated unions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/876\"\u003e#876\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSecret\u003c/code\u003e subclasses crashing when loaded from the environment (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/920\"\u003e#920\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix enum names not parsing through nested annotations such as \u003ccode\u003eOptional[Annotated[MyEnum, ...]]\u003c/code\u003e with \u003ccode\u003eenv_parse_enums=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/910\"\u003e#910\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty \u003ccode\u003eyaml_config_section\u003c/code\u003e now falls back to defaults instead of raising \u003ccode\u003eAttributeError: 'NoneType' object has no attribute 'keys'\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/914\"\u003e#914\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e no longer follows symlinks pointing outside \u003ccode\u003esecrets_dir\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/889\"\u003e#889\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGCP: skip the \u003ccode\u003elist_secrets\u003c/code\u003e call when \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003e#862\u003c/a\u003e), lowering the required IAM permissions to just \u003ccode\u003eroles/secretmanager.secretAccessor\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAWS: \u003ccode\u003etypes-boto3[secretsmanager]\u003c/code\u003e is no longer required at runtime (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/880\"\u003e#880\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument JSON parsing of complex env values, plus a comma-separated-values recipe (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/919\"\u003e#919\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRecommend an async settings loading pattern (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/908\"\u003e#908\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify behavior when an unprefixed value is present in a dotenv file (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/895\"\u003e#895\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify environment variable helper descriptions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003e#867\u003c/a\u003e) and fix assorted typos (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/904\"\u003e#904\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate documentation link for Pydantic settings by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/863\"\u003epydantic/pydantic-settings#863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/865\"\u003epydantic/pydantic-settings#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify environment variable helper descriptions by \u003ca href=\"https://github.com/vip892766gma\"\u003e\u003ccode\u003e@​vip892766gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003epydantic/pydantic-settings#867\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/870\"\u003epydantic/pydantic-settings#870\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/875\"\u003epydantic/pydantic-settings#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip list_secrets call when case_sensitive=True by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003epydantic/pydantic-settings#862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGoogleSecretManagerSettingsSource: read project_id from previous sources by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003epydantic/pydantic-settings#878\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f725ca187bee4212e9ef799eefa3cb25be788462\"\u003e\u003ccode\u003ef725ca1\u003c/code\u003e\u003c/a\u003e Prepare release 2.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/28f35c25fac5d61210d532c31a300d49c0b684a4\"\u003e\u003ccode\u003e28f35c2\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9056db049560897229f2603493753bae27b6479f\"\u003e\u003ccode\u003e9056db0\u003c/code\u003e\u003c/a\u003e test: move function-local imports to the top of test modules (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f077e3ab3d9492838c7ef9275a88c95134688095\"\u003e\u003ccode\u003ef077e3a\u003c/code\u003e\u003c/a\u003e fix: raise ValidationError for non-JSON env values on strict fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ae25d703c458b57f5a9a425f6ec9a28ad868f980\"\u003e\u003ccode\u003eae25d70\u003c/code\u003e\u003c/a\u003e fix: treat Secret subclasses as non-complex fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/716\"\u003e#716\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/920\"\u003e#920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/798dcea2a23b08a3e9b37994014e036224f6dd18\"\u003e\u003ccode\u003e798dcea\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/a190041d353bda2d432ea1908de4c499ae89ee0a\"\u003e\u003ccode\u003ea190041\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/925\"\u003e#925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/5d9333282b5c85d65a457c45e4476369b9949726\"\u003e\u003ccode\u003e5d93332\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/921\"\u003e#921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/d2fdeda91157140d2ff0c05404f32a9b1218115a\"\u003e\u003ccode\u003ed2fdeda\u003c/code\u003e\u003c/a\u003e fix: read secret files as UTF-8 instead of the locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/917\"\u003e#917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2256a4e60f83f2da81e7654252562fc4841aa5d4\"\u003e\u003ccode\u003e2256a4e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/915\"\u003e#915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.13.0 to 2.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyJWT 2.14.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst\"\u003e2.14.0 changelog\u003c/a\u003e for the complete release details and related security advisories.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.14.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Harden HMAC key validation against public-key material supplied as JWK,\n  JWKS, array, encoded, BOM-prefixed, DER, or PEM input. See\n  `GHSA-r6x4-923q-g947 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-r6x4-923q-g947\u0026gt;`__,\n  `GHSA-ffc3-869f-jxw9 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9\u0026gt;`__,\n  `GHSA-p4g4-x82p-q773 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773\u0026gt;`__,\n  and `GHSA-w2cx-738m-mc7w \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w2cx-738m-mc7w\u0026gt;`__.\n- Reject automatic redirects when ``PyJWKClient`` fetches a JWKS, preventing\n  redirected destinations from being treated as trusted key sources. See\n  `GHSA-9v7f-9g4p-ffgj \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj\u0026gt;`__.\n- Limit repeated JWKS refreshes caused by unknown key IDs while preserving\n  normal key-rotation behavior. See\n  `GHSA-2gx3-rcp4-g85q \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q\u0026gt;`__.\n- Handle deeply nested and malformed JWS/JWK input without uncaught recursion\n  errors or whole-set parsing failures. See\n  `GHSA-8wjv-2p76-3863 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863\u0026gt;`__\n  and `GHSA-w6j9-cwv2-h6wq \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w6j9-cwv2-h6wq\u0026gt;`__.\n- Enforce compact JWS encoding rules during decoding. See\n  `GHSA-hxm8-2xgr-2p9m \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m\u0026gt;`__.\n- Reject detached-payload arguments for attached JWS inputs. Thanks to `@xclow3n\n  \u0026lt;https://github.com/xclow3n\u0026gt;`__ for reporting this behavior; fixed in commit\n  `37b54877 \u0026lt;https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Apply HMAC key validation consistently when keys are loaded through\n  ``PyJWK`` and ``PyJWKClient``. See\n  `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n- Reject empty HMAC keys when represented as JWKs.\n  See `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n\nFixed\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eRaise the documented \u003ccode\u003ePyJWTError\u003c/code\u003e subclass instead of leaking a\u003cbr /\u003e\n\u003ccode\u003eTypeError\u003c/code\u003e when the \u003ccode\u003eexp\u003c/code\u003e, \u003ccode\u003enbf\u003c/code\u003e, or \u003ccode\u003eiat\u003c/code\u003e claim decodes to a\u003cbr /\u003e\nnon-numeric, non-string value such as a list, dict, or \u003ccode\u003enull\u003c/code\u003e.\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/c6fe464b356ff4b1ebc9ba62172d331a40aa27df\"\u003e\u003ccode\u003ec6fe464\u003c/code\u003e\u003c/a\u003e release: prepare v2.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/f5413029ae7a2e31b1367b5303ea86a2f54ccf42\"\u003e\u003ccode\u003ef541302\u003c/code\u003e\u003c/a\u003e style: apply Ruff formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/801cd128528c62d9b23fcd161d1a2e1c17982f95\"\u003e\u003ccode\u003e801cd12\u003c/code\u003e\u003c/a\u003e fix: reject public JWK container HMAC keys\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/af8181ca0bec5e6b372fbba9afbe23702b787ceb\"\u003e\u003ccode\u003eaf8181c\u003c/code\u003e\u003c/a\u003e fix: reject empty HMAC keys from JWKs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/ba4853a75fb9676362da17f67d0f64bd18afd4e1\"\u003e\u003ccode\u003eba4853a\u003c/code\u003e\u003c/a\u003e Throttle repeated PyJWKClient refreshes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/2798504fa2663364573cf2d1043d8d7fef389499\"\u003e\u003ccode\u003e2798504\u003c/code\u003e\u003c/a\u003e fix: reject DER public keys as HMAC secrets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/8b4e233a22206b34ec1186e912e75c0b2396ac07\"\u003e\u003ccode\u003e8b4e233\u003c/code\u003e\u003c/a\u003e fix: reject loader-accepted PEM variants\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1f8180a211256dfe5cf32294b6753f554a5a4258\"\u003e\u003ccode\u003e1f8180a\u003c/code\u003e\u003c/a\u003e fix: format JWS tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/cff1ac55fe5f1096fd05295b269fce053ee290ab\"\u003e\u003ccode\u003ecff1ac5\u003c/code\u003e\u003c/a\u003e Fix redirect handler return annotation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56\"\u003e\u003ccode\u003e0a795b8\u003c/code\u003e\u003c/a\u003e Reject redirects in PyJWKClient fetches\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.2 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.2...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.69.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.69.1\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7428\"\u003e#7428\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Preserve SigV4-signed propagation headers by \u003ca href=\"https://github.com/Robinbinu\"\u003e\u003ccode\u003e@​Robinbinu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7427\"\u003e#7427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eMcp\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eParametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7424\"\u003e#7424\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove vacuous tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7420\"\u003e#7420\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(cohere) Parametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7419\"\u003e#7419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Parametrize tests on \u003ccode\u003estream_gen_ai_spans\u003c/code\u003e and the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7405\"\u003e#7405\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7341\"\u003e#7341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(bottle) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7343\"\u003e#7343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(clickhouse_driver) Set breadcrumbs in the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7325\"\u003e#7325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(docs) Add Plausible analytics to Sphinx docs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7319\"\u003e#7319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(falcon) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7340\"\u003e#7340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(fastapi) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7322\"\u003e#7322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(flask) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7344\"\u003e#7344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(pyramid) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7347\"\u003e#7347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(quart) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7348\"\u003e#7348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sqlalchemy) Add more db system names for span data by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7329\"\u003e#7329\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7338\"\u003e#7338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export SpanJSON type by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7331\"\u003e#7331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3.15 to test matrix by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7326\"\u003e#7326\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eMcp\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eNone\u003c/code\u003e arguments in tool and prompt handlers by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7387\"\u003e#7387\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't report stateless StreamableHTTP servers as stdio by \u003ca href=\"https://github.com/Snaylaker\"\u003e\u003ccode\u003e@​Snaylaker\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7224\"\u003e#7224\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOpenai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRead \u003ccode\u003einput_text\u003c/code\u003e parts for the Responses API by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7333\"\u003e#7333\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.69.1\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7428\"\u003e#7428\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Preserve SigV4-signed propagation headers by \u003ca href=\"https://github.com/Robinbinu\"\u003e\u003ccode\u003e@​Robinbinu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7427\"\u003e#7427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eMcp\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eParametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7424\"\u003e#7424\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove vacuous tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7420\"\u003e#7420\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(cohere) Parametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7419\"\u003e#7419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Parametrize tests on \u003ccode\u003estream_gen_ai_spans\u003c/code\u003e and the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7405\"\u003e#7405\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7341\"\u003e#7341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(bottle) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7343\"\u003e#7343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(clickhouse_driver) Set breadcrumbs in the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7325\"\u003e#7325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(docs) Add Plausible analytics to Sphinx docs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7319\"\u003e#7319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(falcon) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7340\"\u003e#7340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(fastapi) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7322\"\u003e#7322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(flask) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7344\"\u003e#7344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(pyramid) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7347\"\u003e#7347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(quart) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7348\"\u003e#7348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sqlalchemy) Add more db system names for span data by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7329\"\u003e#7329\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7338\"\u003e#7338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export SpanJSON type by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7331\"\u003e#7331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3....\n\n_Description has been truncated_\n\n\u003c!-- This is an auto-generated description by cubic. --\u003e\n---\n## Summary by cubic\nBumps 12 Python dependencies in the `python-minor-patch` group across `requirements.in` and `requirements.txt`, delivering security fixes and minor behavior changes in `pydantic-settings`, `httpx2`, and `psycopg2-binary`.\n\n**Dependencies**\n- `PyJWT` 2.14.0 hardens HMAC key validation and JWKS fetching against multiple advisories.\n- `pydantic-settings` 2.15.0 applies `case_sensitive` to init kwargs and config-file sources, making case-insensitive matching the default there.\n- `httpx2` 2.13.0 bounds decompression memory, fixes async stream cleanup, and restores real `--no-verify`/`--verify` CLI flags.\n- `psycopg2-binary` 2.9.13 drops Python 3.9 support.\n- `orjson` 3.12.0 stops publishing ppc64le and s390x wheels.\n- `python-dotenv` 1.2.3 strips UTF-8 BOMs when loading `.env` files and escapes backslashes in `set_key`.\n\n\u003csup\u003eWritten for commit 30003db9772cffd7a7e53c61e51da537adae5471. Summary will update on new commits.\u003c/sup\u003e\n\n\u003ca href=\"https://cubic.dev/pr/0xSoftBoi/suwappubot/pull/1014?utm_source=github\" target=\"_blank\" rel=\"noopener noreferrer\" data-no-image-dialog=\"true\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://www.cubic.dev/buttons/review-in-cubic-dark.svg\"\u003e\u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://www.cubic.dev/buttons/review-in-cubic-light.svg\"\u003e\u003cimg alt=\"Review in cubic\" src=\"https://www.cubic.dev/buttons/review-in-cubic-dark.svg\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n\u003c!-- End of auto-generated description by cubic. --\u003e\n\n","html_url":"https://github.com/0xSoftBoi/suwappubot/pull/1014","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSoftBoi%2Fsuwappubot/issues/1014","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1014/packages"},{"uuid":"5495166961","node_id":"PR_kwDOUffR5c8AAAABEBjm3g","number":6,"state":"open","title":"Update cryptography requirement from \u003c47,\u003e=42 to \u003e=50.0.1,\u003c51","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-18T03:05:59.000Z","updated_at":"2026-09-18T03:06:00.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"cryptography","old_version":"\u003c47,\u003e=42","new_version":"\u003e=50.0.1,\u003c51","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/42.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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\u003c/details\u003e","html_url":"https://github.com/blackmore-technology-group/ENTITY/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmore-technology-group%2FENTITY/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"5495089577","node_id":"PR_kwDORtTsIM8AAAABEBfu5g","number":2394,"state":"open","title":"chore(deps): bump the minor-and-patch group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-18T02:52:29.000Z","updated_at":"2026-09-18T02:55:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"minor-and-patch","update_count":20,"packages":[{"name":"alembic","old_version":"1.19.1","new_version":"1.20.0","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.14.2","new_version":"4.15.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.4.2","new_version":"8.5.0","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"filelock","old_version":"3.32.4","new_version":"3.32.6","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"greenlet","old_version":"3.5.5","new_version":"3.5.6","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"msgpack","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"pip-api","old_version":"0.0.34","new_version":"0.0.35","repository_url":"https://github.com/di/pip-api"},{"name":"platformdirs","old_version":"4.11.4","new_version":"4.11.8","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"sentry-sdk","old_version":"2.68.1","new_version":"2.69.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.52","new_version":"2.0.53","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"uvicorn","old_version":"0.52.4","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"websockets","old_version":"17.0.1","new_version":"17.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"wrapt","old_version":"2.3.0","new_version":"2.4.1","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"ruff","old_version":"0.16.4","new_version":"0.16.7","repository_url":"https://github.com/astral-sh/ruff"},{"name":"locust","old_version":"2.46.4","new_version":"2.46.5","repository_url":"https://github.com/locustio/locust"},{"name":"hypothesis","old_version":"6.165.10","new_version":"6.168.0","repository_url":"https://github.com/HypothesisWorks/hypothesis"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-and-patch group with 20 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.19.1` | `1.20.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.2` | `4.15.1` |\n| [click](https://github.com/pallets/click) | `8.4.2` | `8.5.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.32.4` | `3.32.6` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.5` | `3.5.6` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.1` | `1.2.2` |\n| [pip-api](https://github.com/di/pip-api) | `0.0.34` | `0.0.35` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.11.4` | `4.11.8` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.68.1` | `2.69.1` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.52` | `2.0.53` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.4` | `0.53.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `17.0.1` | `17.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.3.0` | `2.4.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.4` | `0.16.7` |\n| [locust](https://github.com/locustio/locust) | `2.46.4` | `2.46.5` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.165.10` | `6.168.0` |\n\n\nUpdates `alembic` from 1.19.1 to 1.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.20.0\u003c/h1\u003e\n\u003cp\u003eReleased: September 11, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [batch]\u003c/strong\u003e Added a warning for the case where an unnamed CHECK constraint on a\nreflected table is omitted from a batch \u0026quot;recreate\u0026quot; operation.  An unnamed\nCHECK constraint can't be reliably carried over in a batch recreate\nas it may refer to columns that are being dropped or changed.  This\nomission was previously a silent operation.   The presence of any\n\u003ccode\u003e~sqlalchemy.schema.CheckConstraint\u003c/code\u003e in\n\u003ccode\u003eOperations.batch_alter_table.table_args\u003c/code\u003e is taken to indicate\nthat the case has been accommodated, and no warning is emitted.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1846\"\u003e#1846\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [autogenerate]\u003c/strong\u003e Autogenerate now renders a warning comment above any rendered\n\u003ccode\u003eOperations.drop_constraint()\u003c/code\u003e directive for which the constraint name\nis \u003ccode\u003eNone\u003c/code\u003e, as is the case when a constraint that has no name in the model\nis dropped, most typically within the \u003ccode\u003edowngrade()\u003c/code\u003e function of a\nmigration that adds an unnamed constraint.  A warning is also emitted on\nthe console when the migration script is generated.   The directive\nrequires a non-None name in order to be able to emit a \u0026quot;DROP CONSTRAINT\u0026quot;\ncommand.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/916\"\u003e#916\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where adding a column with a type that generates\nits own CHECK constraint, such as \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or\n\u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e with\n\u003ccode\u003e~sqlalchemy.types.Boolean.create_constraint\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e,\nwould emit the constraint twice when the table was recreated, once under\nthe name generated by the naming convention in use and once under the\nname given to the type.  The constraint is now emitted once, using the\nsame name that would be used outside of batch mode.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1768\"\u003e#1768\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where a CHECK constraint generated by a type such\nas \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or \u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e\nwould lose the name established for it by the naming convention in use\nwhen the table was recreated, as the constraint was regenerated against\nthe temporary table used for the recreate operation.  The naming\nconvention is now resolved against the name of the table being replaced.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.2 to 4.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplemented a compatibility fix for supporting direct access of \u003ccode\u003eanyio.*\u003c/code\u003e submodules from the main package even when those submodules were not directly imported first (\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311\"\u003e#1311\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311%5C%3E\"\u003eagronholm/anyio#1311\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for the newer keyword-only arguments on \u003ccode\u003eanyio.Path\u003c/code\u003e methods to match the standard library \u003ccode\u003epathlib.Path\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eexists()\u003c/code\u003e (Python 3.12+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_dir()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_file()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eowner()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003egroup()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enewline\u003c/code\u003e on \u003ccode\u003eread_text()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1286\"\u003e#1286\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1293\"\u003e#1293\u003c/a\u003e; PR by \u003ca href=\"https://github.com/jaideeppyne\"\u003e\u003ccode\u003e@​jaideeppyne\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eamap\u003c/code\u003e, \u003ccode\u003egather\u003c/code\u003e, and \u003ccode\u003eas_completed\u003c/code\u003e utility functions to simplify common patterns (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1173\"\u003e#1173\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003e--anyio-mode\u003c/code\u003e command-line option as an alternative to the \u003ccode\u003eanyio_mode\u003c/code\u003e ini setting, and fix the pytest plugin's auto mode detection to recognize the mode when set via either mechanism(e.g: \u003ccode\u003epytest_asyncio\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1242\"\u003e#1242\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003eanyio.Future\u003c/code\u003e synchronization primitive which behaves similar to \u003ccode\u003easyncio.Future\u003c/code\u003e, allowing tasks to wait for a value (or exception) from another task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1146\"\u003e#1146\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded guidance for managing multiple memory object stream producers and consumers with cloned streams (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/330\"\u003e#330\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nightcityblade\"\u003e\u003ccode\u003e@​nightcityblade\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eStapledObjectStream.send_nowait()\u003c/code\u003e that delegates to the underlying \u003ccode\u003eObjectSendStream\u003c/code\u003e, if it implements it (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1241\"\u003e#1241\u003c/a\u003e; PR by \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003emove_on_at()\u003c/code\u003e and \u003ccode\u003efail_at()\u003c/code\u003e functions to complement \u003ccode\u003emove_on_after()\u003c/code\u003e and \u003ccode\u003efail_after()\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the default name for a task spawned with \u003ccode\u003eTaskGroup.create_task(func())\u003c/code\u003e to match the default task name for the analogous task spawned with \u003ccode\u003eTaskGroup.start_soon(func)\u003c/code\u003e or \u003ccode\u003eTaskGroup.start(func)\u003c/code\u003e in more situations. Previously, the default name of a \u003ccode\u003eTaskGroup.create_task\u003c/code\u003e task never included the module name. (The default name for a task spawned with \u003ccode\u003eTaskGroup.start_soon\u003c/code\u003e or \u003ccode\u003eTaskGroup.start\u003c/code\u003e typically includes the module name.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1234\"\u003e#1234\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the \u003ccode\u003eanyio\u003c/code\u003e and \u003ccode\u003eanyio.abc\u003c/code\u003e modules to lazily (much like \u003ccode\u003e810\u003c/code\u003e) import the necessary submodules. This is done by parsing the AST of the module and building a lookup table from the \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block. A fallback mode has been provided for installations where the source code is unavailable (e.g. PyInstaller). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1169\"\u003e#1169\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed free-threading compatibility issues arising from the fact that on Python 3.14 free-threading builds, newly created threads inherit the current context by default, causing AnyIO to behave erroneously in relation to \u003ccode\u003estart_blocking_portal()\u003c/code\u003e and \u003ccode\u003eanyio.to_thread.run_sync()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1224\"\u003e#1224\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eSpooledTemporaryFile.readinto()\u003c/code\u003e and \u003ccode\u003ereadinto1()\u003c/code\u003e reading twice before rollover, so the destination buffer was overwritten by the second read and the file position advanced twice, silently losing data (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1215\"\u003e#1215\u003c/a\u003e; PR by \u003ca href=\"https://github.com/c-tonneslan\"\u003e\u003ccode\u003e@​c-tonneslan\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003efail_after\u003c/code\u003e (and the new \u003ccode\u003efail_at\u003c/code\u003e) allowing for added exception context when raising \u003ccode\u003eTimeoutError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1227\"\u003e#1227\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the default \u003ccode\u003eTaskHandle.name\u003c/code\u003e missing part of the task name for tasks started with \u003ccode\u003eTaskGroup.start\u003c/code\u003e on Trio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1231\"\u003e#1231\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.run\u003c/code\u003e leaking, or at least, delaying collection of loop and root_task due to the root task being cached in a \u003ccode\u003eRunVar\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1203\"\u003e#1203\u003c/a\u003e; PR by \u003ca href=\"https://github.com/tapetersen\"\u003e\u003ccode\u003e@​tapetersen\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.Path.with_stem()\u003c/code\u003e silently producing a wrong path (e.g. \u003ccode\u003ePath(\u0026quot;.txt\u0026quot;)\u003c/code\u003e) instead of raising \u003ccode\u003eValueError\u003c/code\u003e when given an empty stem on a path with a non-empty suffix, unlike \u003ccode\u003epathlib.PurePath.with_stem\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1200\"\u003e#1200\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eUNIXSocketStream.aclose()\u003c/code\u003e raising \u003ccode\u003easyncio.InvalidStateError\u003c/code\u003e when a concurrent receive or send operation had just been cancelled on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1267\"\u003e#1267\u003c/a\u003e; PR by \u003ca href=\"https://github.com/alloutflo\"\u003e\u003ccode\u003e@​alloutflo\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the pytest plugin importing the deprecated \u003ccode\u003e_pytest.python.CallSpec2\u003c/code\u003e alias, which triggers \u003ccode\u003ePytestRemovedIn10Warning\u003c/code\u003e on \u003ccode\u003epytest\u0026gt;=9.2\u003c/code\u003e and crashes pytest at startup when \u003ccode\u003efilterwarnings = error\u003c/code\u003e is configured (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1271\"\u003e#1271\u003c/a\u003e; PR by \u003ca href=\"https://github.com/matthewfeickert\"\u003e\u003ccode\u003e@​matthewfeickert\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an asyncio worker thread race that could raise \u003ccode\u003eRuntimeError\u003c/code\u003e when the event loop closed between checking its state and scheduling the worker result (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1265\"\u003e#1265\u003c/a\u003e; PR by \u003ca href=\"https://github.com/hansu650\"\u003e\u003ccode\u003e@​hansu650\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens when \u003ccode\u003etotal_tokens\u003c/code\u003e was raised while the limiter was over-subscribed (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1223\"\u003e#1223\u003c/a\u003e; PR by \u003ca href=\"https://github.com/zelinewang\"\u003e\u003ccode\u003e@​zelinewang\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffcd1542cd6d127980205f90a0100078849dd703\"\u003e\u003ccode\u003effcd154\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/0ecf5ed98d294242509b043ebd1a0843e52d892f\"\u003e\u003ccode\u003e0ecf5ed\u003c/code\u003e\u003c/a\u003e Added a workaround for third party code accessing unimported submodules (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/928366259543412a2deb1e2ba09ea45ffa92ef4f\"\u003e\u003ccode\u003e9283662\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d137692a90f76e4f71605e32ea5ca94cab3a539d\"\u003e\u003ccode\u003ed137692\u003c/code\u003e\u003c/a\u003e Improved the instructions for AI agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/033fc52b8fa8e90c5d0ef24b10b3860e974a6265\"\u003e\u003ccode\u003e033fc52\u003c/code\u003e\u003c/a\u003e Shield TemporaryDirectory cleanup from cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1304\"\u003e#1304\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/942e9a6552cc10b5aaa779d84bfc8e2c3d5fcffc\"\u003e\u003ccode\u003e942e9a6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1305\"\u003e#1305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b825c3be7cb4ca1a8000b8065d4e147843deb704\"\u003e\u003ccode\u003eb825c3b\u003c/code\u003e\u003c/a\u003e Fixed pyproject.toml changes not triggering the test suite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9727dc504681e2986b5bc285de9571fb467539af\"\u003e\u003ccode\u003e9727dc5\u003c/code\u003e\u003c/a\u003e Fixed start inconsistencies between trio and asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b05fe6d160a640355c201363cab286a7d2581da8\"\u003e\u003ccode\u003eb05fe6d\u003c/code\u003e\u003c/a\u003e Fixed wrong type in move_on_after (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1297\"\u003e#1297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44d0c93cc20079acbf38ba4dbed5ab9df323f153\"\u003e\u003ccode\u003e44d0c93\u003c/code\u003e\u003c/a\u003e Fixed asyncio task group coroutine cleanup (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.2...4.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.2 to 8.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.5.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.5.0/\"\u003ehttps://pypi.org/project/click/8.5.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-5-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-5-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/33\"\u003ehttps://github.com/pallets/click/milestone/33\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2672\"\u003e#2672\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3637\"\u003e#3637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2986\"\u003e#2986\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3505\"\u003e#3505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2983\"\u003e#2983\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3473\"\u003e#3473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when \u003ca href=\"https://redirect.github.com/pallets/click/issues/2969\"\u003e#2969\u003c/a\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3572\"\u003e#3572\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3653\"\u003e#3653\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2877\"\u003e#2877\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3642\"\u003e#3642\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/3581\"\u003e#3581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3677\"\u003e#3677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2819\"\u003e#2819\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3678\"\u003e#3678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3681\"\u003e#3681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.5.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-08-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. {issue}\u003ccode\u003e2672\u003c/code\u003e {pr}\u003ccode\u003e3637\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. {issue}\u003ccode\u003e2986\u003c/code\u003e {pr}\u003ccode\u003e3505\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. {issue}\u003ccode\u003e2983\u003c/code\u003e {pr}\u003ccode\u003e3473\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when {pr}\u003ccode\u003e2969\u003c/code\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. {issue}\u003ccode\u003e3572\u003c/code\u003e {pr}\u003ccode\u003e3653\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix test failures when using pytest \u0026gt;= 9.1. {pr}\u003ccode\u003e3656\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. {issue}\u003ccode\u003e2877\u003c/code\u003e {pr}\u003ccode\u003e3642\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). {pr}\u003ccode\u003e3581\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. {pr}\u003ccode\u003e3677\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n{issue}\u003ccode\u003e2819\u003c/code\u003e {pr}\u003ccode\u003e3678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. {pr}\u003ccode\u003e3681\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\ntime. {pr}\u003ccode\u003e3641\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eget_binary_stream\u003c/code\u003e and {func}\u003ccode\u003eget_text_stream\u003c/code\u003e are deprecated and\nwill be removed in Click 9.0. {issue}\u003ccode\u003e3481\u003c/code\u003e {pr}\u003ccode\u003e3695\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe following \u003ccode\u003eclick.utils\u003c/code\u003e names were never intentionally public and are\nnow private (\u003ccode\u003e_\u003c/code\u003e-prefixed). The old names remain available with a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e until Click 9.0: \u003ccode\u003eLazyFile\u003c/code\u003e, \u003ccode\u003eKeepOpenFile\u003c/code\u003e,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8b19813f2bfca99f1018a587a8cf54fc959f2e5d\"\u003e\u003ccode\u003e8b19813\u003c/code\u003e\u003c/a\u003e Release version 8.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2c8cd3ac958a7eb316d67f2d316c27086c4c0369\"\u003e\u003ccode\u003e2c8cd3a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3778\"\u003e#3778\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/131c86aadddfa5cb6dca8339c9d6294c4eacb8ac\"\u003e\u003ccode\u003e131c86a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e1fd5946ab26aaf372009eaff1acf947140b40fb\"\u003e\u003ccode\u003ee1fd594\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a1d87858abd77fa8e3ffc204670ccd75b96c4781\"\u003e\u003ccode\u003ea1d8785\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2103e157683c5e4cadc8ee1838df526a54bde9a4\"\u003e\u003ccode\u003e2103e15\u003c/code\u003e\u003c/a\u003e Forward all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e and improve flag detection (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3777\"\u003e#3777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a6256bfb5971d5e58585fe7b6c656134e1ade5a4\"\u003e\u003ccode\u003ea6256bf\u003c/code\u003e\u003c/a\u003e Forwards all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/61b69e967e525bd502f5bf42def4d551e761fe0e\"\u003e\u003ccode\u003e61b69e9\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3776\"\u003e#3776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/9835b0f7612d1b1ea180a975fd6d24cf16791ba8\"\u003e\u003ccode\u003e9835b0f\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f36d58bbd7f188178de2d4fe1d0292c510375ca7\"\u003e\u003ccode\u003ef36d58b\u003c/code\u003e\u003c/a\u003e Refactor pager stream handling (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3767\"\u003e#3767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.2...8.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.32.4 to 3.32.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.32.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(lease): reject a duration no marker can carry by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/723\"\u003etox-dev/filelock#723\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft-rw): reject non-finite timing options by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/724\"\u003etox-dev/filelock#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve exception notes when copying and pickling by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(soft-rw): reuse existing test module by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/730\"\u003etox-dev/filelock#730\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: respect ACL write access when the owner write bit is absent by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/728\"\u003etox-dev/filelock#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix SoftReadWriteLock state lock timeout by \u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(fork): report where a stalled fork stops by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/715\"\u003etox-dev/filelock#715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs: say that mode is read-only in the thread-local section by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/716\"\u003etox-dev/filelock#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(lease): clear token after failed acquire by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.0.0 (2026-09-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eThe :class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e on-disk protocol is a generation log under \u003ccode\u003e\u0026lt;path\u0026gt;.rw\u003c/code\u003e, and a process\nrunning an earlier release does not see it: an old and a new participant on one lock path do not exclude each\nother. Stop every participant, upgrade them all, then restart them; the new code ignores leftover \u003ccode\u003e.state\u003c/code\u003e,\n\u003ccode\u003e.write\u003c/code\u003e and \u003ccode\u003e.readers/\u003c/code\u003e files, and you can delete them. The filesystem must provide no-replace hard links, as\nit must for :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e, so a runtime without \u003ccode\u003eos.link\u003c/code\u003e raises\n:class:\u003ccode\u003e~filelock.SoftFileLockProtocolError\u003c/code\u003e on acquire. Constructing a singleton again with a different\n\u003ccode\u003eon_compromise\u003c/code\u003e, or with \u003ccode\u003epoll_interval\u003c/code\u003e at or above \u003ccode\u003estale_threshold\u003c/code\u003e, now raises :class:\u003ccode\u003eValueError\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e exposes :attr:\u003ccode\u003e~filelock.SoftReadWriteLock.generation\u003c/code\u003e as a fencing token for\nthe protected resource and reports a lost hold through \u003ccode\u003eon_compromise\u003c/code\u003e and\n:attr:\u003ccode\u003e~filelock.SoftReadWriteLock.compromise\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e no longer deadlocks when a holder dies on another host mid-transition, and\n\u003ccode\u003erelease()\u003c/code\u003e no longer waits on a mutex a dead host left behind (:pr:\u003ccode\u003e725\u003c/code\u003e, :pr:\u003ccode\u003e735\u003c/code\u003e). The state mutex is gone.\nEach transition is one atomic snapshot commit, and liveness is a heartbeat nonce read on the observer's own clock\nrather than an \u003ccode\u003emtime\u003c/code\u003e read against another host's. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.7 (2026-09-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eValidate final-symlink refusal by error number so the test works across libc implementations. :pr:\u003ccode\u003e737\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocument that :meth:\u003ccode\u003e~filelock.BaseFileLock.acquire\u003c/code\u003e reads \u003ccode\u003eblocking=None\u003c/code\u003e as the lock's \u003ccode\u003eblocking\u003c/code\u003e attribute and\nraises :class:\u003ccode\u003e~filelock.Timeout\u003c/code\u003e after one attempt when \u003ccode\u003eblocking=False\u003c/code\u003e. :pr:\u003ccode\u003e733\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.6 (2026-09-08)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLease\u003c/code\u003e now reject a boolean or non-finite \u003ccode\u003elease_duration\u003c/code\u003e, which used to\npublish an owner record their own \u003ccode\u003eowner\u003c/code\u003e property reads back as malformed. :pr:\u003ccode\u003e723\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject non-finite heartbeat, stale, and polling intervals in \u003ccode\u003eSoftReadWriteLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftReadWriteLock\u003c/code\u003e,\nincluding cached singleton construction and overflow in the default stale threshold. :pr:\u003ccode\u003e724\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHonor acquisition timeouts and \u003ccode\u003eblocking=False\u003c/code\u003e during \u003ccode\u003eSoftReadWriteLock\u003c/code\u003e state-mutex contention, including\nfailed writer cleanup. Cross-host recovery of an abandoned \u003ccode\u003e.state\u003c/code\u003e marker remains unsupported. :pr:\u003ccode\u003e726\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow acquiring existing lock files that grant write access through group permissions or an ACL even when their\nowner-write mode bit is unset. :pr:\u003ccode\u003e728\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePreserve exception notes and custom attributes when copying or pickling \u003ccode\u003eTimeout\u003c/code\u003e and \u003ccode\u003eSoftFileLockProtocolError\u003c/code\u003e. :pr:\u003ccode\u003e729\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4efd93e0482e8095a0b6949fb337206e7f67495d\"\u003e\u003ccode\u003e4efd93e\u003c/code\u003e\u003c/a\u003e Release 3.32.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7b7b7a8b9b10acf826cca246441297468039b0c1\"\u003e\u003ccode\u003e7b7b7a8\u003c/code\u003e\u003c/a\u003e Fix SoftReadWriteLock state lock timeout (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2f7b8696426c518b6828ea10e755c0ba2a4ffe2\"\u003e\u003ccode\u003ef2f7b86\u003c/code\u003e\u003c/a\u003e fix: respect ACL write access when the owner write bit is absent (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/e947a694fb0da6676c4861c8bfef3650e5656153\"\u003e\u003ccode\u003ee947a69\u003c/code\u003e\u003c/a\u003e test(soft-rw): reuse existing test module (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da3ae2bca0035fb9e5269257e6f393360866cf88\"\u003e\u003ccode\u003eda3ae2b\u003c/code\u003e\u003c/a\u003e fix: preserve exception notes when copying and pickling (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ae9cb5b2d66d6a79edd76b292fa7320c11468812\"\u003e\u003ccode\u003eae9cb5b\u003c/code\u003e\u003c/a\u003e 🐛 fix(soft-rw): reject non-finite timing options (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d00f9bbd709fbe92a99a38cb1e32b6690813e5a8\"\u003e\u003ccode\u003ed00f9bb\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/82f66d7b0aaa83755f8d71d0b0da88408b58ec4a\"\u003e\u003ccode\u003e82f66d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(lease): reject a duration no marker can carry (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1d9e9e7e43a1089c57d7c6f20d6a2268235a4745\"\u003e\u003ccode\u003e1d9e9e7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1585dfef9355a5c77d4a9498cc34d3a98056fdb9\"\u003e\u003ccode\u003e1585dfe\u003c/code\u003e\u003c/a\u003e Release 3.32.5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.32.4...3.32.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.5.5 to 3.5.6\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.5.6 (2026-09-14)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect a race condition that could lead to garbage collection\nunintentionally being disabled. See \u003ccode\u003ePR 529 \u0026lt;https://github.com/python-greenlet/greenlet/pull/529\u0026gt;\u003c/code\u003e_ by Yurii.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/abfe740315a9926ff180c622cf02f122c07f9126\"\u003e\u003ccode\u003eabfe740\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e23e3e47df21bbc7a83219621ce4966d349f7d2b\"\u003e\u003ccode\u003ee23e3e4\u003c/code\u003e\u003c/a\u003e Change note for \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8de830f6df6fefd533fedbe4bb0a2028bcf77372\"\u003e\u003ccode\u003e8de830f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e from Georggi/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/72d7cacf4cf667f92786db306be095b6041bca5a\"\u003e\u003ccode\u003e72d7cac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/530\"\u003e#530\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ac01b7d1a6b3a4d2477c17a1047af6d0056d69a7\"\u003e\u003ccode\u003eac01b7d\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e18f5a6d2696c031d34cf4933dcdd6a8e37f6f85\"\u003e\u003ccode\u003ee18f5a6\u003c/code\u003e\u003c/a\u003e Simplify GCDisabledGuard constructor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6aaf3af698aa7789075a904e5bbb70e24df06553\"\u003e\u003ccode\u003e6aaf3af\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.6\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.5...3.5.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix docstring for read_size by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/700\"\u003emsgpack/msgpack-python#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eunpacker: fix silent datetime truncation with datetime=3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/701\"\u003emsgpack/msgpack-python#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erun test with debug build by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/702\"\u003emsgpack/msgpack-python#702\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: add reentrant guard to Unpacker.feed() by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/704\"\u003emsgpack/msgpack-python#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 6.0.3 to 7.0.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/705\"\u003emsgpack/msgpack-python#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/707\"\u003emsgpack/msgpack-python#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_unpack.py: add tests for ExtraData by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/708\"\u003emsgpack/msgpack-python#708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/709\"\u003emsgpack/msgpack-python#709\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime() precision for far-future datetimes by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in test and docs by \u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/719\"\u003emsgpack/msgpack-python#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in unpackb() ExtraData path for non-contiguous input by \u003ca href=\"https://github.com/ThomasWaldmann\"\u003e\u003ccode\u003e@​ThomasWaldmann\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/722\"\u003emsgpack/msgpack-python#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/721\"\u003emsgpack/msgpack-python#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 4.1.1 to 4.2.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/724\"\u003emsgpack/msgpack-python#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert Packer's buf_size once by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: translate RecursionError to StackError in fallback Unpacker.skip() by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/727\"\u003emsgpack/msgpack-python#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate nanoseconds range when unpacking timestamps in the C extension by \u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid parallel execution of the recursion-limit nesting test on free-threaded builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/729\"\u003emsgpack/msgpack-python#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise OverflowError when use_single_float cannot represent a value by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.2 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/730\"\u003emsgpack/msgpack-python#730\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.2\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-08-27\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix the \u003ccode\u003eread_size\u003c/code\u003e documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silent truncation when unpacking an out-of-range timestamp with \u003ccode\u003etimestamp=3\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/701\"\u003e#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent reentrant calls to \u003ccode\u003eUnpacker.feed()\u003c/code\u003e while unpacking. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/704\"\u003e#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/707\"\u003e#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e precision for far-future datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/710\"\u003e#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in the documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/712\"\u003e#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate the nanoseconds range when unpacking timestamps in the C extension. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a use-after-free in the \u003ccode\u003eunpackb()\u003c/code\u003e \u003ccode\u003eExtraData\u003c/code\u003e path for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/722\"\u003e#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent a buffer overflow when converting \u003ccode\u003ePacker\u003c/code\u003e's \u003ccode\u003ebuf_size\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTranslate \u003ccode\u003eRecursionError\u003c/code\u003e to \u003ccode\u003eStackError\u003c/code\u003e in the fallback \u003ccode\u003eUnpacker.skip()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eOverflowError\u003c/code\u003e when \u003ccode\u003euse_single_float=True\u003c/code\u003e cannot represent a value. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/7381b318f51688f3f941df0b4c056d7a7a20c9d0\"\u003e\u003ccode\u003e7381b31\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ee1bd3c02d5494921653a0f7ffc264b8591de713\"\u003e\u003ccode\u003eee1bd3c\u003c/code\u003e\u003c/a\u003e release v1.2.2 (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/57d28a250c4904685f3a4f4135b301def517681e\"\u003e\u003ccode\u003e57d28a2\u003c/code\u003e\u003c/a\u003e Raise OverflowError when use_single_float cannot represent a value (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/d374a17e88f20c221760454e8829dc58ad5222a8\"\u003e\u003ccode\u003ed374a17\u003c/code\u003e\u003c/a\u003e Avoid parallel execution of the recursion-limit nesting test on free-threaded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/e94e1dc078547c58855c7cc60b6e54c44deb903d\"\u003e\u003ccode\u003ee94e1dc\u003c/code\u003e\u003c/a\u003e Validate nanoseconds range when unpacking timestamps in the C extension (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/2e4be090f6a42e1ad19526ca6f6ee67f3476389a\"\u003e\u003ccode\u003e2e4be09\u003c/code\u003e\u003c/a\u003e fix: translate RecursionError to StackError in fallback Unpacker.skip() (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/9f9bdae0773166e8ed50dfdd1ed13cc4296819ce\"\u003e\u003ccode\u003e9f9bdae\u003c/code\u003e\u003c/a\u003e Convert Packer's buf_size once (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/809bfcda6d7186fbb34f6ea1b984a61344ba55d2\"\u003e\u003ccode\u003e809bfcd\u003c/code\u003e\u003c/a\u003e remove unused variable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/186d4dbc126b659eff1509c850300e207d8aaad5\"\u003e\u003ccode\u003e186d4db\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 4.1.1 to 4.2.0(\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ea6b84f5ee6d97ae2089f1eb025034a6847d1ccb\"\u003e\u003ccode\u003eea6b84f\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencie...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-api` from 0.0.34 to 0.0.35\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/di/pip-api/releases\"\u003epip-api's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.35\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTest against pip 24.2, 24.3, 24.3.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 25.0, 25.0.1, 25.1, 25.2, 25.3 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/237\"\u003e#237\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/242\"\u003e#242\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/244\"\u003e#244\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/250\"\u003e#250\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 26.0, 26.0.1, 26.1, 26.1.1, 26.1.2, 26.2, 26.2.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/261\"\u003e#261\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/265\"\u003e#265\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/282\"\u003e#282\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/284\"\u003e#284\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/289\"\u003e#289\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.14 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.15 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/di/pip-api/compare/0.0.34...0.0.35\"\u003ehttps://github.com/di/pip-api/compare/0.0.34...0.0.35\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/di/pip-api/blob/master/CHANGELOG\"\u003epip-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.35\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTest against pip 24.2, 24.3, 24.3.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 25.0, 25.0.1, 25.1, 25.2, 25.3 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/237\"\u003e#237\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/242\"\u003e#242\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/244\"\u003e#244\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/250\"\u003e#250\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 26.0, 26.0.1, 26.1, 26.1.1, 26.1.2, 26.2, 26.2.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/261\"\u003e#261\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/265\"\u003e#265\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/282\"\u003e#282\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/284\"\u003e#284\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/289\"\u003e#289\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.14 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.15 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/539f428087b9c43480c2ace803e0dd9467174928\"\u003e\u003ccode\u003e539f428\u003c/code\u003e\u003c/a\u003e Update CHANGELOG (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/8582df714ccb6182b1c79698bbace03971b22aee\"\u003e\u003ccode\u003e8582df7\u003c/code\u003e\u003c/a\u003e Prepare 0.0.35 release metadata (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/51d317bd761e687b17c6077f0d7f03db6387889d\"\u003e\u003ccode\u003e51d317b\u003c/code\u003e\u003c/a\u003e Add Python 3.15 prerelease support (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/1361fa5545660ecfd72d77471aacdeffa2c8a0eb\"\u003e\u003ccode\u003e1361fa5\u003c/code\u003e\u003c/a\u003e Add tox factor support for pip 26.2.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/dce99b7d2ba199d75149a02fdd83c337f87d8e27\"\u003e\u003ccode\u003edce99b7\u003c/code\u003e\u003c/a\u003e Bump sigstore/gh-action-sigstore-python from 3.4.0 to 3.5.0 in the actions gr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/ba40af7696f69ddc378bdfe1ef2a4e9573bf99a5\"\u003e\u003ccode\u003eba40af7\u003c/code\u003e\u003c/a\u003e Add pip 26.2 to tox env matrix and move \u003ccode\u003elatest\u003c/code\u003e label (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/209ad72def160c3ce0ea70e4f1ffef89f155d6e9\"\u003e\u003ccode\u003e209ad72\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6 to 7 in the actions group (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/4684261ea5aeb4eb9553ac105db5b04e3fca6d8c\"\u003e\u003ccode\u003e4684261\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the actions group (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/286\"\u003e#286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/adcdf82fd1aa1456d35863ba890eae0e260ed6a0\"\u003e\u003ccode\u003eadcdf82\u003c/code\u003e\u003c/a\u003e Bump sigstore/gh-action-sigstore-python from 3.3.0 to 3.4.0 in the actions gr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/d2439839465f15cc61889b66e2505fdbe7ff559f\"\u003e\u003ccode\u003ed243983\u003c/code\u003e\u003c/a\u003e Add pip 26.1.2 to the tox/CI compatibility matrix (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/di/pip-api/compare/0.0.34...0.0.35\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `platformdirs` from 4.11.4 to 4.11.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/releases\"\u003eplatformdirs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.11.8\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: ignore relative XDG base directory paths by \u003ca href=\"https://github.com/lakshayxi\"\u003e\u003ccode\u003e@​lakshayxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/540\"\u003etox-dev/platformdirs#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: return one user path for root under multipath by \u003ca href=\"https://github.com/darrenhuai\"\u003e\u003ccode\u003e@​darrenhuai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/538\"\u003etox-dev/platformdirs#538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve literal percent signs in user-dirs paths by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/542\"\u003etox-dev/platformdirs#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: retain Homebrew site directories inside virtual environments by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/543\"\u003etox-dev/platformdirs#543\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lakshayxi\"\u003e\u003ccode\u003e@​lakshayxi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/540\"\u003etox-dev/platformdirs#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/542\"\u003etox-dev/platformdirs#542\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.7...4.11.8\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.7...4.11.8\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e4.11.7\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.6...4.11.7\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.6...4.11.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e4.11.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: accept use_site_for_root in the bin functions by \u003ca href=\"https://github.com/darrenhuai\"\u003e\u003ccode\u003e@​darrenhuai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/537\"\u003etox-dev/platformdirs#537\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.5...4.11.6\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.5...4.11.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e4.11.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: fix the iterator order claim in api.rst by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/533\"\u003etox-dev/platformdirs#533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: return one site applications path for multipath by \u003ca href=\"https://github.com/tunglambk\"\u003e\u003ccode\u003e@​tunglambk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/532\"\u003etox-dev/platformdirs#532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: accept app arguments in the applications functions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/534\"\u003etox-dev/platformdirs#534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: keyword-only booleans on the applications functions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/535\"\u003etox-dev/platformdirs#535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: accept app arguments in user_preference_dir by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/531\"\u003etox-dev/platformdirs#531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tunglambk\"\u003e\u003ccode\u003e@​tunglambk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/532\"\u003etox-dev/platformdirs#532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/531\"\u003etox-dev/platformdirs#531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.4...4.11.5\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.4...4.11.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst\"\u003eplatformdirs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.11.10 (2026-09-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eWith \u003ccode\u003eensure_exists\u003c/code\u003e, the \u003ccode\u003esite_*_dir\u003c/code\u003e and \u003ccode\u003esite_*_path\u003c/code\u003e properties and the \u003ccode\u003eiter_*_dirs\u003c/code\u003e iterators only\ncreate the site directories they return or yield, instead of every entry in the site list - by :user:\u003ccode\u003edarrenhuai\u003c/code\u003e.\n:pr:\u003ccode\u003e550\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.11.9 (2026-09-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAccept \u003ccode\u003emultipath\u003c/code\u003e in :func:\u003ccode\u003e~platformdirs.site_cache_dir\u003c/code\u003e and :func:\u003ccode\u003e~platformdirs.site_cache_path\u003c/code\u003e. Without it,\nthe function API could not return the Homebrew cache prefix that :attr:\u003ccode\u003e~platformdirs.macos.MacOS.site_cache_dir\u003c/code\u003e adds\nunder \u003ccode\u003emultipath\u003c/code\u003e - by :user:\u003ccode\u003edarrenhuai\u003c/code\u003e. :pr:\u003ccode\u003e544\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eParse Unix \u003ccode\u003euser-dirs.dirs\u003c/code\u003e line by line like \u003ccode\u003exdg-user-dir\u003c/code\u003e. The INI parser raised on a repeated key or a line\nwithout \u003ccode\u003e=\u003c/code\u003e, and returned trailing comments and backslash escapes inside :func:\u003ccode\u003e~platformdirs.user_documents_dir\u003c/code\u003e\nand the other media directories. The last valid assignment now wins, and platformdirs unescapes the quoted value and\nignores text after the closing quote - by :user:\u003ccode\u003edarrenhuai\u003c/code\u003e. :pr:\u003ccode\u003e545\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRead \u003ccode\u003ePUBLIC\u003c/code\u003e before the home directory in :func:\u003ccode\u003e~platformdirs.user_publicshare_dir\u003c/code\u003e on Windows, so it no longer\nraises \u003ccode\u003eRuntimeError\u003c/code\u003e when \u003ccode\u003ePUBLIC\u003c/code\u003e is set and the home directory cannot be determined - by :user:\u003ccode\u003eemme1t\u003c/code\u003e.\n:pr:\u003ccode\u003e546\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eRuntimeError\u003c/code\u003e from :class:\u003ccode\u003e~platformdirs.android.Android\u003c/code\u003e directories when the app folder cannot be found,\ninstead of \u003ccode\u003eTypeError: expected str, bytes or os.PathLike object, not NoneType\u003c/code\u003e - by :user:\u003ccode\u003eStr0k\u003c/code\u003e. :pr:\u003ccode\u003e547\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.11.8 (2026-09-08)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eMake :func:\u003ccode\u003e~platformdirs.user_data_path\u003c/code\u003e, :func:\u003ccode\u003e~platformdirs.user_config_path\u003c/code\u003e,\n:func:\u003ccode\u003e~platformdirs.user_preference_path\u003c/code\u003e and :func:\u003ccode\u003e~platformdirs.user_applications_path\u003c/code\u003e return the first site\nentry when root is redirected by \u003ccode\u003euse_site_for_root\u003c/code\u003e under \u003ccode\u003emultipath\u003c/code\u003e, matching their \u003ccode\u003esite_*_path\u003c/code\u003e twins. They\npassed the whole joined list to :class:\u003ccode\u003e~pathlib.Path\u003c/code\u003e, giving one unusable path such as \u003ccode\u003e/xdg/a/foo:/xdg/b/foo\u003c/code\u003e -\nby :user:\u003ccode\u003edarrenhuai\u003c/code\u003e. :pr:\u003ccode\u003e538\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eIgnore relative paths in XDG Base Directory environment variables and use the existing platform fallback. Relative\nentries in \u003ccode\u003e$XDG_DATA_DIRS\u003c/code\u003e and \u003ccode\u003e$XDG_CONFIG_DIRS\u003c/code\u003e are skipped. :pr:\u003ccode\u003e540\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePreserve literal percent signs in Unix \u003ccode\u003euser-dirs.dirs\u003c/code\u003e paths, including \u003ccode\u003e100% complete\u003c/code\u003e, \u003ccode\u003e100%%\u003c/code\u003e and\n\u003ccode\u003e%(XDG_DESKTOP_DIR)s\u003c/...\n\n_Description has been truncated_","html_url":"https://github.com/wcmchenry3-stack/BC-Arcade/pull/2394","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wcmchenry3-stack%2FBC-Arcade/issues/2394","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2394/packages"}],"issue_packages":[{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":"/docs","pr_created_at":"2026-09-25T22:51:15.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5589394800","node_id":"PR_kwDORaxLQM8AAAABFMSz6Q","number":23,"state":"open","title":"Bump the minor-and-patch group in /docs with 63 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-25T22:51:15.000Z","updated_at":"2026-09-25T22:53:11.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"minor-and-patch","update_count":63,"packages":[{"name":"annotated-types","old_version":"0.7.0","new_version":"0.8.0","repository_url":"https://github.com/annotated-types/annotated-types"},{"name":"anyio","old_version":"4.14.2","new_version":"4.15.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"asttokens","old_version":"3.0.1","new_version":"3.0.2","repository_url":"https://github.com/gristlabs/asttokens"},{"name":"boto3","old_version":"1.42.51","new_version":"1.43.100","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.42.51","new_version":"1.43.100","repository_url":"https://github.com/boto/botocore"},{"name":"build","old_version":"1.4.0","new_version":"1.6.1","repository_url":"https://github.com/pypa/build"},{"name":"certifi","old_version":"2026.1.4","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.5.0","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.13.4","new_version":"7.16.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"django","old_version":"6.0.7","new_version":"6.1.1","repository_url":"https://github.com/django/django"},{"name":"docstring-parser-fork","old_version":"0.0.14","new_version":"0.0.16","repository_url":"https://github.com/rr-/docstring_parser"},{"name":"docutils","old_version":"0.21.2","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"fake-py","old_version":"0.12.2","new_version":"0.13.1","repository_url":"https://github.com/barseghyanartur/fake.py"},{"name":"idna","old_version":"3.15","new_version":"3.20","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.10.0","new_version":"9.17.1","repository_url":"https://github.com/ipython/ipython"},{"name":"jaraco-context","old_version":"6.1.0","new_version":"6.1.2","repository_url":"https://github.com/jaraco/jaraco.context"},{"name":"jaraco-functools","old_version":"4.4.0","new_version":"4.6.0","repository_url":"https://github.com/jaraco/jaraco.functools"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"jiter","old_version":"0.13.0","new_version":"0.17.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"librt","old_version":"0.8.1","new_version":"0.15.0","repository_url":"https://github.com/mypyc/librt"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"moto","old_version":"5.1.21","new_version":"5.2.3","repository_url":"https://github.com/getmoto/moto"},{"name":"nh3","old_version":"0.3.3","new_version":"0.3.7","repository_url":"https://github.com/messense/nh3"},{"name":"packaging","old_version":"26.0","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"pathspec","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/cpburnz/python-pathspec"},{"name":"prompt-toolkit","old_version":"3.0.52","new_version":"3.0.53","repository_url":"https://github.com/prompt-toolkit/python-prompt-toolkit"},{"name":"pure-eval","old_version":"0.2.3","new_version":"0.2.4","repository_url":"https://github.com/alexmojaki/pure_eval"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.49.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydoclint","old_version":"0.8.3","new_version":"0.9.1","repository_url":"https://github.com/jsh9/pydoclint"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pyproject-hooks","old_version":"1.2.0","new_version":"1.3.3","repository_url":"https://github.com/pypa/pyproject-hooks"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"responses","old_version":"0.25.8","new_version":"0.26.3","repository_url":"https://github.com/getsentry/responses"},{"name":"respx","old_version":"0.22.0","new_version":"0.23.1","repository_url":"https://github.com/lundberg/respx"},{"name":"ruff","old_version":"0.15.1","new_version":"0.16.8","repository_url":"https://github.com/astral-sh/ruff"},{"name":"s3transfer","old_version":"0.16.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"snowballstemmer","old_version":"3.0.1","new_version":"3.1.1","repository_url":"https://github.com/snowballstem/snowball"},{"name":"sphinx-source-tree","old_version":"0.2","new_version":"0.2.3","repository_url":"https://github.com/barseghyanartur/sphinx-source-tree"},{"name":"starlette","old_version":"1.3.1","new_version":"1.6.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"stevedore","old_version":"5.6.0","new_version":"5.9.1"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.70.1","repository_url":"https://github.com/tqdm/tqdm"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.16.1","repository_url":"https://github.com/ipython/traitlets"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"typing-inspection","old_version":"0.4.2","new_version":"0.4.4","repository_url":"https://github.com/pydantic/typing-inspection"},{"name":"urllib3","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uv","old_version":"0.11.15","new_version":"0.12.17","repository_url":"https://github.com/astral-sh/uv"},{"name":"uvicorn","old_version":"0.41.0","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.3.0","repository_url":"https://github.com/samuelcolvin/watchfiles"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.8.4","repository_url":"https://github.com/jquast/wcwidth"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"wheel","old_version":"0.46.3","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"xmltodict","old_version":"1.0.3","new_version":"1.0.4","repository_url":"https://github.com/martinblech/xmltodict"}],"path":"/docs","ecosystem":"pip"},"body":"Bumps the minor-and-patch group in /docs with 63 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [annotated-types](https://github.com/annotated-types/annotated-types) | `0.7.0` | `0.8.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.2` | `4.15.1` |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [asttokens](https://github.com/gristlabs/asttokens) | `3.0.1` | `3.0.2` |\n| [boto3](https://github.com/boto/boto3) | `1.42.51` | `1.43.100` |\n| [botocore](https://github.com/boto/botocore) | `1.42.51` | `1.43.100` |\n| [build](https://github.com/pypa/build) | `1.4.0` | `1.6.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.1.4` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.5.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.4` | `7.16.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1.1` |\n| [docstring-parser-fork](https://github.com/rr-/docstring_parser) | `0.0.14` | `0.0.16` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.21.2` | `0.23` |\n| [fake-py](https://github.com/barseghyanartur/fake.py) | `0.12.2` | `0.13.1` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.20` |\n| [ipython](https://github.com/ipython/ipython) | `9.10.0` | `9.17.1` |\n| [jaraco-context](https://github.com/jaraco/jaraco.context) | `6.1.0` | `6.1.2` |\n| [jaraco-functools](https://github.com/jaraco/jaraco.functools) | `4.4.0` | `4.6.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [jiter](https://github.com/pydantic/jiter) | `0.13.0` | `0.17.0` |\n| [librt](https://github.com/mypyc/librt) | `0.8.1` | `0.15.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [moto](https://github.com/getmoto/moto) | `5.1.21` | `5.2.3` |\n| [nh3](https://github.com/messense/nh3) | `0.3.3` | `0.3.7` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.3` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [pathspec](https://github.com/cpburnz/python-pathspec) | `1.0.4` | `1.1.1` |\n| [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) | `3.0.52` | `3.0.53` |\n| [pure-eval](https://github.com/alexmojaki/pure_eval) | `0.2.3` | `0.2.4` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.5` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.49.0` |\n| [pydoclint](https://github.com/jsh9/pydoclint) | `0.8.3` | `0.9.1` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pyproject-hooks](https://github.com/pypa/pyproject-hooks) | `1.2.0` | `1.3.3` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [responses](https://github.com/getsentry/responses) | `0.25.8` | `0.26.3` |\n| [respx](https://github.com/lundberg/respx) | `0.22.0` | `0.23.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.1` | `0.16.8` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.16.0` | `0.19.2` |\n| [snowballstemmer](https://github.com/snowballstem/snowball) | `3.0.1` | `3.1.1` |\n| [sphinx-source-tree](https://github.com/barseghyanartur/sphinx-source-tree) | `0.2` | `0.2.3` |\n| [starlette](https://github.com/Kludex/starlette) | `1.3.1` | `1.6.0` |\n| [stevedore](https://docs.openstack.org/stevedore) | `5.6.0` | `5.9.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.70.1` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.16.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [typing-inspection](https://github.com/pydantic/typing-inspection) | `0.4.2` | `0.4.4` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.7.0` | `2.8.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.12.17` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.53.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.3.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.8.4` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.48.0` |\n| [xmltodict](https://github.com/martinblech/xmltodict) | `1.0.3` | `1.0.4` |\n\nUpdates `annotated-types` from 0.7.0 to 0.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/annotated-types/annotated-types/releases\"\u003eannotated-types's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.8.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRename DocInfo to Doc by \u003ca href=\"https://github.com/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.13 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docstring of \u003ccode\u003eTimezone\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/84\"\u003eannotated-types/annotated-types#84\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) by \u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typo in README.md by \u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd CI for PyPy3.11 and fix test (issue 71) by \u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix string predicate names in doc by \u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd SPDX license expression by \u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Python 3.14 to the test matrix by \u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 and drop EOL 3.8-3.9 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/97\"\u003eannotated-types/annotated-types#97\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in \u003ccode\u003eLen\u003c/code\u003e docstring by \u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 0.8.0 release by \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/103\"\u003eannotated-types/annotated-types#103\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ehttps://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/9eb96680138269811a39d838d720abc3dce33954\"\u003e\u003ccode\u003e9eb9668\u003c/code\u003e\u003c/a\u003e Prepare for 0.8.0 release (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/103\"\u003e#103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/10b77644f88b385357653730a1ab23748ca3ae2e\"\u003e\u003ccode\u003e10b7764\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003eLen\u003c/code\u003e docstring (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/100\"\u003e#100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/955f7576d616feb6e9407c74498517787c38afd4\"\u003e\u003ccode\u003e955f757\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop EOL 3.8-3.9 (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/97\"\u003e#97\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/bd280fea7983550d266f993d868b8dd7ff822bf1\"\u003e\u003ccode\u003ebd280fe\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/96\"\u003e#96\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/a471bb757663452459893e6f593118ec21eb1b9e\"\u003e\u003ccode\u003ea471bb7\u003c/code\u003e\u003c/a\u003e Add SPDX license expression (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/92\"\u003e#92\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/eab91d9a8c0d3f73661fc4b0794a1fe76c94fa84\"\u003e\u003ccode\u003eeab91d9\u003c/code\u003e\u003c/a\u003e Fix string predicate names in doc (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/90\"\u003e#90\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/03ad9c3c7b4d4dfe9e33c09075a3a2766c0820e1\"\u003e\u003ccode\u003e03ad9c3\u003c/code\u003e\u003c/a\u003e add CI for PyPy3.11 and fix test (issue 71) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/88\"\u003e#88\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/5ae60437f0ab493cedd27311bc6ce6d2188e8d8b\"\u003e\u003ccode\u003e5ae6043\u003c/code\u003e\u003c/a\u003e fix: typo in README.md (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/87\"\u003e#87\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/b60ad7bff90019c7de3547df1c8e3586eb328423\"\u003e\u003ccode\u003eb60ad7b\u003c/code\u003e\u003c/a\u003e Update license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/86\"\u003e#86\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/3fbeb6d129760ae48d7a0372fb9301764acc95ae\"\u003e\u003ccode\u003e3fbeb6d\u003c/code\u003e\u003c/a\u003e Fix docstring of \u003ccode\u003eTimezone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/84\"\u003e#84\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.2 to 4.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplemented a compatibility fix for supporting direct access of \u003ccode\u003eanyio.*\u003c/code\u003e submodules from the main package even when those submodules were not directly imported first (\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311\"\u003e#1311\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311%5C%3E\"\u003eagronholm/anyio#1311\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for the newer keyword-only arguments on \u003ccode\u003eanyio.Path\u003c/code\u003e methods to match the standard library \u003ccode\u003epathlib.Path\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eexists()\u003c/code\u003e (Python 3.12+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_dir()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_file()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eowner()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003egroup()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enewline\u003c/code\u003e on \u003ccode\u003eread_text()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1286\"\u003e#1286\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1293\"\u003e#1293\u003c/a\u003e; PR by \u003ca href=\"https://github.com/jaideeppyne\"\u003e\u003ccode\u003e@​jaideeppyne\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eamap\u003c/code\u003e, \u003ccode\u003egather\u003c/code\u003e, and \u003ccode\u003eas_completed\u003c/code\u003e utility functions to simplify common patterns (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1173\"\u003e#1173\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003e--anyio-mode\u003c/code\u003e command-line option as an alternative to the \u003ccode\u003eanyio_mode\u003c/code\u003e ini setting, and fix the pytest plugin's auto mode detection to recognize the mode when set via either mechanism(e.g: \u003ccode\u003epytest_asyncio\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1242\"\u003e#1242\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003eanyio.Future\u003c/code\u003e synchronization primitive which behaves similar to \u003ccode\u003easyncio.Future\u003c/code\u003e, allowing tasks to wait for a value (or exception) from another task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1146\"\u003e#1146\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded guidance for managing multiple memory object stream producers and consumers with cloned streams (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/330\"\u003e#330\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nightcityblade\"\u003e\u003ccode\u003e@​nightcityblade\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eStapledObjectStream.send_nowait()\u003c/code\u003e that delegates to the underlying \u003ccode\u003eObjectSendStream\u003c/code\u003e, if it implements it (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1241\"\u003e#1241\u003c/a\u003e; PR by \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003emove_on_at()\u003c/code\u003e and \u003ccode\u003efail_at()\u003c/code\u003e functions to complement \u003ccode\u003emove_on_after()\u003c/code\u003e and \u003ccode\u003efail_after()\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the default name for a task spawned with \u003ccode\u003eTaskGroup.create_task(func())\u003c/code\u003e to match the default task name for the analogous task spawned with \u003ccode\u003eTaskGroup.start_soon(func)\u003c/code\u003e or \u003ccode\u003eTaskGroup.start(func)\u003c/code\u003e in more situations. Previously, the default name of a \u003ccode\u003eTaskGroup.create_task\u003c/code\u003e task never included the module name. (The default name for a task spawned with \u003ccode\u003eTaskGroup.start_soon\u003c/code\u003e or \u003ccode\u003eTaskGroup.start\u003c/code\u003e typically includes the module name.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1234\"\u003e#1234\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the \u003ccode\u003eanyio\u003c/code\u003e and \u003ccode\u003eanyio.abc\u003c/code\u003e modules to lazily (much like \u003ccode\u003e810\u003c/code\u003e) import the necessary submodules. This is done by parsing the AST of the module and building a lookup table from the \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block. A fallback mode has been provided for installations where the source code is unavailable (e.g. PyInstaller). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1169\"\u003e#1169\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed free-threading compatibility issues arising from the fact that on Python 3.14 free-threading builds, newly created threads inherit the current context by default, causing AnyIO to behave erroneously in relation to \u003ccode\u003estart_blocking_portal()\u003c/code\u003e and \u003ccode\u003eanyio.to_thread.run_sync()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1224\"\u003e#1224\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eSpooledTemporaryFile.readinto()\u003c/code\u003e and \u003ccode\u003ereadinto1()\u003c/code\u003e reading twice before rollover, so the destination buffer was overwritten by the second read and the file position advanced twice, silently losing data (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1215\"\u003e#1215\u003c/a\u003e; PR by \u003ca href=\"https://github.com/c-tonneslan\"\u003e\u003ccode\u003e@​c-tonneslan\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003efail_after\u003c/code\u003e (and the new \u003ccode\u003efail_at\u003c/code\u003e) allowing for added exception context when raising \u003ccode\u003eTimeoutError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1227\"\u003e#1227\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the default \u003ccode\u003eTaskHandle.name\u003c/code\u003e missing part of the task name for tasks started with \u003ccode\u003eTaskGroup.start\u003c/code\u003e on Trio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1231\"\u003e#1231\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.run\u003c/code\u003e leaking, or at least, delaying collection of loop and root_task due to the root task being cached in a \u003ccode\u003eRunVar\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1203\"\u003e#1203\u003c/a\u003e; PR by \u003ca href=\"https://github.com/tapetersen\"\u003e\u003ccode\u003e@​tapetersen\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.Path.with_stem()\u003c/code\u003e silently producing a wrong path (e.g. \u003ccode\u003ePath(\u0026quot;.txt\u0026quot;)\u003c/code\u003e) instead of raising \u003ccode\u003eValueError\u003c/code\u003e when given an empty stem on a path with a non-empty suffix, unlike \u003ccode\u003epathlib.PurePath.with_stem\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1200\"\u003e#1200\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eUNIXSocketStream.aclose()\u003c/code\u003e raising \u003ccode\u003easyncio.InvalidStateError\u003c/code\u003e when a concurrent receive or send operation had just been cancelled on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1267\"\u003e#1267\u003c/a\u003e; PR by \u003ca href=\"https://github.com/alloutflo\"\u003e\u003ccode\u003e@​alloutflo\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the pytest plugin importing the deprecated \u003ccode\u003e_pytest.python.CallSpec2\u003c/code\u003e alias, which triggers \u003ccode\u003ePytestRemovedIn10Warning\u003c/code\u003e on \u003ccode\u003epytest\u0026gt;=9.2\u003c/code\u003e and crashes pytest at startup when \u003ccode\u003efilterwarnings = error\u003c/code\u003e is configured (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1271\"\u003e#1271\u003c/a\u003e; PR by \u003ca href=\"https://github.com/matthewfeickert\"\u003e\u003ccode\u003e@​matthewfeickert\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an asyncio worker thread race that could raise \u003ccode\u003eRuntimeError\u003c/code\u003e when the event loop closed between checking its state and scheduling the worker result (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1265\"\u003e#1265\u003c/a\u003e; PR by \u003ca href=\"https://github.com/hansu650\"\u003e\u003ccode\u003e@​hansu650\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens when \u003ccode\u003etotal_tokens\u003c/code\u003e was raised while the limiter was over-subscribed (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1223\"\u003e#1223\u003c/a\u003e; PR by \u003ca href=\"https://github.com/zelinewang\"\u003e\u003ccode\u003e@​zelinewang\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffcd1542cd6d127980205f90a0100078849dd703\"\u003e\u003ccode\u003effcd154\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/0ecf5ed98d294242509b043ebd1a0843e52d892f\"\u003e\u003ccode\u003e0ecf5ed\u003c/code\u003e\u003c/a\u003e Added a workaround for third party code accessing unimported submodules (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/928366259543412a2deb1e2ba09ea45ffa92ef4f\"\u003e\u003ccode\u003e9283662\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d137692a90f76e4f71605e32ea5ca94cab3a539d\"\u003e\u003ccode\u003ed137692\u003c/code\u003e\u003c/a\u003e Improved the instructions for AI agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/033fc52b8fa8e90c5d0ef24b10b3860e974a6265\"\u003e\u003ccode\u003e033fc52\u003c/code\u003e\u003c/a\u003e Shield TemporaryDirectory cleanup from cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1304\"\u003e#1304\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/942e9a6552cc10b5aaa779d84bfc8e2c3d5fcffc\"\u003e\u003ccode\u003e942e9a6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1305\"\u003e#1305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b825c3be7cb4ca1a8000b8065d4e147843deb704\"\u003e\u003ccode\u003eb825c3b\u003c/code\u003e\u003c/a\u003e Fixed pyproject.toml changes not triggering the test suite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9727dc504681e2986b5bc285de9571fb467539af\"\u003e\u003ccode\u003e9727dc5\u003c/code\u003e\u003c/a\u003e Fixed start inconsistencies between trio and asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b05fe6d160a640355c201363cab286a7d2581da8\"\u003e\u003ccode\u003eb05fe6d\u003c/code\u003e\u003c/a\u003e Fixed wrong type in move_on_after (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1297\"\u003e#1297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44d0c93cc20079acbf38ba4dbed5ab9df323f153\"\u003e\u003ccode\u003e44d0c93\u003c/code\u003e\u003c/a\u003e Fixed asyncio task group coroutine cleanup (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.2...4.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asttokens` from 3.0.1 to 3.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gristlabs/asttokens/releases\"\u003easttokens's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eModernize type annotations by \u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/172\"\u003egristlabs/asttokens#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pypy CI by skipping redundant mypy runs on it by \u003ca href=\"https://github.com/dsagal\"\u003e\u003ccode\u003e@​dsagal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/173\"\u003egristlabs/asttokens#173\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix IndexError on source mixing lone CR with LF line endings (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/105\"\u003e#105\u003c/a\u003e) by \u003ca href=\"https://github.com/apoorvdarshan\"\u003e\u003ccode\u003e@​apoorvdarshan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/174\"\u003egristlabs/asttokens#174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease modernization, and publish to PyPI from CI via trusted publishing by \u003ca href=\"https://github.com/dsagal\"\u003e\u003ccode\u003e@​dsagal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/175\"\u003egristlabs/asttokens#175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/172\"\u003egristlabs/asttokens#172\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apoorvdarshan\"\u003e\u003ccode\u003e@​apoorvdarshan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gristlabs/asttokens/pull/174\"\u003egristlabs/asttokens#174\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gristlabs/asttokens/compare/v3.0.1...v3.0.2\"\u003ehttps://github.com/gristlabs/asttokens/compare/v3.0.1...v3.0.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/f97a6e1403d9f0e93940a11b507524550a5c3896\"\u003e\u003ccode\u003ef97a6e1\u003c/code\u003e\u003c/a\u003e Release modernization, and publish to PyPI from CI via trusted publishing (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/175\"\u003e#175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/bb3c487da039e21638150f53c2f8d23ba2d92826\"\u003e\u003ccode\u003ebb3c487\u003c/code\u003e\u003c/a\u003e Fix IndexError on source mixing lone CR with LF line endings (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/105\"\u003e#105\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/174\"\u003e#174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/d1eed1023e1203f5392d3e2ebd1f195fdf4c1973\"\u003e\u003ccode\u003ed1eed10\u003c/code\u003e\u003c/a\u003e Fix pypy CI by skipping redundant mypy runs on it (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/173\"\u003e#173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gristlabs/asttokens/commit/b8834d38dc69eea2ceb401cf068e0c78394f3f68\"\u003e\u003ccode\u003eb8834d3\u003c/code\u003e\u003c/a\u003e Modernize type annotations (\u003ca href=\"https://redirect.github.com/gristlabs/asttokens/issues/172\"\u003e#172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/gristlabs/asttokens/compare/v3.0.1...v3.0.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.42.51 to 1.43.100\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2b8c4ed93e6894617dd47fbd6d7957ff75e60403\"\u003e\u003ccode\u003e2b8c4ed\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.100'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/4001955f75ae3c48a311b56e57fe1f3c4bee6940\"\u003e\u003ccode\u003e4001955\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.100\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/361a6d61a664e9f7af37750183f3fd923931eb22\"\u003e\u003ccode\u003e361a6d6\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8ce7465b1c7e451d3f9ef15b41f09ddf5bf52584\"\u003e\u003ccode\u003e8ce7465\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/399bd00bf646ab04c63c00a20847975cb8920d30\"\u003e\u003ccode\u003e399bd00\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/f4aa477d2594dd2d60831a0add8ef19b661a1f6b\"\u003e\u003ccode\u003ef4aa477\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/15d73115f2849fd1acbb7278abd0b23ba1275075\"\u003e\u003ccode\u003e15d7311\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3314d844db83f544d5e9e0a69e832c00aa5d35b4\"\u003e\u003ccode\u003e3314d84\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/79f46cc4d5913c34004747906cf508e6d0bbea1f\"\u003e\u003ccode\u003e79f46cc\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3a3637ffdcfcbc372301c116fd4378bba35da85b\"\u003e\u003ccode\u003e3a3637f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.98\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.42.51...1.43.100\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.42.51 to 1.43.100\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/22c55b37c9923caf2eb13062556fab0ccfc5b67b\"\u003e\u003ccode\u003e22c55b3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.100'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/a5b65cac64124adb23b1ffd549a8bcbf7c384487\"\u003e\u003ccode\u003ea5b65ca\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.100\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c1504791d2ca1deee51762a75efa52dbbf798ce4\"\u003e\u003ccode\u003ec150479\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/85e265bfe8fb2d6c2f9cbd44c9500b18ff4de70e\"\u003e\u003ccode\u003e85e265b\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/883cff3440021ef7c762332f2845eed1af7334c3\"\u003e\u003ccode\u003e883cff3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.99' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0e8a5deaec33ec6d26de4cc08615f745e6816bc3\"\u003e\u003ccode\u003e0e8a5de\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.99\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3cb0216f531434c51c38dbe2fc59c5867dfbbb02\"\u003e\u003ccode\u003e3cb0216\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/cfdf9056c2014b02f816a9fb73743d1005ac7a7b\"\u003e\u003ccode\u003ecfdf905\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/f9195c79ea2bf46350dd320d2a0bf3db7da0b460\"\u003e\u003ccode\u003ef9195c7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.98' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dfc704e5d254829608b0f427921c67f3521abab6\"\u003e\u003ccode\u003edfc704e\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.98\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.42.51...1.43.100\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.4.0 to 1.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore[v1]: prepare for v1.6.1 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1181\"\u003epypa/build#1181\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.6.0...1.6.1\"\u003ehttps://github.com/pypa/build/compare/1.6.0...1.6.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace prettier with mdformat and yamlfmt by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1133\"\u003epypa/build#1133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLet yamlfmt format the workflows by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1134\"\u003epypa/build#1134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(release): semver auto bump, changelog reflow, and roll back 1.5.1 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1132\"\u003epypa/build#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: hash verification in --dependency-constraints-txt could be silently skipped by \u003ca href=\"https://github.com/manfred-kaiser\"\u003e\u003ccode\u003e@​manfred-kaiser\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1140\"\u003epypa/build#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): bump build-and-inspect-python-package to v3.0.1 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1147\"\u003epypa/build#1147\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): pin coverage core to ctrace so test contexts record by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1148\"\u003epypa/build#1148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: run mypy on more parts of the code by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1151\"\u003epypa/build#1151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: turn up strictness on mypy by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1153\"\u003epypa/build#1153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: faster mypy, fix merge error by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1156\"\u003epypa/build#1156\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): rerun integration tests on transient network errors by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1150\"\u003epypa/build#1150\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: clean up unused casts in tests by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1154\"\u003epypa/build#1154\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor(typing): apply review feedback from \u003ca href=\"https://redirect.github.com/pypa/build/issues/1093\"\u003e#1093\u003c/a\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1155\"\u003epypa/build#1155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: Generator is more accurate than Iterator by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1152\"\u003epypa/build#1152\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: mark test_main_sdist_input_end_to_end with pytest.mark.network by \u003ca href=\"https://github.com/frenzymadness\"\u003e\u003ccode\u003e@​frenzymadness\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1144\"\u003epypa/build#1144\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;⚠️ feat(util): deprecate project_wheel_metadata\u0026quot; by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1158\"\u003epypa/build#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: download integration sources once per run by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1157\"\u003epypa/build#1157\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse stdlib \u003ccode\u003eimportlib.metadata\u003c/code\u003e for typing by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1162\"\u003epypa/build#1162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop redundant \u003ccode\u003eexc_info\u003c/code\u003e parameter from backend exception wrapper by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1161\"\u003epypa/build#1161\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop a few PyPy-specific test skips by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1164\"\u003epypa/build#1164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 chore: batch dependency updates weekly on Tuesday by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1165\"\u003epypa/build#1165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: use app token for releases by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1169\"\u003epypa/build#1169\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/manfred-kaiser\"\u003e\u003ccode\u003e@​manfred-kaiser\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1140\"\u003epypa/build#1140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/frenzymadness\"\u003e\u003ccode\u003e@​frenzymadness\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1144\"\u003epypa/build#1144\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.5.1...1.6.0\"\u003ehttps://github.com/pypa/build/compare/1.5.1...1.6.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.6.1 (2026-09-10)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid trying to detect symlinks on Windows, regression in 1.6.0 - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1175\u003c/code\u003e) (:issue:\u003ccode\u003e1175\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDocumentation\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eFix doubled backslashes in the Windows pip config path (\u003ccode\u003e%APPDATA%\\pip\\pip.ini\u003c/code\u003e) in the docs - by :user:\u003ccode\u003earoh3006\u003c/code\u003e\n(:issue:\u003ccode\u003e1149\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eMiscellaneous\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e:issue:\u003ccode\u003e1168\u003c/code\u003e, :issue:\u003ccode\u003e1170\u003c/code\u003e, :issue:\u003ccode\u003e1178\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e####################\n1.6.0 (2026-08-27)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/89cccef40df9011f03bec18cf52c53d1096ed6ee\"\u003e\u003ccode\u003e89cccef\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/a6f707a75fc8548d7707645e97c7903197387849\"\u003e\u003ccode\u003ea6f707a\u003c/code\u003e\u003c/a\u003e ci: support releases from v* branches (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1178\"\u003e#1178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/77851610de5d3894fa8a88e06e0232901cf93758\"\u003e\u003ccode\u003e7785161\u003c/code\u003e\u003c/a\u003e docs: fix doubled backslashes in Windows pip config path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1149\"\u003e#1149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/244b250c3219070eebb29764f7709262d48afd41\"\u003e\u003ccode\u003e244b250\u003c/code\u003e\u003c/a\u003e fix: always use copies for the isolated venv on Windows (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/c93ca6f6d252e4d8df7fda4a61f8f9ed8a55a411\"\u003e\u003ccode\u003ec93ca6f\u003c/code\u003e\u003c/a\u003e build(deps): bump re-actors/alls-green from 1.2.2 to 1.3.0 in the github-acti...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/e02ffd32241aec2e306d90869417c1e900c0adb4\"\u003e\u003ccode\u003ee02ffd3\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1173\"\u003e#1173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/aad39a800e3d81bf907018ebe2fab135717da59b\"\u003e\u003ccode\u003eaad39a8\u003c/code\u003e\u003c/a\u003e docs: fix changelog page heading levels and sidebar (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/5c3fd46b5c38c7caea5dd95ce365971104a734aa\"\u003e\u003ccode\u003e5c3fd46\u003c/code\u003e\u003c/a\u003e docs: use PyPI ref directly (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/1c5bd6c21cbd33c1816978d45219d48fb4c2b269\"\u003e\u003ccode\u003e1c5bd6c\u003c/code\u003e\u003c/a\u003e 🐛 fix(release): format generated changelog (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/7f0cc7ed19969558c7daeaa3652ce2ffc81599c1\"\u003e\u003ccode\u003e7f0cc7e\u003c/code\u003e\u003c/a\u003e 🔧 build(type): replace mypy with pyrefly (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.4.0...1.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.1.4 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.01.04...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.5.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.5.0/\"\u003ehttps://pypi.org/project/click/8.5.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-5-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-5-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/33\"\u003ehttps://github.com/pallets/click/milestone/33\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2672\"\u003e#2672\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3637\"\u003e#3637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2986\"\u003e#2986\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3505\"\u003e#3505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2983\"\u003e#2983\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3473\"\u003e#3473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when \u003ca href=\"https://redirect.github.com/pallets/click/issues/2969\"\u003e#2969\u003c/a\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. \u003ca href=\"https...\n\n_Description has been truncated_","html_url":"https://github.com/barseghyanartur/safetar/pull/23","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/barseghyanartur%2Fsafetar/issues/23","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/23/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-25T12:40:07.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5582905750","node_id":"PR_kwDOQgqbUs8AAAABFHMXsQ","number":1016,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 13 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":8,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-25T12:40:07.000Z","updated_at":"2026-09-26T13:44:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-minor-patch","update_count":13,"packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"httpx2","old_version":"2.12.0","new_version":"2.13.1","repository_url":"https://github.com/pydantic/httpx2"},{"name":"msgpack","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"orjson","old_version":"3.11.9","new_version":"3.12.0","repository_url":"https://github.com/ijl/orjson"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.2","new_version":"2.15.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.70.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.51","new_version":"2.0.54","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"urllib3","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 13 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.12.0` | `2.13.1` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.1` | `1.2.2` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.9` | `3.12.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.2` | `2.15.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.70.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.51` | `2.0.54` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.7.0` | `2.8.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.1` | `0.53.0` |\n\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx2` from 2.12.0 to 2.13.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpx2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.1\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e📤 Accurate file upload lengths\u003c/h3\u003e\n\u003cp\u003ePassing a file as \u003ccode\u003econtent=\u003c/code\u003e now calculates \u003ccode\u003eContent-Length\u003c/code\u003e from its remaining bytes, respecting the current file position (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1214\"\u003e#1214\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🔐 Reliable proxy TLS and HTTP/2 negotiation\u003c/h3\u003e\n\u003cp\u003eTLS hostname overrides now apply inside HTTP proxy tunnels without affecting the proxy's own TLS connection (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1223\"\u003e#1223\u003c/a\u003e). HTTP/2 is advertised first when enabled, and HTTP/1.1 is omitted when disabled (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1155\"\u003e#1155\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🧹 Clean WebSocket shutdown\u003c/h3\u003e\n\u003cp\u003eThe sync WebSocket keepalive thread now exits cleanly when a ping races with connection shutdown (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1228\"\u003e#1228\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCalculate \u003ccode\u003eContent-Length\u003c/code\u003e from the remaining bytes when a file is passed as \u003ccode\u003econtent=\u003c/code\u003e, respecting its current position (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1214\"\u003e#1214\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eStop the sync WebSocket keepalive thread cleanly when a ping races with connection shutdown (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1228\"\u003e#1228\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHonor the \u003ccode\u003esni_hostname\u003c/code\u003e extension for TLS inside HTTP proxy tunnels without applying it to the proxy's TLS connection (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1223\"\u003e#1223\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePrefer HTTP/2 during TLS protocol negotiation when enabled, and stop advertising HTTP/1.1 when it is disabled (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1155\"\u003e#1155\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/httpx2/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🔐 Reliable TLS verification controls\u003c/h3\u003e\n\u003cp\u003eThe CLI \u003ccode\u003e--no-verify\u003c/code\u003e flag now disables TLS certificate verification as intended, and \u003ccode\u003e--verify\u003c/code\u003e provides an explicit counterpart (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003epydantic/httpx2#1140\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003epydantic/httpx2#1186\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🧹 Safer async stream cleanup\u003c/h3\u003e\n\u003cp\u003eStopping a streamed response early no longer risks a nested async generator finalization error (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003epydantic/httpx2#1179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/blob/main/src/httpx2/CHANGELOG.md\"\u003ehttpx2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.1 (September 23rd, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCalculate \u003ccode\u003eContent-Length\u003c/code\u003e from the remaining bytes when a file is passed as \u003ccode\u003econtent=\u003c/code\u003e, respecting its current position.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1214\"\u003e#1214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop the sync WebSocket keepalive thread cleanly when a ping races with connection shutdown.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1228\"\u003e#1228\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.13.0 (September 14th, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake the \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag disable TLS certificate verification and add an explicit \u003ccode\u003e--verify\u003c/code\u003e counterpart.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003e#1140\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003e#1204\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/d91c9f4236523eb5978ca800944fa0078f17409f\"\u003e\u003ccode\u003ed91c9f4\u003c/code\u003e\u003c/a\u003e Correct the upcoming release version to 2.13.1 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1228\"\u003e#1228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/62a607d0772ba567917a26afb4e7a83f104a10d6\"\u003e\u003ccode\u003e62a607d\u003c/code\u003e\u003c/a\u003e Prepare version 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1227\"\u003e#1227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/df9783d23b9508b7e6a2277217dae496e3435462\"\u003e\u003ccode\u003edf9783d\u003c/code\u003e\u003c/a\u003e Respect file cursor positions when calculating raw content length (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1214\"\u003e#1214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/04d152ba8ef082f68feb21fe0e13e361215b942d\"\u003e\u003ccode\u003e04d152b\u003c/code\u003e\u003c/a\u003e docs: correct stale URL.query example (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1222\"\u003e#1222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f2951854442e78cb8f6d2256b7c1d83bd2b77d0b\"\u003e\u003ccode\u003ef295185\u003c/code\u003e\u003c/a\u003e Prepare version 2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/8f215b5c9768ba8152c7aaf52fd85efb80ea992b\"\u003e\u003ccode\u003e8f215b5\u003c/code\u003e\u003c/a\u003e Use portable links in API docstrings (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1202\"\u003e#1202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/36d636a002a42f961d1da4233546fe2f2c83c9c1\"\u003e\u003ccode\u003e36d636a\u003c/code\u003e\u003c/a\u003e Group \u003ccode\u003ehttpx2.__all__\u003c/code\u003e exports by source module (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1188\"\u003e#1188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f1064aaf67dab1598bb817fa0bff871f5bb2d7fa\"\u003e\u003ccode\u003ef1064aa\u003c/code\u003e\u003c/a\u003e Bump the python-packages group across 1 directory with 11 updates (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/bc27137977442cbfecb357046fd90f38c7f13108\"\u003e\u003ccode\u003ebc27137\u003c/code\u003e\u003c/a\u003e Update uv-dynamic-versioning requirement from \u0026gt;=0.14.0 to \u0026gt;=0.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/62e08275346151351af60632a2258dea47218b6c\"\u003e\u003ccode\u003e62e0827\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.12.0...v2.13.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix docstring for read_size by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/700\"\u003emsgpack/msgpack-python#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eunpacker: fix silent datetime truncation with datetime=3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/701\"\u003emsgpack/msgpack-python#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erun test with debug build by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/702\"\u003emsgpack/msgpack-python#702\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: add reentrant guard to Unpacker.feed() by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/704\"\u003emsgpack/msgpack-python#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 6.0.3 to 7.0.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/705\"\u003emsgpack/msgpack-python#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/707\"\u003emsgpack/msgpack-python#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_unpack.py: add tests for ExtraData by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/708\"\u003emsgpack/msgpack-python#708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/709\"\u003emsgpack/msgpack-python#709\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime() precision for far-future datetimes by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in test and docs by \u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/719\"\u003emsgpack/msgpack-python#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in unpackb() ExtraData path for non-contiguous input by \u003ca href=\"https://github.com/ThomasWaldmann\"\u003e\u003ccode\u003e@​ThomasWaldmann\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/722\"\u003emsgpack/msgpack-python#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/721\"\u003emsgpack/msgpack-python#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 4.1.1 to 4.2.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/724\"\u003emsgpack/msgpack-python#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert Packer's buf_size once by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: translate RecursionError to StackError in fallback Unpacker.skip() by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/727\"\u003emsgpack/msgpack-python#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate nanoseconds range when unpacking timestamps in the C extension by \u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid parallel execution of the recursion-limit nesting test on free-threaded builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/729\"\u003emsgpack/msgpack-python#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise OverflowError when use_single_float cannot represent a value by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.2 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/730\"\u003emsgpack/msgpack-python#730\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.2\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-08-27\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix the \u003ccode\u003eread_size\u003c/code\u003e documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silent truncation when unpacking an out-of-range timestamp with \u003ccode\u003etimestamp=3\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/701\"\u003e#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent reentrant calls to \u003ccode\u003eUnpacker.feed()\u003c/code\u003e while unpacking. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/704\"\u003e#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/707\"\u003e#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e precision for far-future datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/710\"\u003e#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in the documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/712\"\u003e#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate the nanoseconds range when unpacking timestamps in the C extension. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a use-after-free in the \u003ccode\u003eunpackb()\u003c/code\u003e \u003ccode\u003eExtraData\u003c/code\u003e path for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/722\"\u003e#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent a buffer overflow when converting \u003ccode\u003ePacker\u003c/code\u003e's \u003ccode\u003ebuf_size\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTranslate \u003ccode\u003eRecursionError\u003c/code\u003e to \u003ccode\u003eStackError\u003c/code\u003e in the fallback \u003ccode\u003eUnpacker.skip()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eOverflowError\u003c/code\u003e when \u003ccode\u003euse_single_float=True\u003c/code\u003e cannot represent a value. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/7381b318f51688f3f941df0b4c056d7a7a20c9d0\"\u003e\u003ccode\u003e7381b31\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ee1bd3c02d5494921653a0f7ffc264b8591de713\"\u003e\u003ccode\u003eee1bd3c\u003c/code\u003e\u003c/a\u003e release v1.2.2 (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/57d28a250c4904685f3a4f4135b301def517681e\"\u003e\u003ccode\u003e57d28a2\u003c/code\u003e\u003c/a\u003e Raise OverflowError when use_single_float cannot represent a value (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/d374a17e88f20c221760454e8829dc58ad5222a8\"\u003e\u003ccode\u003ed374a17\u003c/code\u003e\u003c/a\u003e Avoid parallel execution of the recursion-limit nesting test on free-threaded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/e94e1dc078547c58855c7cc60b6e54c44deb903d\"\u003e\u003ccode\u003ee94e1dc\u003c/code\u003e\u003c/a\u003e Validate nanoseconds range when unpacking timestamps in the C extension (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/2e4be090f6a42e1ad19526ca6f6ee67f3476389a\"\u003e\u003ccode\u003e2e4be09\u003c/code\u003e\u003c/a\u003e fix: translate RecursionError to StackError in fallback Unpacker.skip() (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/9f9bdae0773166e8ed50dfdd1ed13cc4296819ce\"\u003e\u003ccode\u003e9f9bdae\u003c/code\u003e\u003c/a\u003e Convert Packer's buf_size once (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/809bfcda6d7186fbb34f6ea1b984a61344ba55d2\"\u003e\u003ccode\u003e809bfcd\u003c/code\u003e\u003c/a\u003e remove unused variable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/186d4dbc126b659eff1509c850300e207d8aaad5\"\u003e\u003ccode\u003e186d4db\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 4.1.1 to 4.2.0(\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ea6b84f5ee6d97ae2089f1eb025034a6847d1ccb\"\u003e\u003ccode\u003eea6b84f\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencie...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.11.9 to 3.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/releases\"\u003eorjson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/blob/master/CHANGELOG.md\"\u003eorjson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0 - 2026-08-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6737895a1a4e3e26df0569a40147893a786f9a58\"\u003e\u003ccode\u003e6737895\u003c/code\u003e\u003c/a\u003e 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/c2a6e8ff7b898635fb68a85bd5a62df1edf61cfc\"\u003e\u003ccode\u003ec2a6e8f\u003c/code\u003e\u003c/a\u003e JsonWriter, iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6a2d7a7d66dc3c5698625a7b334c40db459e46ae\"\u003e\u003ccode\u003e6a2d7a7\u003c/code\u003e\u003c/a\u003e yyjson 1ea2fb0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/97bf170d9726e91c891f35eae4892801520b9dce\"\u003e\u003ccode\u003e97bf170\u003c/code\u003e\u003c/a\u003e build update\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/ijl/orjson/compare/3.11.9...3.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.12 to 2.9.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.13\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1848](https://github.com/psycopg/psycopg2/issues/1848)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed bytea input.\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed int64 input in arrays (:ticket:\u003ccode\u003e[#1847](https://github.com/psycopg/psycopg2/issues/1847)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003epyproject.toml\u003c/code\u003e file to declare a PEP 517 build backend\n(:ticket:\u003ccode\u003e[#1788](https://github.com/psycopg/psycopg2/issues/1788)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f650e7afed0c94f596594e8328a0c7fa65a9d0e5\"\u003e\u003ccode\u003ef650e7a\u003c/code\u003e\u003c/a\u003e chore: bump to release 2.9.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/368c8a1ca6d80088703a693ce64b68ad7d346698\"\u003e\u003ccode\u003e368c8a1\u003c/code\u003e\u003c/a\u003e chore!: drop support for Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/9b39e65ab232f0a267a278cdaef1bd9975d88c65\"\u003e\u003ccode\u003e9b39e65\u003c/code\u003e\u003c/a\u003e chore: drop scaleway build support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/2ca70416be6d4d3d8170ec439876c0b3569af718\"\u003e\u003ccode\u003e2ca7041\u003c/code\u003e\u003c/a\u003e fix: fix handling of PostgreSQL 18 exceptions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/5385c027ef62ce14e57a7379e0375868507d6746\"\u003e\u003ccode\u003e5385c02\u003c/code\u003e\u003c/a\u003e Build CPython 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/1d32e1f6678ffa8ab8897ca81826bf4dde6354cd\"\u003e\u003ccode\u003e1d32e1f\u003c/code\u003e\u003c/a\u003e ci: only attempt triggering documentation refresh when pushing on main repo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/433e7b77a7b700fbb1cdc6e9dca6b5948d07fc23\"\u003e\u003ccode\u003e433e7b7\u003c/code\u003e\u003c/a\u003e chore: add pyproject.toml file to declare a PEP 517 build backend\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/8fb80bc3b2c358f4e3c54e33a37326d3f8b3ff6a\"\u003e\u003ccode\u003e8fb80bc\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed int64 input in arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f98014a46a1e34f024ebd6134d1d87b77490c500\"\u003e\u003ccode\u003ef98014a\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed bytea input\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/822b79cfe12ca0a04482acd382cae669a16aa789\"\u003e\u003ccode\u003e822b79c\u003c/code\u003e\u003c/a\u003e chore: bump dependencies in binary package\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.12...2.9.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.14.2 to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.15.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBehavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ecase_sensitive\u003c/code\u003e now applies to init kwargs and config-file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/900\"\u003e#900\u003c/a\u003e). \u003ccode\u003eInitSettingsSource\u003c/code\u003e and the JSON/TOML/YAML config sources previously ignored \u003ccode\u003ecase_sensitive\u003c/code\u003e. Since it defaults to \u003ccode\u003eFalse\u003c/code\u003e, \u003cstrong\u003ecase-insensitive matching is now the default\u003c/strong\u003e for these sources — e.g. \u003ccode\u003eSettings(TeSt=...)\u003c/code\u003e now populates a \u003ccode\u003etest\u003c/code\u003e field where it previously did not. Nested keys are still matched case-sensitively.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFields with unresolved forward references now emit a warning\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/901\"\u003e#901\u003c/a\u003e). Settings sources can silently fail to resolve such fields; they now raise \u003ccode\u003eIncompleteFieldDefinitionWarning\u003c/code\u003e telling you to call \u003ccode\u003emodel_rebuild()\u003c/code\u003e. If you have \u003ccode\u003efilterwarnings = error\u003c/code\u003e configured, this may surface as a new failure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNon-JSON env values for strict fields now raise \u003ccode\u003eValidationError\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/926\"\u003e#926\u003c/a\u003e) instead of a less specific error.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eShow environment variable names in CLI help\u003c/strong\u003e via \u003ccode\u003ecli_show_env_vars=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/860\"\u003e#860\u003c/a\u003e), so generated \u003ccode\u003e--help\u003c/code\u003e output doubles as configuration documentation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePYDANTIC_SETTINGS_DEBUG\u003c/code\u003e for debugging settings resolution\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/913\"\u003e#913\u003c/a\u003e). Set it to a truthy value with \u003ccode\u003eDEBUG\u003c/code\u003e logging enabled to see each source's contribution in priority order, which source won for each value, and which \u003ccode\u003eenv_file\u003c/code\u003e/secret files were probed, loaded, or skipped — the long-standing \u0026quot;why isn't my \u003ccode\u003e.env\u003c/code\u003e being picked up?\u0026quot; question.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003etoml_table_header\u003c/code\u003e for regular TOML files\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/882\"\u003e#882\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/887\"\u003e#887\u003c/a\u003e), letting you root settings at a nested table in any TOML file, not just \u003ccode\u003epyproject.toml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eTraversable\u003c/code\u003e support for JSON/TOML/YAML file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/902\"\u003e#902\u003c/a\u003e), so you can load config packaged inside a distribution — including files inside a zip or wheel — via \u003ccode\u003eimportlib.resources.files(...)\u003c/code\u003e without casting to \u003ccode\u003ePath\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGCP: \u003ccode\u003eproject_id\u003c/code\u003e can come from an earlier settings source\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003e#878\u003c/a\u003e), rather than only from the constructor or \u003ccode\u003eGOOGLE_CLOUD_PROJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix env vars not loading on Windows with \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/894\"\u003e#894\u003c/a\u003e). Windows upper-cases \u003ccode\u003eos.environ\u003c/code\u003e keys, so fields raised \u003ccode\u003eField required\u003c/code\u003e instead of picking up their values.\u003c/li\u003e\n\u003cli\u003eRead secret files as UTF-8 instead of the platform locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/917\"\u003e#917\u003c/a\u003e). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAliasPath\u003c/code\u003e on nested model fields not JSON-decoding env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/898\"\u003e#898\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix case-insensitive matching for \u003cstrong\u003eoptional\u003c/strong\u003e nested models (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/905\"\u003e#905\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix dotenv extras being wrongly claimed by a complex field sharing a name prefix (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/912\"\u003e#912\u003c/a\u003e) — e.g. \u003ccode\u003edbx_token\u003c/code\u003e being swallowed by a \u003ccode\u003edb: dict\u003c/code\u003e field.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e corrupting discriminated unions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/876\"\u003e#876\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSecret\u003c/code\u003e subclasses crashing when loaded from the environment (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/920\"\u003e#920\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix enum names not parsing through nested annotations such as \u003ccode\u003eOptional[Annotated[MyEnum, ...]]\u003c/code\u003e with \u003ccode\u003eenv_parse_enums=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/910\"\u003e#910\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty \u003ccode\u003eyaml_config_section\u003c/code\u003e now falls back to defaults instead of raising \u003ccode\u003eAttributeError: 'NoneType' object has no attribute 'keys'\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/914\"\u003e#914\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e no longer follows symlinks pointing outside \u003ccode\u003esecrets_dir\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/889\"\u003e#889\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGCP: skip the \u003ccode\u003elist_secrets\u003c/code\u003e call when \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003e#862\u003c/a\u003e), lowering the required IAM permissions to just \u003ccode\u003eroles/secretmanager.secretAccessor\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAWS: \u003ccode\u003etypes-boto3[secretsmanager]\u003c/code\u003e is no longer required at runtime (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/880\"\u003e#880\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument JSON parsing of complex env values, plus a comma-separated-values recipe (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/919\"\u003e#919\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRecommend an async settings loading pattern (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/908\"\u003e#908\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify behavior when an unprefixed value is present in a dotenv file (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/895\"\u003e#895\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify environment variable helper descriptions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003e#867\u003c/a\u003e) and fix assorted typos (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/904\"\u003e#904\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate documentation link for Pydantic settings by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/863\"\u003epydantic/pydantic-settings#863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/865\"\u003epydantic/pydantic-settings#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify environment variable helper descriptions by \u003ca href=\"https://github.com/vip892766gma\"\u003e\u003ccode\u003e@​vip892766gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003epydantic/pydantic-settings#867\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/870\"\u003epydantic/pydantic-settings#870\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/875\"\u003epydantic/pydantic-settings#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip list_secrets call when case_sensitive=True by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003epydantic/pydantic-settings#862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGoogleSecretManagerSettingsSource: read project_id from previous sources by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003epydantic/pydantic-settings#878\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f725ca187bee4212e9ef799eefa3cb25be788462\"\u003e\u003ccode\u003ef725ca1\u003c/code\u003e\u003c/a\u003e Prepare release 2.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/28f35c25fac5d61210d532c31a300d49c0b684a4\"\u003e\u003ccode\u003e28f35c2\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9056db049560897229f2603493753bae27b6479f\"\u003e\u003ccode\u003e9056db0\u003c/code\u003e\u003c/a\u003e test: move function-local imports to the top of test modules (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f077e3ab3d9492838c7ef9275a88c95134688095\"\u003e\u003ccode\u003ef077e3a\u003c/code\u003e\u003c/a\u003e fix: raise ValidationError for non-JSON env values on strict fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ae25d703c458b57f5a9a425f6ec9a28ad868f980\"\u003e\u003ccode\u003eae25d70\u003c/code\u003e\u003c/a\u003e fix: treat Secret subclasses as non-complex fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/716\"\u003e#716\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/920\"\u003e#920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/798dcea2a23b08a3e9b37994014e036224f6dd18\"\u003e\u003ccode\u003e798dcea\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/a190041d353bda2d432ea1908de4c499ae89ee0a\"\u003e\u003ccode\u003ea190041\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/925\"\u003e#925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/5d9333282b5c85d65a457c45e4476369b9949726\"\u003e\u003ccode\u003e5d93332\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/921\"\u003e#921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/d2fdeda91157140d2ff0c05404f32a9b1218115a\"\u003e\u003ccode\u003ed2fdeda\u003c/code\u003e\u003c/a\u003e fix: read secret files as UTF-8 instead of the locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/917\"\u003e#917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2256a4e60f83f2da81e7654252562fc4841aa5d4\"\u003e\u003ccode\u003e2256a4e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/915\"\u003e#915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.13.0 to 2.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.14.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst\"\u003e2.14.0 changelog\u003c/a\u003e for the complete release details and related security advisories.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.14.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Harden HMAC key validation against public-key material supplied as JWK,\n  JWKS, array, encoded, BOM-prefixed, DER, or PEM input. See\n  `GHSA-r6x4-923q-g947 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-r6x4-923q-g947\u0026gt;`__,\n  `GHSA-ffc3-869f-jxw9 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9\u0026gt;`__,\n  `GHSA-p4g4-x82p-q773 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773\u0026gt;`__,\n  and `GHSA-w2cx-738m-mc7w \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w2cx-738m-mc7w\u0026gt;`__.\n- Reject automatic redirects when ``PyJWKClient`` fetches a JWKS, preventing\n  redirected destinations from being treated as trusted key sources. See\n  `GHSA-9v7f-9g4p-ffgj \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj\u0026gt;`__.\n- Limit repeated JWKS refreshes caused by unknown key IDs while preserving\n  normal key-rotation behavior. See\n  `GHSA-2gx3-rcp4-g85q \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q\u0026gt;`__.\n- Handle deeply nested and malformed JWS/JWK input without uncaught recursion\n  errors or whole-set parsing failures. See\n  `GHSA-8wjv-2p76-3863 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863\u0026gt;`__\n  and `GHSA-w6j9-cwv2-h6wq \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w6j9-cwv2-h6wq\u0026gt;`__.\n- Enforce compact JWS encoding rules during decoding. See\n  `GHSA-hxm8-2xgr-2p9m \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m\u0026gt;`__.\n- Reject detached-payload arguments for attached JWS inputs. Thanks to `@xclow3n\n  \u0026lt;https://github.com/xclow3n\u0026gt;`__ for reporting this behavior; fixed in commit\n  `37b54877 \u0026lt;https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Apply HMAC key validation consistently when keys are loaded through\n  ``PyJWK`` and ``PyJWKClient``. See\n  `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n- Reject empty HMAC keys when represented as JWKs.\n  See `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/c6fe464b356ff4b1ebc9ba62172d331a40aa27df\u0026quot;\u0026gt;\u0026lt;code\u0026gt;c6fe464\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; release: prepare v2.14.0\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/f5413029ae7a2e31b1367b5303ea86a2f54ccf42\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f541302\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; style: apply Ruff formatting\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/801cd128528c62d9b23fcd161d1a2e1c17982f95\u0026quot;\u0026gt;\u0026lt;code\u0026gt;801cd12\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject public JWK container HMAC keys\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/af8181ca0bec5e6b372fbba9afbe23702b787ceb\u0026quot;\u0026gt;\u0026lt;code\u0026gt;af8181c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject empty HMAC keys from JWKs\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/ba4853a75fb9676362da17f67d0f64bd18afd4e1\u0026quot;\u0026gt;\u0026lt;code\u0026gt;ba4853a\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Throttle repeated PyJWKClient refreshes\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/2798504fa2663364573cf2d1043d8d7fef389499\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2798504\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject DER public keys as HMAC secrets\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/8b4e233a22206b34ec1186e912e75c0b2396ac07\u0026quot;\u0026gt;\u0026lt;code\u0026gt;8b4e233\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: reject loader-accepted PEM variants\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/1f8180a211256dfe5cf32294b6753f554a5a4258\u0026quot;\u0026gt;\u0026lt;code\u0026gt;1f8180a\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; fix: format JWS tests\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/cff1ac55fe5f1096fd05295b269fce053ee290ab\u0026quot;\u0026gt;\u0026lt;code\u0026gt;cff1ac5\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Fix redirect handler return annotation\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/commit/0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56\u0026quot;\u0026gt;\u0026lt;code\u0026gt;0a795b8\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Reject redirects in PyJWKClient fetches\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `python-dotenv` from 1.2.2 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.2...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.70.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.70.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew integration:\u003c/strong\u003e Mistral AI (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/4733\"\u003e#4733\u003c/a\u003e) by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdd the Mistral integration to your \u003ccode\u003esentry_sdk.init\u003c/code\u003e call:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\r\nfrom sentry_sdk.integrations.mistral import MistralIntegration\r\n\u003cp\u003esentry_sdk.init(\ndsn=\u0026quot;...\u0026quot;,\ntraces_sample_rate=1.0,\nintegrations=[\nMistralIntegration(),\n]\n)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew option:\u003c/strong\u003e A fine-grained way to configure what data should be sent from the SDK.\u003c/p\u003e\n\u003cp\u003eOffers much more flexibility than \u003ccode\u003esend_default_pii\u003c/code\u003e, allowing you to specify what\ndata should be collected. If \u003ccode\u003edata_collection\u003c/code\u003e is defined, it takes precedence over\n\u003ccode\u003esend_default_pii\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"https://docs.sentry.io/platforms/python/configuration/options/#data_collection\"\u003ehttps://docs.sentry.io/platforms/python/configuration/options/#data_collection\u003c/a\u003e\nfor the available configuration options.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\r\n\u003cp\u003esentry_sdk.init(\ndata_collection={\n\u0026quot;user_info\u0026quot;: False,\n\u0026quot;gen_ai\u0026quot;: {\u0026quot;inputs\u0026quot;: False, \u0026quot;outputs\u0026quot;: False},\n\u0026quot;graphql\u0026quot;: {\u0026quot;document\u0026quot;: False, \u0026quot;variables\u0026quot;: False},\n\u0026quot;database_query_data\u0026quot;: False,\n\u0026quot;queues\u0026quot;: False,\n\u0026quot;http_bodies\u0026quot;: [],\n\u0026quot;cookies\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n\u0026quot;http_headers\u0026quot;: {\n\u0026quot;request\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n},\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.70.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew integration:\u003c/strong\u003e Mistral AI (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/4733\"\u003e#4733\u003c/a\u003e) by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdd the Mistral integration to your \u003ccode\u003esentry_sdk.init\u003c/code\u003e call:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.mistral import MistralIntegration\n\u003cp\u003esentry_sdk.init(\ndsn=\u0026quot;...\u0026quot;,\ntraces_sample_rate=1.0,\nintegrations=[\nMistralIntegration(),\n]\n)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eNew option:\u003c/strong\u003e A fine-grained way to configure what data should be sent from the SDK.\u003c/p\u003e\n\u003cp\u003eOffers much more flexibility than \u003ccode\u003esend_default_pii\u003c/code\u003e, allowing you to specify what\ndata should be collected. If \u003ccode\u003edata_collection\u003c/code\u003e is defined, it takes precedence over\n\u003ccode\u003esend_default_pii\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"https://docs.sentry.io/platforms/python/configuration/options/#data_collection\"\u003ehttps://docs.sentry.io/platforms/python/configuration/options/#data_collection\u003c/a\u003e\nfor the available configuration options.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\n\u003cp\u003esentry_sdk.init(\ndata_collection={\n\u0026quot;user_info\u0026quot;: False,\n\u0026quot;gen_ai\u0026quot;: {\u0026quot;inputs\u0026quot;: False, \u0026quot;outputs\u0026quot;: False},\n\u0026quot;graphql\u0026quot;: {\u0026quot;document\u0026quot;: False, \u0026quot;variables\u0026quot;: False},\n\u0026quot;database_query_data\u0026quot;: False,\n\u0026quot;queues\u0026quot;: False,\n\u0026quot;http_bodies\u0026quot;: [],\n\u0026quot;cookies\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n\u0026quot;http_headers\u0026quot;: {\n\u0026quot;request\u0026quot;: {\n\u0026quot;mode\u0026quot;: \u0026quot;denylist\u0026quot;,\n\u0026quot;terms\u0026quot;: [\u0026quot;forwarded\u0026quot;, \u0026quot;-ip\u0026quot;, \u0026quot;remote-\u0026quot;, \u0026quot;via\u0026quot;, \u0026quot;-user\u0026quot;],\n},\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1eb7df52d9420ce7dc7ce38d0d02cc397540c890\"\u003e\u003ccode\u003e1eb7df5\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/92fd42bcd0c83d2ff95c48b1dc09b4efda6143b9\"\u003e\u003ccode\u003e92fd42b\u003c/code\u003e\u003c/a\u003e release: 2.70.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d99edef02fe7dca1dafe6aa2335a4c87833da8b4\"\u003e\u003ccode\u003ed99edef\u003c/code\u003e\u003c/a\u003e ref(data-collection): Promote \u003ccode\u003edata_collection\u003c/code\u003e from \u003ccode\u003e_experiments\u003c/code\u003e o top-lev...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/045d2c1c52dec953bbf6762968fb100f634e1baa\"\u003e\u003ccode\u003e045d2c1\u003c/code\u003e\u003c/a\u003e test: Close client on teardown (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7562\"\u003e#7562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/b454d7dfc301d2a4b472da527b31782fc8d036bb\"\u003e\u003ccode\u003eb454d7d\u003c/code\u003e\u003c/a\u003e feat(mistral): Record \u003ccode\u003egen_ai.output.messages\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7549\"\u003e#7549\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/bdfd68c8d8b21c61773398774c5d391d2fc7ae05\"\u003e\u003ccode\u003ebdfd68c\u003c/code\u003e\u003c/a\u003e feat(mistral): Record \u003ccode\u003egen_ai.input.messages\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7548\"\u003e#7548\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/ea08f64cfdcef03c5aa542364ff188cd95e301e5\"\u003e\u003ccode\u003eea08f64\u003c/code\u003e\u003c/a\u003e feat(mistral): Record \u003ccode\u003egen_ai.system_instructions\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7547\"\u003e#7547\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/dbddd0ebe69a21bfc87068113c354b0fc3181bf0\"\u003e\u003ccode\u003edbddd0e\u003c/code\u003e\u003c/a\u003e feat(mistral): Record request parameters (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7531\"\u003e#7531\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/9342968d78566e1a448b77184e976cc1d7d9d280\"\u003e\u003ccode\u003e9342968\u003c/code\u003e\u003c/a\u003e feat(mistral): Record token usage (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7529\"\u003e#7529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/988fd0e559a420dd9ace6cfaf001fd561e1c1876\"\u003e\u003ccode\u003e988fd0e\u003c/code\u003e\u003c/a\u003e feat(mistral): Add integration with \u003ccode\u003eChat.complete\u003c/code\u003e and \u003ccode\u003eChat.complete_async\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.70.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.51 to 2.0.54\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.54\u003c/h1\u003e\n\u003cp\u003eReleased: September 15, 2026\u003c/p\u003e\n\u003ch2\u003eplatform\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [change]\u003c/strong\u003e Binary wheels are no longer built for Python 3.7.  PyPI now rejects wheel\nfiles whose filename does not begin with the normalized project name, and\nthe packaging tools that can be installed on Python 3.7 do not produce\nsuch a filename.  As a result, SQLAlchemy 2.0.44 was the last release to\npublish Python 3.7 wheels to PyPI, and releases 2.0.45 and later have\nbeen available on Python 3.7 only as a source distribution; the wheel\nbuilds for Python 3.7 are now removed.  Python 3.7 remains supported by\nthe 2.0 series.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [bug]\u003c/strong\u003e Fixed issue where the Cython extensions were compiled without the\n\u003ccode\u003efreethreading_compatible\u003c/code\u003e directive, so that they did not declare\nthemselves as safe to run without the GIL.  On a free-threaded Python\ninterpreter such as Python 3.13t or 3.14t, importing SQLAlchemy would\ncause the interpreter to re-enable the GIL, emitting a\n\u003ccode\u003eRuntimeWarning\u003c/code\u003e.  The directive is now set when building for Python\n3.13 and above, and a test has been added which confirms that importing\nSQLAlchemy on a free-threaded build does not enable the GIL.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13592\"\u003e#13592\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.0.53\u003c/h1\u003e\n\u003cp\u003eReleased: September 14, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where an expression passed to \u003ccode\u003e_orm.with_expression()\u003c/code\u003e\nthat embedded a \u003ccode\u003e_sql.select()\u003c/code\u003e, such as a correlated\n\u003ccode\u003e_sql.exists()\u003c/code\u003e, would fail to populate the attribute correctly on\nthe second and subsequent executions of an otherwise identical\nstatement, when the \u003ccode\u003e_orm.query_expression()\u003c/code\u003e attribute was loaded\nby a relationship loader that emits a second query, i.e.\n\u003ccode\u003e_orm.selectinload()\u003c/code\u003e, \u003ccode\u003e_orm.lazyload()\u003c/code\u003e or\n\u003ccode\u003e_orm.immediateload()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13560\"\u003e#13560\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed memory issue where mapped classes, along with their\n\u003ccode\u003eTable\u003c/code\u003e and \u003ccode\u003e_orm.Mapper\u003c/code\u003e objects, would not be garbage\ncollected after the \u003ccode\u003e_orm.registry\u003c/code\u003e in which they were mapped had\nbeen disposed and dereferenced.  The issue would occur for mappings that\nmade use of \u003ccode\u003e_orm.relationship()\u003c/code\u003e together with constructs such as an\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.7.0 to 2.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.8.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eFixed the following security issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe TLS configuration for HTTPS proxies could be ignored or overridden. (High severity, GHSA-8988-9cw3-xx77)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eread_chunked()\u003c/code\u003e could buffer a chunk-size line of unbounded length in memory. (High severity, GHSA-vxq7-64xx-v4gw)\u003c/li\u003e\n\u003cli\u003eChunked Deflate streaming could enter an infinite loop. (Medium severity, GHSA-gh4c-6fx4-qh6g)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!IMPORTANT]\nurllib3 2.8.0 fixes HTTPS proxy TLS configuration being ignored or overridden by destination settings. Configurations relying on that behavior may require changes.\u003c/p\u003e\n\u003cp\u003eConfigure proxy CA certificates and c...\n\n_Description has been truncated_","html_url":"https://github.com/0xSoftBoi/suwappubot/pull/1016","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSoftBoi%2Fsuwappubot/issues/1016","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1016/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":"the uv group","pr_created_at":"2026-09-25T07:03:50.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5579444429","node_id":"PR_kwDOPSDfVc8AAAABFEcOHw","number":183,"state":"closed","title":"chore(deps): Bump cryptography from 50.0.0 to 50.0.1 in the uv group","user":"dependabot[bot]","labels":["dependencies","python:uv","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-25T07:12:09.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-25T07:03:50.000Z","updated_at":"2026-09-25T07:12:18.000Z","time_to_close":499,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":"the uv group","ecosystem":"pip"},"body":"Bumps the uv group with 1 update: [cryptography](https://github.com/pyca/cryptography).\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=uv\u0026previous-version=50.0.0\u0026new-version=50.0.1)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/eclipse-opensovd/opensovd-core/pull/183","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-opensovd%2Fopensovd-core/issues/183","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/183/packages"}},{"old_version":"46.0.5","new_version":"50.0.0","update_type":"major","path":"/crm/backend","pr_created_at":"2026-09-24T22:28:33.000Z","version_change":"46.0.5 → 50.0.0","issue":{"uuid":"5575355027","node_id":"PR_kwDORS3zvs8AAAABFBLZ_Q","number":255,"state":"open","title":"chore(deps): Bump cryptography from 46.0.5 to 50.0.0 in /crm/backend","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-24T22:28:33.000Z","updated_at":"2026-09-24T22:28:42.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":"/crm/backend","ecosystem":"pip"},"body":"Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5 to 50.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.5...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=pip\u0026previous-version=46.0.5\u0026new-version=50.0.0)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/Trollz1004/ANTIGRAVITY/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/Trollz1004/ANTIGRAVITY/pull/255","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trollz1004%2FANTIGRAVITY/issues/255","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/255/packages"}},{"old_version":"48.0.1","new_version":"50.0.0","update_type":"major","path":null,"pr_created_at":"2026-09-22T21:20:27.000Z","version_change":"48.0.1 → 50.0.0","issue":{"uuid":"5545389582","node_id":"PR_kwDOQfogds8AAAABEpk0uQ","number":521,"state":"open","title":"chore(deps): bump the pip group across 1 directory with 6 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-22T21:20:27.000Z","updated_at":"2026-09-22T21:22:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip","update_count":6,"packages":[{"name":"anyio","old_version":"4.12.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"cryptography","old_version":"48.0.1","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"h2","old_version":"4.3.0","new_version":"4.4.1","repository_url":"https://github.com/python-hyper/h2"},{"name":"nltk","old_version":"3.9.4","new_version":"3.10.3","repository_url":"https://github.com/nltk/nltk"},{"name":"pyasn1","old_version":"0.6.3","new_version":"0.6.4","repository_url":"https://github.com/pyasn1/pyasn1"},{"name":"setuptools","old_version":"80.9.0","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 6 updates in the /password_manager directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.0` | `4.14.2` |\n| [cryptography](https://github.com/pyca/cryptography) | `48.0.1` | `50.0.0` |\n| [h2](https://github.com/python-hyper/h2) | `4.3.0` | `4.4.1` |\n| [nltk](https://github.com/nltk/nltk) | `3.9.4` | `3.10.3` |\n| [pyasn1](https://github.com/pyasn1/pyasn1) | `0.6.3` | `0.6.4` |\n| [setuptools](https://github.com/pypa/setuptools) | `80.9.0` | `83.0.0` |\n\n\nUpdates `anyio` from 4.12.0 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for Python 3.15\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an asynchronous implementation of the \u003ccode\u003eitertools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/998\"\u003e#998\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003elocal_port\u003c/code\u003e parameter to \u003ccode\u003econnect_tcp()\u003c/code\u003e to allow binding to a specific local port before connecting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1067\"\u003e#1067\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nullwiz\"\u003e\u003ccode\u003e@​nullwiz\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for custom capacity limiters in async path and file I/O functions and classes\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecreate_task()\u003c/code\u003e task group method for easier asyncio migration (returns a \u003ccode\u003eTaskHandle\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1098\"\u003e#1098\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an option for \u003ccode\u003eTaskGroup.start()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e (which then contains the start value in the \u003ccode\u003estart_value\u003c/code\u003e property)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecancel()\u003c/code\u003e convenience method to \u003ccode\u003eTaskGroup\u003c/code\u003e as a shortcut for cancelling the task group's cancel scope\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved the error message when a known backend is not installed to suggest the install command (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1115\"\u003e#1115\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eanyio.Path\u003c/code\u003e to preserve subclass types by returning \u003ccode\u003eSelf\u003c/code\u003e in methods that return path objects (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1130\"\u003e#1130\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the parameter type annotation in \u003ccode\u003eanyio.Path.write_bytes()\u003c/code\u003e to accept any \u003ccode\u003eReadableBuffer\u003c/code\u003e, thus allowing it to accept \u003ccode\u003ebytearray\u003c/code\u003e and \u003ccode\u003ememoryview\u003c/code\u003e to match \u003ccode\u003epathlib.Path.write_bytes()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1135\"\u003e#1135\u003c/a\u003e; PR by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several type annotations to only accept callables returning coroutine-like objects instead of arbitrary awaitables:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis reverts an earlier change from v3.7.0 which was made in error. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1153\"\u003e#1153\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eanyio.run\u003c/code\u003e to support callables returning arbitrary awaitables at runtime on all backends. Previously, this only worked on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1171\"\u003e#1171\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several classes (and their subclasses) to have \u003ccode\u003e__slots__\u003c/code\u003e (with \u003ccode\u003e__weakref__\u003c/code\u003e):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eanyio.CancelScope\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.12.0...4.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 48.0.1 to 50.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/48.0.1...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `h2` from 4.3.0 to 4.4.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-hyper/h2/blob/master/CHANGELOG.rst\"\u003eh2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.4.1 (2026-08-03)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance improvement: remove consumed frames in-place from data buffer.\u003c/li\u003e\n\u003cli\u003eReject duplicate Host headers in request headers. Thanks to Sunand Mohan for the report.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.4.0 (2026-07-23)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Incompatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 has been removed.\u003c/li\u003e\n\u003cli\u003eSupport for PyPy 3.9 has been removed.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStream.end_stream()\u003c/code\u003e now raises \u003ccode\u003eNoSuchStreamError\u003c/code\u003e or \u003ccode\u003eStreamClosedError\u003c/code\u003e exceptions, instead of a generic \u003ccode\u003eKeyError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDuplicate \u003ccode\u003econtent-length\u003c/code\u003e headers with different values now raise \u003ccode\u003eProtocolError\u003c/code\u003e.\nPreviously, the first \u003ccode\u003econtent-length\u003c/code\u003e header was accepted and later conflicting values were ignored. Thanks to Harshal Parekh for the report.\u003c/li\u003e\n\u003cli\u003eParse \u003ccode\u003econtent-length\u003c/code\u003e headers according to RFC9110 grammar for numbers (1*DIGIT). Thanks to Arkadiusz Marta for the report.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebackfill from v4.3.0\u003c/strong\u003e Convert emitted events into Python \u003ccode\u003edataclass\u003c/code\u003e, which introduces new constructors with required arguments.\nInstantiating these events without arguments, as previously commonly used API pattern, will no longer work.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Compatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 has been added.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH2Connection.receive_data\u003c/code\u003e now accepts any byte-like object that\nimplements the buffer protocol, such as \u003ccode\u003ebytes\u003c/code\u003e, \u003ccode\u003ebytearray\u003c/code\u003e, and\n\u003ccode\u003ememoryview\u003c/code\u003e. Existing \u003ccode\u003ebytes\u003c/code\u003e callers are unaffected.\u003c/li\u003e\n\u003cli\u003eAlign CONNECT pseudo-header validation with RFC 9113 s8.3 and RFC 8441 s4.\nOrdinary CONNECT now requires \u003ccode\u003e:method=CONNECT\u003c/code\u003e and \u003ccode\u003e:authority\u003c/code\u003e, and\nforbids \u003ccode\u003e:scheme\u003c/code\u003e/\u003ccode\u003e:path\u003c/code\u003e. Extended CONNECT (e.g., WebSocket) requires\n\u003ccode\u003e:scheme\u003c/code\u003e, \u003ccode\u003e:path\u003c/code\u003e, \u003ccode\u003e:authority\u003c/code\u003e plus \u003ccode\u003e:protocol\u003c/code\u003e. (PR \u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incorrect substring matching of secure header in \u003ccode\u003ecookie\u003c/code\u003e and \u003ccode\u003e:method\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix to allow sending 0 bytes on a stream even if the flow control window is negative.\u003c/li\u003e\n\u003cli\u003eReject non-zero \u003ccode\u003eSETTINGS_ENABLE_PUSH\u003c/code\u003e values received from servers.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/bc239af1d1b85bc70482804f30a0e0e587d90a08\"\u003e\u003ccode\u003ebc239af\u003c/code\u003e\u003c/a\u003e v4.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/92b925ed1b1817c82db32893503f74f47fcf4452\"\u003e\u003ccode\u003e92b925e\u003c/code\u003e\u003c/a\u003e add test for duplicate host headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/292a40829feefda98c8509dcdbbb4a57af9bd6a6\"\u003e\u003ccode\u003e292a408\u003c/code\u003e\u003c/a\u003e reject duplicate Host headers in request headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/04d3b87cbc1db020d28c7cfb44fe194558efbdde\"\u003e\u003ccode\u003e04d3b87\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/439b970d0fa19891fa81068907de97dfa3a07c3a\"\u003e\u003ccode\u003e439b970\u003c/code\u003e\u003c/a\u003e prepare for next release cycle\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/9a7ff7430df669fa8e90b6121f3cc1ed64d1115a\"\u003e\u003ccode\u003e9a7ff74\u003c/code\u003e\u003c/a\u003e performance: remove consumed frames in place from data buffer (\u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1321\"\u003e#1321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/6cce763997eca5b826f3e435a611b7a7fc73f633\"\u003e\u003ccode\u003e6cce763\u003c/code\u003e\u003c/a\u003e v4.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/dfafda3b0cd96455b45d1785ef1ebc6968bba5cf\"\u003e\u003ccode\u003edfafda3\u003c/code\u003e\u003c/a\u003e Bump pytest from 8.4.2 to 9.0.3 (\u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1320\"\u003e#1320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/b45207cedf9fabe2c77bb3c1c10f403a610599a0\"\u003e\u003ccode\u003eb45207c\u003c/code\u003e\u003c/a\u003e dependencies and packaging++\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/c40145f69c5473850849fe96301ac0416b1afea6\"\u003e\u003ccode\u003ec40145f\u003c/code\u003e\u003c/a\u003e parse \u003ccode\u003econtent-length\u003c/code\u003e headers according to RFC9110 grammar for numbers (1*DI...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-hyper/h2/compare/v4.3.0...v4.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nltk` from 3.9.4 to 3.10.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nltk/nltk/releases\"\u003enltk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.10.3\u003c/h2\u003e\n\u003cp\u003eVersion 3.10.3 2026-08-12\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output\u003c/li\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories\u003c/li\u003e\n\u003cli\u003eHarden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + shared-temp squat, lock the cluster with a living audit (CWE-22/59/377)\u003c/li\u003e\n\u003cli\u003eExtend algorithmic-complexity DoS hardening: repo-wide sweep + two-string distances (CWE-407/CWE-400)\u003c/li\u003e\n\u003cli\u003eBound unbounded-work DoS in parsers and grammar transforms (CWE-407/674/835)\u003c/li\u003e\n\u003cli\u003efix(security): sandbox MaltParser's Java execution (CVE-2026-12252, CVE-2026-12841)\u003c/li\u003e\n\u003cli\u003efix(security): trust the system temp dir only when it is private (CWE-377/CWE-378)\u003c/li\u003e\n\u003cli\u003efix(security): validate corpus-reader roots against the data sandbox (CWE-73)\u003c/li\u003e\n\u003cli\u003efix(security): validate per-call java() options and replace the -XX:/-D allowlist with a minimal one (CWE-88)\u003c/li\u003e\n\u003cli\u003eAdditional security hardening (CWE-407, CWE-426, CWE-427, CWE-502, CWE-59, CWE-776, CWE-918)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.3: Mohammad Favas S, leduckhuong, Ziyu Lin, dougtrainer28-cmyk, Chaitanya Kadian, 0xRenSec, Arpit Jain, Jace, nguyencanhthuong, Liling Tan, medimedi, Eric Kafe.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories by \u003ca href=\"https://github.com/ekaf\"\u003e\u003ccode\u003e@​ekaf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3743\"\u003enltk/nltk#3743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output by \u003ca href=\"https://github.com/medisean\"\u003e\u003ccode\u003e@​medisean\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3741\"\u003enltk/nltk#3741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: sandboxed-open guard + stabilize security tests across platforms/pythons (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3740\"\u003e#3740\u003c/a\u003e) by \u003ca href=\"https://github.com/alvations\"\u003e\u003ccode\u003e@​alvations\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3744\"\u003enltk/nltk#3744\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 3.10.3 by \u003ca href=\"https://github.com/ekaf\"\u003e\u003ccode\u003e@​ekaf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3745\"\u003enltk/nltk#3745\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/medisean\"\u003e\u003ccode\u003e@​medisean\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3741\"\u003enltk/nltk#3741\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/nltk/nltk/compare/v3.10.2...v3.10.3\"\u003ehttps://github.com/nltk/nltk/compare/v3.10.2...v3.10.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev3.10.3-rc1\u003c/h2\u003e\n\u003cp\u003eVersion 3.10.3 2026-08-12\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output\u003c/li\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories\u003c/li\u003e\n\u003cli\u003eHarden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + shared-temp squat, lock the cluster with a living audit (CWE-22/59/377)\u003c/li\u003e\n\u003cli\u003eExtend algorithmic-complexity DoS hardening: repo-wide sweep + two-string distances (CWE-407/CWE-400)\u003c/li\u003e\n\u003cli\u003eBound unbounded-work DoS in parsers and grammar transforms (CWE-407/674/835)\u003c/li\u003e\n\u003cli\u003efix(security): sandbox MaltParser's Java execution (CVE-2026-12252, CVE-2026-12841)\u003c/li\u003e\n\u003cli\u003efix(security): trust the system temp dir only when it is private (CWE-377/CWE-378)\u003c/li\u003e\n\u003cli\u003efix(security): validate corpus-reader roots against the data sandbox (CWE-73)\u003c/li\u003e\n\u003cli\u003efix(security): validate per-call java() options and replace the -XX:/-D allowlist with a minimal one (CWE-88)\u003c/li\u003e\n\u003cli\u003eAdditional security hardening (CWE-407, CWE-426, CWE-427, CWE-502, CWE-59, CWE-776, CWE-918)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.3: Mohammad Favas S, leduckhuong, Ziyu Lin, dougtrainer28-cmyk, Chaitanya Kadian, 0xRenSec, Arpit Jain, Jace, nguyencanhthuong, Liling Tan, medimedi, Eric Kafe.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories by \u003ca href=\"https://github.com/ekaf\"\u003e\u003ccode\u003e@​ekaf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3743\"\u003enltk/nltk#3743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output by \u003ca href=\"https://github.com/medisean\"\u003e\u003ccode\u003e@​medisean\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/nltk/nltk/pull/3741\"\u003enltk/nltk#3741\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nltk/nltk/blob/develop/ChangeLog\"\u003enltk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 3.10.3 2026-08-12\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: wrap Chat-80 HOWTO output\u003c/li\u003e\n\u003cli\u003eSandbox Stanford JAR execution to nltk_data directories\u003c/li\u003e\n\u003cli\u003eHarden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + shared-temp squat, lock the cluster with a living audit (CWE-22/59/377)\u003c/li\u003e\n\u003cli\u003eExtend algorithmic-complexity DoS hardening: repo-wide sweep + two-string distances (CWE-407/CWE-400)\u003c/li\u003e\n\u003cli\u003eBound unbounded-work DoS in parsers and grammar transforms (CWE-407/674/835)\u003c/li\u003e\n\u003cli\u003efix(security): sandbox MaltParser's Java execution (CVE-2026-12252, CVE-2026-12841)\u003c/li\u003e\n\u003cli\u003efix(security): trust the system temp dir only when it is private (CWE-377/CWE-378)\u003c/li\u003e\n\u003cli\u003efix(security): validate corpus-reader roots against the data sandbox (CWE-73)\u003c/li\u003e\n\u003cli\u003efix(security): validate per-call java() options and replace the -XX:/-D allowlist with a minimal one (CWE-88)\u003c/li\u003e\n\u003cli\u003eAdditional security hardening (CWE-407, CWE-426, CWE-427, CWE-502, CWE-59, CWE-776, CWE-918)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.3: Mohammad Favas S, leduckhuong, Ziyu Lin, dougtrainer28-cmyk, Chaitanya Kadian, 0xRenSec, Arpit Jain, Jace, nguyencanhthuong, Liling Tan, medimedi, Eric Kafe.\u003c/p\u003e\n\u003cp\u003eVersion 3.10.2 2026-08-05\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemove inisec.py and document PYTHONSAFEPATH instead\u003c/li\u003e\n\u003cli\u003eSkip draft step in release workflow\u003c/li\u003e\n\u003cli\u003eFix symlink escape in FramenetCorpusReader (CWE-59)\u003c/li\u003e\n\u003cli\u003eGuard tempfile.gettempdir() when building pathsec allowed roots\u003c/li\u003e\n\u003cli\u003eadd tests for transitive_closure\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.2:\nLitesh Ghute, Eric Kafe, Evan Kiefer, tarann26 and Rav Singh Chandan\u003c/p\u003e\n\u003cp\u003eVersion 3.10.1 2026-07-29\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eExpand \u003ccode\u003e~\u003c/code\u003e in env-var paths\u003c/li\u003e\n\u003cli\u003eValidate types after WordNet app pickle deserialization\u003c/li\u003e\n\u003cli\u003eFix uncontrolled search path in HunposTagger\u003c/li\u003e\n\u003cli\u003eUse exact thirds in \u003ccode\u003emasi_distance\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAvoid retaining bllip import exceptions\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eword_tokenize\u003c/code\u003e: pad opening single quote before multi-letter words.\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003eTree.pformat_latex_forest\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePrevent module hijacking in inline imports.\u003c/li\u003e\n\u003cli\u003eFix ReDoS in TweetTokenizer URL and email regexes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.10.1:\nAbhinav, Litesh Ghute, Eric Kafe, Eryk Kaźmierczak, Selim C.,\nMuhtasim Munif Fahim, Triniti K., and Tom Y. Mitich.\u003c/p\u003e\n\u003cp\u003eVersion 3.10.0 2026-06-11\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce the stricter \u003ccode\u003enltk.pathsec\u003c/code\u003e security policy by default\u003c/li\u003e\n\u003cli\u003eDocument the new security model and migration guidance\u003c/li\u003e\n\u003cli\u003eHarden resource loading against path traversal and SSRF/DNS-rebinding\u003c/li\u003e\n\u003cli\u003eHarden downloader path handling and block XML entity expansion\u003c/li\u003e\n\u003cli\u003eClose remaining corpus-reader security edge cases\u003c/li\u003e\n\u003cli\u003eReplace unsafe \u003ccode\u003eexec()\u003c/code\u003e usage in the utility CLI\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/303f6e2ba8e4548a5f54fd65d86bb5c9a949f1db\"\u003e\u003ccode\u003e303f6e2\u003c/code\u003e\u003c/a\u003e Prepare release 3.10.3 (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3745\"\u003e#3745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/cf2aaacc3d99533a73e86709c1d839966ea25e17\"\u003e\u003ccode\u003ecf2aaac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3744\"\u003e#3744\u003c/a\u003e from alvations/ci-guard-open\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/6cd8320cee54d4fc271610e744f71d44cb367dda\"\u003e\u003ccode\u003e6cd8320\u003c/code\u003e\u003c/a\u003e test: robustness on Python 3.14 / 3.14t CI (UnicodeDecodeError + timing flake)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/e965330e017d8180843c4a12b91bcfadd5d4e489\"\u003e\u003ccode\u003ee965330\u003c/code\u003e\u003c/a\u003e fix: perceptron save_to_json breaks on Windows (os.open can't fd-open a direc...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/df1bb4c5742c8943205e4564a7c03e1992cf4f4d\"\u003e\u003ccode\u003edf1bb4c\u003c/code\u003e\u003c/a\u003e test: make pathsec security tests platform-independent (fix Linux/Windows CI)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/0e5c7be3793cf826039a2048846138e58f864553\"\u003e\u003ccode\u003e0e5c7be\u003c/code\u003e\u003c/a\u003e ci: guard against un-sandboxed open() in sandbox-sensitive modules (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3740\"\u003e#3740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/50178263a0787a7850e66f3e85775338669f101a\"\u003e\u003ccode\u003e5017826\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/40d0f062649022f7f36afed4a2ca3980f574aae9\"\u003e\u003ccode\u003e40d0f06\u003c/code\u003e\u003c/a\u003e Triple-check hardening: perceptron TOCTOU squat, pathsec fd-leak, bcp47 entit...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/483c5fe650542ceaa2b45e8565f72e878834376f\"\u003e\u003ccode\u003e483c5fe\u003c/code\u003e\u003c/a\u003e Harden path-traversal / file-I/O sandbox: close write-side symlink TOCTOU + s...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/722778fd9ff987da3cf5ff6e442ac43fed1637b0\"\u003e\u003ccode\u003e722778f\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nltk/nltk/compare/3.9.4...v3.10.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyasn1` from 0.6.3 to 0.6.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyasn1/pyasn1/releases\"\u003epyasn1's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 0.6.4\u003c/h2\u003e\n\u003cp\u003eThis is a security release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-59885 (GHSA-8ppf-4f7h-5ppj): Fixed quadratic time complexity in the OBJECT IDENTIFIER and RELATIVE-OID decoders. A small crafted substrate encoding many arcs could consume excessive CPU.\u003c/li\u003e\n\u003cli\u003eCVE-2026-59884 (GHSA-m4p7-r5rc-7g4j): Limited BER long-form tag IDs to 20 octets (140 bits). Unbounded tag IDs allowed a crafted substrate to consume excessive CPU and memory.\u003c/li\u003e\n\u003cli\u003eCVE-2026-59886 (GHSA-hm4w-wwcw-mr6r): Fixed excessive memory and CPU consumption in \u003ccode\u003eReal.__float__()\u003c/code\u003e for values with large base-10 exponents.\u003c/li\u003e\n\u003cli\u003ePinned PyPI publish GitHub Action to an immutable commit.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAll changes are noted in the \u003ca href=\"https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst\"\u003eCHANGELOG\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst\"\u003epyasn1's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRevision 0.6.4, released 08-07-2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-59885 (GHSA-8ppf-4f7h-5ppj): Fixed quadratic time\ncomplexity in the OBJECT IDENTIFIER and RELATIVE-OID decoders.\nA small crafted substrate encoding many arcs could consume\nexcessive CPU. Arcs are now accumulated in linear time; decoded\nvalues are unchanged (thanks for reporting, tynus2)\u003c/li\u003e\n\u003cli\u003eCVE-2026-59884 (GHSA-m4p7-r5rc-7g4j): Limited BER long-form tag\nIDs to 20 octets (140 bits), matching the OID arc limit introduced\nin 0.6.2. Unbounded tag IDs allowed a crafted substrate to consume\nexcessive CPU and memory; longer tag IDs are now rejected with\nPyAsn1Error. Also fixed Tag and TagSet repr() failing on huge tag\n(thanks for reporting, mikeappsec)\nIDs due to the integer-to-string conversion limit (Python 3.11+)\u003c/li\u003e\n\u003cli\u003eCVE-2026-59886 (GHSA-hm4w-wwcw-mr6r): Fixed excessive memory and\nCPU consumption in Real.\u003cstrong\u003efloat\u003c/strong\u003e() for values with large base-10\nexponents. Conversion no longer materializes huge intermediate\nintegers; values too large to represent as a Python float raise\nOverflowError promptly, and prettyPrint() renders them as\n'\u003c!-- raw HTML omitted --\u003e' as before. Also fixed base-10 mantissa normalization\nto use exact integer arithmetic; mantissas larger than 2**53\ncould previously lose precision through float division\n(thanks for reporting, gvozdila)\u003c/li\u003e\n\u003cli\u003ePinned PyPI publish GitHub Action to an immutable commit\n[pr \u003ca href=\"https://redirect.github.com/pyasn1/pyasn1/issues/113\"\u003e#113\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/pyasn1/pyasn1/pull/113\"\u003epyasn1/pyasn1#113\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/72e4803405816c371ed3b2cb4be181c47f038406\"\u003e\u003ccode\u003e72e4803\u003c/code\u003e\u003c/a\u003e Prepare release 0.6.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/0c19eeb853731db1c717ff125ea001a1e558332d\"\u003e\u003ccode\u003e0c19eeb\u003c/code\u003e\u003c/a\u003e Pin PyPI publish action to immutable commit (\u003ca href=\"https://redirect.github.com/pyasn1/pyasn1/issues/113\"\u003e#113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/45bdb19eb7df4b3780fe9c912c63e99bffc39dd9\"\u003e\u003ccode\u003e45bdb19\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/628e36ecbb5277a3f01572ce418ef54271b165a5\"\u003e\u003ccode\u003e628e36e\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyasn1/pyasn1/commit/e60c691cb91addb8fcefa2f537e85ede6fb1e886\"\u003e\u003ccode\u003ee60c691\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyasn1/pyasn1/compare/v0.6.3...v0.6.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `setuptools` from 80.9.0 to 83.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev83.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.10 or later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eMANIFEST.in\u003c/code\u003e matching (via \u003ccode\u003eFileList\u003c/code\u003e) is now insensitive to Unicode\nnormalization form. A pattern authored in one form (e.g. NFC, as typically\nsaved by editors) now matches a file whose name is stored on disk in another\n(e.g. NFD, as produced by macOS APFS/HFS+). Previously an \u003ccode\u003eexclude\u003c/code\u003e,\n\u003ccode\u003eglobal-exclude\u003c/code\u003e, \u003ccode\u003erecursive-exclude\u003c/code\u003e, or \u003ccode\u003eprune\u003c/code\u003e rule could silently\nfail to drop a non-ASCII-named file from the source distribution, publishing\nit despite the exclusion -- see GHSA-h35f-9h28-mq5c.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epypa/distutils#334\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev82.0.1\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the loading of \u003ccode\u003elauncher manifest.xml\u003c/code\u003e file. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5047\"\u003e#5047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplaced deprecated \u003ccode\u003ejson.__version__\u003c/code\u003e with fixture in tests. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5186\"\u003e#5186\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd advice about how to improve predictability when installing sdists. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5168\"\u003e#5168\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4941\"\u003e#4941\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ev82.0.0\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/6519f728c6f23c992df81a5691ef7655184a20eb\"\u003e\u003ccode\u003e6519f72\u003c/code\u003e\u003c/a\u003e Bump version: 82.0.1 → 83.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/d1151b125b29a6ee1c7db860f7ee6c365d525b5f\"\u003e\u003ccode\u003ed1151b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5250\"\u003e#5250\u003c/a\u003e from pypa/feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2df31e6a741b0fe775969618fe6a3a3d032e900\"\u003e\u003ccode\u003ea2df31e\u003c/code\u003e\u003c/a\u003e Capture removal of dry_run parameter in changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/00144dc3fb6d023fd81cdc26c380a012b084df9b\"\u003e\u003ccode\u003e00144dc\u003c/code\u003e\u003c/a\u003e Moved newsfragment to the release where it occurred.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a4a5a2b160357be77626aa077ddd1d8ee53be50f\"\u003e\u003ccode\u003ea4a5a2b\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/77470c23c35031c9e37d7512694ac5ca52bfcaac\"\u003e\u003ccode\u003e77470c2\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/pypa/distutils\"\u003ehttps://github.com/pypa/distutils\u003c/a\u003e into feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/3c43897420f25a1be1afe6eaa905d056009cc736\"\u003e\u003ccode\u003e3c43897\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5247\"\u003e#5247\u003c/a\u003e from pypa/copilot/fix-pypy-version-issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/bb6ea66b4bd01cb35d7c68a1bc61b96d59190269\"\u003e\u003ccode\u003ebb6ea66\u003c/code\u003e\u003c/a\u003e Bump PyPy from 3.10 to 3.11 in CI workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2bc3aca2f55eb9b93ea633e58ba68170ce14451\"\u003e\u003ccode\u003ea2bc3ac\u003c/code\u003e\u003c/a\u003e Fix broken intersphinx reference to build's installation docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/2d6a739c64cfedc65e1f635af7b52340aac8d99b\"\u003e\u003ccode\u003e2d6a739\u003c/code\u003e\u003c/a\u003e Use stacked parametrize decorators instead of itertools.product\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/setuptools/compare/v80.9.0...v83.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/Rajarshi1-source/Modern_Password_Manager01/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/Rajarshi1-source/Modern_Password_Manager01/pull/521","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rajarshi1-source%2FModern_Password_Manager01/issues/521","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/521/packages"}},{"old_version":"46.0.5","new_version":"50.0.1","update_type":"major","path":null,"pr_created_at":"2026-09-22T06:23:30.000Z","version_change":"46.0.5 → 50.0.1","issue":{"uuid":"5536027477","node_id":"PR_kwDONC03Hc8AAAABEiBuuw","number":4260,"state":"open","title":"build(deps): bump the python group with 85 updates","user":"dependabot[bot]","labels":["backport:skip","dependencies","python:uv","first-time-contributor"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-22T06:23:30.000Z","updated_at":"2026-09-22T06:33:34.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":85,"packages":[{"name":"pin-pink","old_version":"4.3.0","new_version":"4.4.0","repository_url":"https://github.com/stephane-caron/pink"},{"name":"reactivex","old_version":"4.1.0","new_version":"5.1.0","repository_url":"https://github.com/ReactiveX/RxPY"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"packaging","old_version":"25.0","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"filelock","old_version":"3.23.0","new_version":"3.32.6","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"plum-dispatch","old_version":"2.5.7","new_version":"2.10.1","repository_url":"https://github.com/beartype/plum"},{"name":"gitpython","old_version":"3.1.52","new_version":"3.1.62","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"opencv-contrib-python","old_version":"4.13.0.92","new_version":"5.0.0.93","repository_url":"https://github.com/opencv/opencv-python"},{"name":"pydantic-settings","old_version":"2.12.0","new_version":"2.15.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"textual","old_version":"3.7.1","new_version":"8.2.8","repository_url":"https://github.com/Textualize/textual"},{"name":"terminaltexteffects","old_version":"0.12.2","new_version":"0.15.0","repository_url":"https://github.com/ChrisBuilds/terminaltexteffects"},{"name":"typer","old_version":"0.23.1","new_version":"0.27.2","repository_url":"https://github.com/fastapi/typer"},{"name":"ipython","old_version":"8.38.0","new_version":"8.39.0","repository_url":"https://github.com/ipython/ipython"},{"name":"plotext","old_version":"5.3.2","new_version":"6.1.0","repository_url":"https://github.com/piccolomo/plotext"},{"name":"numba","old_version":"0.63.1","new_version":"0.67.0","repository_url":"https://github.com/numba/numba"},{"name":"llvmlite","old_version":"0.46.0","new_version":"0.49.0","repository_url":"https://github.com/numba/llvmlite"},{"name":"rerun-sdk","old_version":"0.32.0","new_version":"0.37.2","repository_url":"https://github.com/rerun-io/rerun"},{"name":"protobuf","old_version":"6.33.5","new_version":"7.36.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"websocket-client","old_version":"1.9.0","new_version":"1.9.2","repository_url":"https://github.com/websocket-client/websocket-client"},{"name":"ipykernel","old_version":"7.2.0","new_version":"7.3.0","repository_url":"https://github.com/ipython/ipykernel"},{"name":"open-clip-torch","old_version":"3.2.0","new_version":"3.3.0","repository_url":"https://github.com/mlfoundations/open_clip"},{"name":"gdown","old_version":"6.0.0","new_version":"6.2.0","repository_url":"https://github.com/wkentaro/gdown"},{"name":"tensorboard","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/tensorflow/tensorboard"},{"name":"portal","old_version":"3.7.4","new_version":"3.8.1","repository_url":"https://github.com/danijar/portal"},{"name":"bosdyn-client","old_version":"5.1.4","new_version":"5.2.0","repository_url":"https://github.com/boston-dynamics/spot-sdk"},{"name":"bosdyn-api","old_version":"5.1.4","new_version":"5.2.0","repository_url":"https://github.com/boston-dynamics/spot-sdk"},{"name":"bosdyn-core","old_version":"5.1.4","new_version":"5.2.0","repository_url":"https://github.com/boston-dynamics/spot-sdk"},{"name":"pyarrow","old_version":"23.0.0","new_version":"25.0.1","repository_url":"https://github.com/apache/arrow"},{"name":"langchain-core","old_version":"1.3.3","new_version":"1.6.3","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-openai","old_version":"1.1.6","new_version":"1.6.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-huggingface","old_version":"1.2.0","new_version":"1.2.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-ollama","old_version":"1.0.1","new_version":"1.1.0","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"openai","old_version":"2.21.0","new_version":"3.14.0","repository_url":"https://github.com/openai/openai-python"},{"name":"sounddevice","old_version":"0.5.5","new_version":"0.5.6","repository_url":"https://github.com/spatialaudio/python-sounddevice"},{"name":"fastapi","old_version":"0.129.0","new_version":"0.141.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"python-socketio","old_version":"5.16.1","new_version":"5.17.0","repository_url":"https://github.com/sponsors/miguelgrinberg"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"sse-starlette","old_version":"3.2.0","new_version":"3.4.11","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"uvicorn","old_version":"0.40.0","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"soundfile","old_version":"0.13.1","new_version":"0.14.0","repository_url":"https://github.com/bastibe/python-soundfile"},{"name":"timm","old_version":"1.0.24","new_version":"1.0.29","repository_url":"https://github.com/huggingface/pytorch-image-models"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"lap","old_version":"0.5.12","new_version":"0.5.13","repository_url":"https://github.com/gatagat/lap"},{"name":"transformers","old_version":"4.53.3","new_version":"5.17.0"},{"name":"moondream","old_version":"0.2.0","new_version":"2.3.0","repository_url":"https://github.com/vikhyat/moondream"},{"name":"omegaconf","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/omry/omegaconf"},{"name":"hydra-core","old_version":"1.3.2","new_version":"1.3.7","repository_url":"https://github.com/facebookresearch/hydra"},{"name":"unitree-webrtc-connect","old_version":"2.1.2","new_version":"2.2.0","repository_url":"https://github.com/legion1581/unitree_webrtc_connect"},{"name":"cyclonedds","old_version":"0.10.5","new_version":"11.0.1","repository_url":"https://github.com/eclipse-cyclonedds/cyclonedds-python"},{"name":"mcap","old_version":"1.3.1","new_version":"1.4.0","repository_url":"https://github.com/foxglove/mcap"},{"name":"piper-sdk","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/agilexrobotics/piper_sdk"},{"name":"xarm-python-sdk","old_version":"1.17.3","new_version":"1.18.4","repository_url":"https://github.com/xArm-Developer/xArm-Python-SDK"},{"name":"roboplan","old_version":"0.6.0","new_version":"0.6.1","repository_url":"https://github.com/open-planning/roboplan"},{"name":"matplotlib","old_version":"3.10.8","new_version":"3.10.9","repository_url":"https://github.com/matplotlib/matplotlib"},{"name":"cupy-cuda12x","old_version":"13.6.0","new_version":"14.2.0","repository_url":"https://github.com/cupy/cupy"},{"name":"mujoco","old_version":"3.10.0","new_version":"3.13.0","repository_url":"https://github.com/google-deepmind/mujoco"},{"name":"gtsam-extended","old_version":"4.3a1.post1","new_version":"4.3a2.post202608240418"},{"name":"aiortc","old_version":"1.14.0","new_version":"1.15.0","repository_url":"https://github.com/aiortc/aiortc"},{"name":"aiohttp","old_version":"3.14.1","new_version":"3.14.3","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"reportlab","old_version":"4.5.0","new_version":"5.0.1"},{"name":"manifold3d","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/elalish/manifold"},{"name":"coacd","old_version":"1.0.11","new_version":"1.0.14","repository_url":"https://github.com/SarahWeiii/CoACD"},{"name":"usd-core","old_version":"26.5","new_version":"26.8","repository_url":"https://github.com/PixarAnimationStudios/OpenUSD"},{"name":"ruff","old_version":"0.14.3","new_version":"0.16.7","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest","old_version":"8.3.5","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-mock","old_version":"3.15.0","new_version":"3.15.1","repository_url":"https://github.com/pytest-dev/pytest-mock"},{"name":"pytest-env","old_version":"1.1.5","new_version":"1.7.1","repository_url":"https://github.com/pytest-dev/pytest-env"},{"name":"pytest-rerunfailures","old_version":"16.4","new_version":"16.6.1","repository_url":"https://github.com/pytest-dev/pytest-rerunfailures"},{"name":"coverage","old_version":"7.13.4","new_version":"7.16.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"pre-commit","old_version":"4.2.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"py-spy","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/benfred/py-spy"},{"name":"maturin","old_version":"1.13.3","new_version":"1.15.0","repository_url":"https://github.com/pyo3/maturin"},{"name":"python-lsp-server","old_version":"1.14.0","new_version":"1.15.0"},{"name":"python-lsp-ruff","old_version":"2.3.0","new_version":"2.3.4","repository_url":"https://github.com/python-lsp/python-lsp-ruff"},{"name":"playwright","old_version":"1.61.0","new_version":"1.62.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"mypy","old_version":"1.19.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"types-pyyaml","old_version":"6.0.12.20250915","new_version":"6.0.12.20260906","repository_url":"https://github.com/python/typeshed"},{"name":"types-reportlab","old_version":"4.5.0.20260509","new_version":"5.0.0.20260911","repository_url":"https://github.com/python/typeshed"},{"name":"types-requests","old_version":"2.32.4.20260107","new_version":"2.33.0.20260906","repository_url":"https://github.com/python/typeshed"},{"name":"pybind11","old_version":"3.0.4","new_version":"3.1.0","repository_url":"https://github.com/pybind/pybind11"},{"name":"optuna","old_version":"4.9.0","new_version":"5.0.0","repository_url":"https://github.com/optuna/optuna"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 85 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pin-pink](https://github.com/stephane-caron/pink) | `4.3.0` | `4.4.0` |\n| [reactivex](https://github.com/ReactiveX/RxPY) | `4.1.0` | `5.1.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.5` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [packaging](https://github.com/pypa/packaging) | `25.0` | `26.3` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.23.0` | `3.32.6` |\n| [plum-dispatch](https://github.com/beartype/plum) | `2.5.7` | `2.10.1` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.52` | `3.1.62` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [opencv-contrib-python](https://github.com/opencv/opencv-python) | `4.13.0.92` | `5.0.0.93` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.12.0` | `2.15.0` |\n| [textual](https://github.com/Textualize/textual) | `3.7.1` | `8.2.8` |\n| [terminaltexteffects](https://github.com/ChrisBuilds/terminaltexteffects) | `0.12.2` | `0.15.0` |\n| [typer](https://github.com/fastapi/typer) | `0.23.1` | `0.27.2` |\n| [ipython](https://github.com/ipython/ipython) | `8.38.0` | `8.39.0` |\n| [plotext](https://github.com/piccolomo/plotext) | `5.3.2` | `6.1.0` |\n| [numba](https://github.com/numba/numba) | `0.63.1` | `0.67.0` |\n| [llvmlite](https://github.com/numba/llvmlite) | `0.46.0` | `0.49.0` |\n| [rerun-sdk](https://github.com/rerun-io/rerun) | `0.32.0` | `0.37.2` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.5` | `7.36.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.1` |\n| [websocket-client](https://github.com/websocket-client/websocket-client) | `1.9.0` | `1.9.2` |\n| [ipykernel](https://github.com/ipython/ipykernel) | `7.2.0` | `7.3.0` |\n| [open-clip-torch](https://github.com/mlfoundations/open_clip) | `3.2.0` | `3.3.0` |\n| [gdown](https://github.com/wkentaro/gdown) | `6.0.0` | `6.2.0` |\n| [tensorboard](https://github.com/tensorflow/tensorboard) | `2.20.0` | `2.21.0` |\n| [portal](https://github.com/danijar/portal) | `3.7.4` | `3.8.1` |\n| [bosdyn-client](https://github.com/boston-dynamics/spot-sdk) | `5.1.4` | `5.2.0` |\n| [bosdyn-api](https://github.com/boston-dynamics/spot-sdk) | `5.1.4` | `5.2.0` |\n| [bosdyn-core](https://github.com/boston-dynamics/spot-sdk) | `5.1.4` | `5.2.0` |\n| [pyarrow](https://github.com/apache/arrow) | `23.0.0` | `25.0.1` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.3.3` | `1.6.3` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.1.6` | `1.6.2` |\n| [langchain-huggingface](https://github.com/langchain-ai/langchain) | `1.2.0` | `1.2.2` |\n| [langchain-ollama](https://github.com/langchain-ai/langchain) | `1.0.1` | `1.1.0` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [openai](https://github.com/openai/openai-python) | `2.21.0` | `3.14.0` |\n| [sounddevice](https://github.com/spatialaudio/python-sounddevice) | `0.5.5` | `0.5.6` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.129.0` | `0.141.1` |\n| [python-socketio](https://github.com/sponsors/miguelgrinberg) | `5.16.1` | `5.17.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.2.0` | `3.4.11` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.40.0` | `0.53.0` |\n| [soundfile](https://github.com/bastibe/python-soundfile) | `0.13.1` | `0.14.0` |\n| [timm](https://github.com/huggingface/pytorch-image-models) | `1.0.24` | `1.0.29` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [lap](https://github.com/gatagat/lap) | `0.5.12` | `0.5.13` |\n| [transformers[torch]](https://github.com/huggingface/transformers) | `4.53.3` | `5.17.0` |\n| [moondream](https://github.com/vikhyat/moondream) | `0.2.0` | `2.3.0` |\n| [omegaconf](https://github.com/omry/omegaconf) | `2.3.0` | `2.3.1` |\n| [hydra-core](https://github.com/facebookresearch/hydra) | `1.3.2` | `1.3.7` |\n| [unitree-webrtc-connect](https://github.com/legion1581/unitree_webrtc_connect) | `2.1.2` | `2.2.0` |\n| [cyclonedds](https://github.com/eclipse-cyclonedds/cyclonedds-python) | `0.10.5` | `11.0.1` |\n| [mcap](https://github.com/foxglove/mcap) | `1.3.1` | `1.4.0` |\n| [piper-sdk](https://github.com/agilexrobotics/piper_sdk) | `0.6.1` | `0.6.2` |\n| [xarm-python-sdk](https://github.com/xArm-Developer/xArm-Python-SDK) | `1.17.3` | `1.18.4` |\n| [roboplan](https://github.com/open-planning/roboplan) | `0.6.0` | `0.6.1` |\n| [matplotlib](https://github.com/matplotlib/matplotlib) | `3.10.8` | `3.10.9` |\n| [cupy-cuda12x](https://github.com/cupy/cupy) | `13.6.0` | `14.2.0` |\n| [mujoco](https://github.com/google-deepmind/mujoco) | `3.10.0` | `3.13.0` |\n| [gtsam-extended](https://gtsam.org/) | `4.3a1.post1` | `4.3a2.post202608240418` |\n| [aiortc](https://github.com/aiortc/aiortc) | `1.14.0` | `1.15.0` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.1` | `3.14.3` |\n| [reportlab](https://www.reportlab.com/) | `4.5.0` | `5.0.1` |\n| [manifold3d](https://github.com/elalish/manifold) | `3.5.1` | `3.5.3` |\n| [coacd](https://github.com/SarahWeiii/CoACD) | `1.0.11` | `1.0.14` |\n| [usd-core](https://github.com/PixarAnimationStudios/OpenUSD) | `26.5` | `26.8` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.14.3` | `0.16.7` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `9.1.1` |\n| [pytest-mock](https://github.com/pytest-dev/pytest-mock) | `3.15.0` | `3.15.1` |\n| [pytest-env](https://github.com/pytest-dev/pytest-env) | `1.1.5` | `1.7.1` |\n| [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures) | `16.4` | `16.6.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.4` | `7.16.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.2.0` | `4.6.2` |\n| [py-spy](https://github.com/benfred/py-spy) | `0.4.1` | `0.4.2` |\n| [maturin](https://github.com/pyo3/maturin) | `1.13.3` | `1.15.0` |\n| [python-lsp-server[all]](https://github.com/python-lsp/python-lsp-server) | `1.14.0` | `1.15.0` |\n| [python-lsp-ruff](https://github.com/python-lsp/python-lsp-ruff) | `2.3.0` | `2.3.4` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.61.0` | `1.62.0` |\n| [mypy](https://github.com/python/mypy) | `1.19.0` | `2.3.1` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20250915` | `6.0.12.20260906` |\n| [types-reportlab](https://github.com/python/typeshed) | `4.5.0.20260509` | `5.0.0.20260911` |\n| [types-requests](https://github.com/python/typeshed) | `2.32.4.20260107` | `2.33.0.20260906` |\n| [pybind11](https://github.com/pybind/pybind11) | `3.0.4` | `3.1.0` |\n| [optuna](https://github.com/optuna/optuna) | `4.9.0` | `5.0.0` |\n\nUpdates `pin-pink` from 4.3.0 to 4.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/stephane-caron/pink/releases\"\u003epin-pink's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.4.0\u003c/h2\u003e\n\u003cp\u003eThis release allows custom boundaries in velocity limits, allowing bounds on joints that can't have a limit from their URDF model (such as continuous joints).\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit: Allow custom boundaries in \u003ccode\u003eVelocityLimit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Document assumption that we start from a feasible configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pink-kinematics/pink/blob/main/CHANGELOG.md\"\u003epin-pink's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.4.0] - 2026-09-09\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit: Allow custom boundaries in \u003ccode\u003eVelocityLimit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: Document assumption that we start from a feasible configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/c14d0ae62f4fb744bbe84e35f9e16f1b680b20c0\"\u003e\u003ccode\u003ec14d0ae\u003c/code\u003e\u003c/a\u003e Release v4.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/5c890570ee42d397f03d1cf8e1b8f4a9797bde97\"\u003e\u003ccode\u003e5c89057\u003c/code\u003e\u003c/a\u003e doc: Add context to configuration limit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/7df4f5a323c423b591ff3c35c7e66df40ff9c197\"\u003e\u003ccode\u003e7df4f5a\u003c/code\u003e\u003c/a\u003e Update link to CBF note\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/bfd30c7aec222b66fb36629c20439bedb223d161\"\u003e\u003ccode\u003ebfd30c7\u003c/code\u003e\u003c/a\u003e lint: Apply pylint recos in FrameTask\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/e71a42bd424680b039b782de1392b0b7ec2307d9\"\u003e\u003ccode\u003ee71a42b\u003c/code\u003e\u003c/a\u003e lint: Fix pylint recos in ManipulabilityTask\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/a7ac5aa23b591fc203fbdc636d88c1a9b410375c\"\u003e\u003ccode\u003ea7ac5aa\u003c/code\u003e\u003c/a\u003e pixi: Group linting tasks, add format task\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/771c0e0a5d80107771525321927eebb28fbc3400\"\u003e\u003ccode\u003e771c0e0\u003c/code\u003e\u003c/a\u003e lint: Fix two pylint errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/f568e80536549a3b7f627468eb29526d3404c85b\"\u003e\u003ccode\u003ef568e80\u003c/code\u003e\u003c/a\u003e Update type of velocity_limit attribute\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/232c9c0b76db644c212c1e9caa33bda345cb4dd2\"\u003e\u003ccode\u003e232c9c0\u003c/code\u003e\u003c/a\u003e minor: Removed comes before Fixed in Keep a Changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pink-kinematics/pink/commit/3b60614b5f25ed8c1ed0f1fc596ec19133665035\"\u003e\u003ccode\u003e3b60614\u003c/code\u003e\u003c/a\u003e Update the changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/stephane-caron/pink/compare/v4.3.0...v4.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `reactivex` from 4.1.0 to 5.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ReactiveX/RxPY/releases\"\u003ereactivex's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.1.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003ev5.0.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003ev5.0.0rc2\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003ev5.0.0a2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix title header by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/744\"\u003eReactiveX/RxPY#744\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/ReactiveX/RxPY/compare/v5.0.0a1...v5.0.0a2\"\u003ehttps://github.com/ReactiveX/RxPY/compare/v5.0.0a1...v5.0.0a2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.0.0a1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGive run a scheduler parameter by \u003ca href=\"https://github.com/rmahfoud\"\u003e\u003ccode\u003e@​rmahfoud\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/731\"\u003eReactiveX/RxPY#731\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid use of asyncio.get_event_loop (3.14) by \u003ca href=\"https://github.com/traylenator\"\u003e\u003ccode\u003e@​traylenator\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/728\"\u003eReactiveX/RxPY#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to uv by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/738\"\u003eReactiveX/RxPY#738\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to ruff by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/739\"\u003eReactiveX/RxPY#739\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade pyright by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/740\"\u003eReactiveX/RxPY#740\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix subscribe_on not forwarding scheduler to the source  by \u003ca href=\"https://github.com/jcafhe\"\u003e\u003ccode\u003e@​jcafhe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/726\"\u003eReactiveX/RxPY#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade deps by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/741\"\u003eReactiveX/RxPY#741\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify what you can do with the .subscribe Disposable by \u003ca href=\"https://github.com/tmewett\"\u003e\u003ccode\u003e@​tmewett\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/686\"\u003eReactiveX/RxPY#686\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRxPY v5 by \u003ca href=\"https://github.com/dbrattli\"\u003e\u003ccode\u003e@​dbrattli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/743\"\u003eReactiveX/RxPY#743\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rmahfoud\"\u003e\u003ccode\u003e@​rmahfoud\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/731\"\u003eReactiveX/RxPY#731\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tmewett\"\u003e\u003ccode\u003e@​tmewett\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/pull/686\"\u003eReactiveX/RxPY#686\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/ReactiveX/RxPY/compare/v4.1.0...v5.0.0a1\"\u003ehttps://github.com/ReactiveX/RxPY/compare/v4.1.0...v5.0.0a1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ReactiveX/RxPY/blob/master/CHANGELOG.md\"\u003ereactivex's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.1.0 - 2026-07-27\u003c/h2\u003e\n\u003ch3\u003e🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(operators)\u003c/em\u003e Add tap as an alias for do_action (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/804\"\u003e#804\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/95c54ac3652aed2bf78035c9846cb5867ee58172\"\u003e95c54ac3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(gtk)\u003c/em\u003e Call gi.require_version before importing gi.repository (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/749\"\u003e#749\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/2b9e3f338246acb7b0037c2a2d9b0882a980ce62\"\u003e2b9e3f33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cem\u003e(operators)\u003c/em\u003e Accept concurrent.futures.Future wherever futures are accepted (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/806\"\u003e#806\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/19da6ac1487e97bb973fcc4dafc69cee4a1e12a7\"\u003e19da6ac1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cem\u003e(scheduler)\u003c/em\u003e Use wall clock time for now() in event loop schedulers (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/809\"\u003e#809\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/361951c7237ae100f33f81e89144935adb281509\"\u003e361951c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/10ccc0a3deba0d004a8f9b6079802ffdb73d1edd..b286407307ace6670f6f0072a8438bc912165d43\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch2\u003e5.0.0 - 2026-07-20\u003c/h2\u003e\n\u003ch3\u003e🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(scripts)\u003c/em\u003e Keep uv.lock in sync and scope the version sed to [project] (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/802\"\u003e#802\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/10ccc0a3deba0d004a8f9b6079802ffdb73d1edd\"\u003e10ccc0a3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/915311e3e002b933f2eb4d59c9eac1cab327ff78..10ccc0a3deba0d004a8f9b6079802ffdb73d1edd\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch2\u003e5.0.0-rc.2 - 2026-07-20\u003c/h2\u003e\n\u003ch3\u003e🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e(operators)\u003c/em\u003e Reset retry budget per subscription to fix retry+repeat (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/765\"\u003e#765\u003c/a\u003e) (\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/c3f19d5e83403f70d44331daf0b5a86d410f76d4\"\u003ec3f19d5e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/2975deb528c9eec73c76cf8bb53fc8780f31de45..915311e3e002b933f2eb4d59c9eac1cab327ff78\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch2\u003e5.0.0-rc.1 - 2026-04-20\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/compare/8b59bc7394f1b6a8a78e2fc4b5efe200d4f47f89..2975deb528c9eec73c76cf8bb53fc8780f31de45\"\u003eView changes on Github\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Added \u003ccode\u003eAction\u003c/code\u003e and \u003ccode\u003eStartableFactory\u003c/code\u003e to \u003ccode\u003ereactivex.typing.__all__\u003c/code\u003e,\nmaking them part of the explicit public API surface.\u003c/li\u003e\n\u003cli\u003eDocs: Added missing docstring to \u003ccode\u003eon_error_resume_next\u003c/code\u003e operator.\u003c/li\u003e\n\u003cli\u003eOperators: Fixed scheduler forwarding in \u003ccode\u003epairwise\u003c/code\u003e, \u003ccode\u003eto_marbles\u003c/code\u003e, and\n\u003ccode\u003edelay_with_mapper\u003c/code\u003e (subscription-delay path). These operators now pass the\n\u003ccode\u003escheduler\u003c/code\u003e argument through to \u003ccode\u003esource.subscribe(...)\u003c/code\u003e and, in the case of\n\u003ccode\u003edelay_with_mapper\u003c/code\u003e, to the subscription-delay observable, consistent with\nall other pipeable operators. Closes \u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/480\"\u003e#480\u003c/a\u003e (partial — the operators listed\nin the issue that were not yet fixed).\u003c/li\u003e\n\u003cli\u003eCI: Skip \u003ccode\u003etests/test_scheduler/test_mainloop/test_tkinterscheduler.py\u003c/code\u003e on\nPyPy (all platforms). The module creates a Tk root at import time; PyPy's\n\u003ccode\u003e_tkinter\u003c/code\u003e finalizer calls \u003ccode\u003ethreading.notify_all\u003c/code\u003e during interpreter\nshutdown and aborts the xdist worker, failing whichever unrelated test\nwas running. Previously guarded only on macOS+PyPy.\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ereactivex.timer(duetime, period)\u003c/code\u003e now correctly resets the initial\ndelay on each resubscription (e.g. via \u003ccode\u003erepeat()\u003c/code\u003e). Previously `nonlocal\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/bbfecfbf83605f2bb2beb8b887dfe5b5fb322a67\"\u003e\u003ccode\u003ebbfecfb\u003c/code\u003e\u003c/a\u003e chore: release reactivex@5.1.0 (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/805\"\u003e#805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/b286407307ace6670f6f0072a8438bc912165d43\"\u003e\u003ccode\u003eb286407\u003c/code\u003e\u003c/a\u003e docs: correct and expand the GIL free-threading note (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/811\"\u003e#811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/93a4f0417fe5d1d187dbd2d0dfdf2ef3b481c45c\"\u003e\u003ccode\u003e93a4f04\u003c/code\u003e\u003c/a\u003e docs: explain how to parallelize work within a single stream (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/810\"\u003e#810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/2271867415d4beaed62e6f0441fd3312e47079aa\"\u003e\u003ccode\u003e2271867\u003c/code\u003e\u003c/a\u003e Revise GIL section for Python 3.13 updates (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/361951c7237ae100f33f81e89144935adb281509\"\u003e\u003ccode\u003e361951c\u003c/code\u003e\u003c/a\u003e fix(scheduler): use wall clock time for now() in event loop schedulers (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/b809222be63e235f439f65794dd1d4291556d072\"\u003e\u003ccode\u003eb809222\u003c/code\u003e\u003c/a\u003e docs: read version from pyproject instead of git tags (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/808\"\u003e#808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/19e808000610335b4f6d0e0c739b59372b8b5a5f\"\u003e\u003ccode\u003e19e8080\u003c/code\u003e\u003c/a\u003e ci(deps): bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/807\"\u003e#807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/dd9b8ec0185ade72dcb3aac983cd495f21ca0a6d\"\u003e\u003ccode\u003edd9b8ec\u003c/code\u003e\u003c/a\u003e refactor(combine-latest): simplify logic by removing redundant loops … (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/736\"\u003e#736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/19da6ac1487e97bb973fcc4dafc69cee4a1e12a7\"\u003e\u003ccode\u003e19da6ac\u003c/code\u003e\u003c/a\u003e fix(operators): accept concurrent.futures.Future wherever futures are accepte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ReactiveX/RxPY/commit/2b9e3f338246acb7b0037c2a2d9b0882a980ce62\"\u003e\u003ccode\u003e2b9e3f3\u003c/code\u003e\u003c/a\u003e fix(gtk): call gi.require_version before importing gi.repository (\u003ca href=\"https://redirect.github.com/ReactiveX/RxPY/issues/749\"\u003e#749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ReactiveX/RxPY/compare/v4.1.0...v5.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.12.5 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.2 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.2...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 25.0 to 26.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a public \u003ccode\u003eVersionRange\u003c/code\u003e API and \u003ccode\u003eSpecifierSet.to_range()\u003c/code\u003e, representing the versions a specifier set accepts as an interval set that supports intersection, union, difference, complement, set relations, membership tests, and filtering. \u003ccode\u003eVersionRange.to_specifier_set()\u003c/code\u003e converts a range back to a \u003ccode\u003eSpecifierSet\u003c/code\u003e where a PEP 440 form exists. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1267\"\u003e#1267\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1270\"\u003e#1270\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1298\"\u003e#1298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 808: accept \u003ccode\u003eMetadata-Version: 2.6\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1194\"\u003e#1194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003elimit\u003c/code\u003e argument to \u003ccode\u003eparse_tag()\u003c/code\u003e for compressed tag sets. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1220\"\u003e#1220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003eprefer_sdist_predicate\u003c/code\u003e argument to \u003ccode\u003ePylock.select()\u003c/code\u003e to prefer source distributions over wheels for selected packages. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1334\"\u003e#1334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003epure_python_tags()\u003c/code\u003e to generate the pure-Python tags for a Python version without touching the running platform. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1346\"\u003e#1346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_subset()\u003c/code\u003e, \u003ccode\u003eSpecifierSet.is_superset()\u003c/code\u003e, and \u003ccode\u003eSpecifierSet.is_disjoint()\u003c/code\u003e, which compare the versions two specifier sets accept. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1313\"\u003e#1313\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBehavior adaptations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8; packaging now requires Python 3.9 or later. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1157\"\u003e#1157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrefer native \u003ccode\u003elinux_*\u003c/code\u003e platform tags over \u003ccode\u003emanylinux\u003c/code\u003e and \u003ccode\u003emusllinux\u003c/code\u003e tags on Linux. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/160\"\u003e#160\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes for versions and specifiers\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e instead of \u003ccode\u003eTypeError\u003c/code\u003e when \u003ccode\u003eVersion\u003c/code\u003e is given a non-string. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1319\"\u003e#1319\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e for non-string pre-release letters passed to \u003ccode\u003eVersion.from_parts\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1241\"\u003e#1241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix an \u003ccode\u003eAttributeError\u003c/code\u003e when hashing internally trimmed versions. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1242\"\u003e#1242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e for post-release boundary intersections. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1257\"\u003e#1257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes for requirements and markers\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003eRequirement.__hash__\u003c/code\u003e consistent with \u003ccode\u003e__eq__\u003c/code\u003e for trailing-zero-equivalent specifiers (e.g. \u003ccode\u003efoo==1.0.0\u003c/code\u003e and \u003ccode\u003efoo==1.0.0.0\u003c/code\u003e), so equal requirements hash equal and deduplicate in sets and dicts. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1232\"\u003e#1232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize requested extra names before comparing or hashing requirements. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve a \u003ccode\u003eRequirement\u003c/code\u003e's specifier \u003ccode\u003eprereleases\u003c/code\u003e override across a pickle round trip. (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1204\"\u003e#1204\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidRequirement\u003c/code\u003e instead of \u003ccode\u003eInvalidSpecifier\u003c/code\u003e when a requirement contains an invalid specifier. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1332\"\u003e#1332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClarify the error for post-release prefix wildcards like \u003ccode\u003e==1.0.post1.*\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1299\"\u003e#1299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve quoting semantics when serializing marker values, so round-tripped markers parse back to the same marker. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeep the parentheses of a nested group when serializing markers. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1316\"\u003e#1316\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eextra\u003c/code\u003e and \u003ccode\u003edependency_groups\u003c/code\u003e values in nested markers at parse time. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1246\"\u003e#1246\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1310\"\u003e#1310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eUndefinedComparison\u003c/code\u003e when a set-valued variable like \u003ccode\u003eextras\u003c/code\u003e is used outside the membership form. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1265\"\u003e#1265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eUndefinedEnvironmentName\u003c/code\u003e (a \u003ccode\u003eKeyError\u003c/code\u003e subclass) for missing environment keys during marker evaluation. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1276\"\u003e#1276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWrap malformed string literal errors in \u003ccode\u003eInvalidMarker\u003c/code\u003e / \u003ccode\u003eInvalidRequirement\u003c/code\u003e instead of leaking a low-level error. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1249\"\u003e#1249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject requirements and markers with a trailing line break. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1345\"\u003e#1345\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes for metadata and licenses\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCollect all \u003ccode\u003efrom_email\u003c/code\u003e validation errors into one \u003ccode\u003eExceptionGroup\u003c/code\u003e instead of raising the first. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1268\"\u003e#1268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept the UTF-8 charset case-insensitively in email payloads. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1330\"\u003e#1330\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject malformed \u003ccode\u003eDescription-Content-Type\u003c/code\u003e values. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1329\"\u003e#1329\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't rewrite user values that contain \u003ccode\u003e{field}\u003c/code\u003e placeholders in error messages. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1327\"\u003e#1327\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRoute multipart email payloads to \u003ccode\u003eunparsed\u003c/code\u003e instead of asserting. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1247\"\u003e#1247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eInvalidMetadata\u003c/code\u003e and \u003ccode\u003eCyclicDependencyGroup\u003c/code\u003e picklable. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1328\"\u003e#1328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFold every line boundary \u003ccode\u003estr.splitlines\u003c/code\u003e recognizes when writing a header with \u003ccode\u003eRFC822Message\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1356\"\u003e#1356\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.3 - 2026-08-03\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFeatures:\n\u003cul\u003e\n\u003cli\u003eAdd a public :class:\u003ccode\u003e~packaging.ranges.VersionRange\u003c/code\u003e API and\u003cbr /\u003e\n:meth:\u003ccode\u003eSpecifierSet.to_range() \u0026amp;lt;packaging.specifiers.SpecifierSet.to_range\u0026amp;gt;\u003c/code\u003e,\u003cbr /\u003e\nrepresenting the versions a specifier set accepts as an interval set that\u003cbr /\u003e\nsupports intersection, union, difference, complement, set relations,\u003cbr /\u003e\nmembership tests, and filtering.\u003cbr /\u003e\n:meth:\u003ccode\u003e~packaging.ranges.VersionRange.to_specifier_set\u003c/code\u003e converts a range back\u003cbr /\u003e\nto a :class:\u003ccode\u003e~packaging.specifiers.SpecifierSet\u003c/code\u003e where a PEP 440 form exists.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1267\u003c/code\u003e, :pull:\u003ccode\u003e1270\u003c/code\u003e, :pull:\u003ccode\u003e1298\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 808: accept \u003ccode\u003eMetadata-Version: 2.6\u003c/code\u003e. (:pull:\u003ccode\u003e1194\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003elimit\u003c/code\u003e argument to \u003ccode\u003eparse_tag()\u003c/code\u003e for compressed tag sets.\u003cbr /\u003e\n(:issue:\u003ccode\u003e1220\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003eprefer_sdist_predicate\u003c/code\u003e argument to \u003ccode\u003ePylock.select()\u003c/code\u003e to prefer\u003cbr /\u003e\nsource distributions over wheels for selected packages. (:pull:\u003ccode\u003e1334\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd :func:\u003ccode\u003e~packaging.tags.pure_python_tags\u003c/code\u003e to generate the pure-Python\u003cbr /\u003e\ntags for a Python version without touching the running platform.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1346\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd :meth:\u003ccode\u003eSpecifierSet.is_subset() \u0026amp;lt;packaging.specifiers.SpecifierSet.is_subset\u0026amp;gt;\u003c/code\u003e, :meth:\u003ccode\u003e~packaging.specifiers.SpecifierSet.is_superset\u003c/code\u003e,\u003cbr /\u003e\nand :meth:\u003ccode\u003e~packaging.specifiers.SpecifierSet.is_disjoint\u003c/code\u003e, which compare the\u003cbr /\u003e\nversions two specifier sets accept. (:pull:\u003ccode\u003e1313\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.8; packaging now requires Python 3.9 or later.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1157\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePrefer native \u003ccode\u003elinux_*\u003c/code\u003e platform tags over \u003ccode\u003emanylinux\u003c/code\u003e and \u003ccode\u003emusllinux\u003c/code\u003e\u003cbr /\u003e\ntags on Linux. (:issue:\u003ccode\u003e160\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes for versions and specifiers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e instead of \u003ccode\u003eTypeError\u003c/code\u003e when \u003ccode\u003eVersion\u003c/code\u003e is given a\u003cbr /\u003e\nnon-string. (:pull:\u003ccode\u003e1319\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eInvalidVersion\u003c/code\u003e for non-string pre-release letters passed to\u003cbr /\u003e\n\u003ccode\u003eVersion.from_parts\u003c/code\u003e. (:pull:\u003ccode\u003e1241\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix an \u003ccode\u003eAttributeError\u003c/code\u003e when hashing internally trimmed versions.\u003cbr /\u003e\n(:pull:\u003ccode\u003e1242\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e for post-release boundary\u003cbr /\u003e\nintersections. (:pull:\u003ccode\u003e1257\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes for requirements and markers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003eRequirement.__hash__\u003c/code\u003e consistent with \u003ccode\u003e__eq__\u003c/code\u003e for\u003cbr /\u003e\ntrailing-zero-equivalent specifiers (e.g. \u003ccode\u003efoo==1.0.0\u003c/code\u003e and\u003cbr /\u003e\n\u003ccode\u003efoo==1.0.0.0\u003c/code\u003e), so equal requirements hash equal and deduplicate in\u003cbr /\u003e\nsets and dicts. (:pull:\u003ccode\u003e1232\u003c/code\u003e)\u003cbr /\u003e\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/929fd4b1410ac7ef61ef3f45b2f5d7e87711a9b5\"\u003e\u003ccode\u003e929fd4b\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/f300ebf0c155e1f7ea6d62fba11dba4bac3d1944\"\u003e\u003ccode\u003ef300ebf\u003c/code\u003e\u003c/a\u003e chore(deps): bump the pre-commit group with 5 updates (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1357\"\u003e#1357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/f91d97566a966177ad7ea5a7c703b12a7273e3b1\"\u003e\u003ccode\u003ef91d975\u003c/code\u003e\u003c/a\u003e ci(downstream): bump hatchling to 1.31.0 and fix its pytest rootdir (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1361\"\u003e#1361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/b1a7124fe3d40c3302c029e9eb01ac3fc3496a54\"\u003e\u003ccode\u003eb1a7124\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 7 updates (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1358\"\u003e#1358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/2d873eb6002021a8c007c933fbdab58b37a5079b\"\u003e\u003ccode\u003e2d873eb\u003c/code\u003e\u003c/a\u003e fix(metadata): fold every line boundary when writing headers (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1356\"\u003e#1356\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/413d006fadf5b9b14d78ad444201d8189bff8c64\"\u003e\u003ccode\u003e413d006\u003c/code\u003e\u003c/a\u003e docs: changelog for 26.3 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1343\"\u003e#1343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4eb0753dba8fcaaac8eb75463374e448f0931558\"\u003e\u003ccode\u003e4eb0753\u003c/code\u003e\u003c/a\u003e docs(metadata): explain selective field validation (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1342\"\u003e#1342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/77e9ed42b6db9c5c011a5148047a356ebe42692a\"\u003e\u003ccode\u003e77e9ed4\u003c/code\u003e\u003c/a\u003e feat(tags): add pure Python tag generator (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1346\"\u003e#1346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/7cea5e88671ed14016e9ab3dd08eab064f596564\"\u003e\u003ccode\u003e7cea5e8\u003c/code\u003e\u003c/a\u003e ci: drop 3.13t on Windows (3.13.14t may fail to build, run takes 9 minutes) (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/45a8b3402db5ff82158f2d0eabaf8447aa7a50bf\"\u003e\u003ccode\u003e45a8b34\u003c/code\u003e\u003c/a\u003e docs: add missing versionadded/versionchanged directives (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1344\"\u003e#1344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/25.0...26.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.23.0 to 3.32.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.32.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(lease): reject a duration no marker can carry by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/723\"\u003etox-dev/filelock#723\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft-rw): reject non-finite timing options by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/724\"\u003etox-dev/filelock#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve exception notes when copying and pickling by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(soft-rw): reuse existing test module by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/730\"\u003etox-dev/filelock#730\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: respect ACL write access when the owner write bit is absent by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/728\"\u003etox-dev/filelock#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix SoftReadWriteLock state lock timeout by \u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(fork): report where a stalled fork stops by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/715\"\u003etox-dev/filelock#715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs: say that mode is read-only in the thread-local section by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/716\"\u003etox-dev/filelock#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(lease): clear token after failed acquire by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix: retry transient denials on open and claim read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/705\"\u003etox-dev/filelock#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: deflake six scheduled-run failures by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/704\"\u003etox-dev/filelock#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: cover a reclaimed private record for real by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/706\"\u003etox-dev/filelock#706\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test(fork): fork once the event loop has closed by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/714\"\u003etox-dev/filelock#714\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 chore: batch dependency updates weekly on Tuesday by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/713\"\u003etox-dev/filelock#713\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eescape the hostname every marker publishes by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/709\"\u003etox-dev/filelock#709\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.3...3.32.4\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.3...3.32.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(strict): deflake close-fault injections on graalpy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/697\"\u003etox-dev/filelock#697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📄 docs: publish llms.txt from the docs build by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/700\"\u003etox-dev/filelock#700\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.0.1 (2026-09-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epoll_interval\u003c/code\u003e is now validated at construction, on the setter, and on \u003ccode\u003eacquire()\u003c/code\u003e: a negative, non-finite, or\nnon-numeric value raises :class:\u003ccode\u003eValueError\u003c/code\u003e/:class:\u003ccode\u003eTypeError\u003c/code\u003e immediately instead of failing inside \u003ccode\u003etime.sleep\u003c/code\u003e. :pr:\u003ccode\u003e739\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.0.0 (2026-09-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eThe :class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e on-disk protocol is a generation log under \u003ccode\u003e\u0026lt;path\u0026gt;.rw\u003c/code\u003e, and a process\nrunning an earlier release does not see it: an old and a new participant on one lock path do not exclude each\nother. Stop every participant, upgrade them all, then restart them; the new code ignores leftover \u003ccode\u003e.state\u003c/code\u003e,\n\u003ccode\u003e.write\u003c/code\u003e and \u003ccode\u003e.readers/\u003c/code\u003e files, and you can delete them. The filesystem must provide no-replace hard links, as\nit must for :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e, so a runtime without \u003ccode\u003eos.link\u003c/code\u003e raises\n:class:\u003ccode\u003e~filelock.SoftFileLockProtocolError\u003c/code\u003e on acquire. Constructing a singleton again with a different\n\u003ccode\u003eon_compromise\u003c/code\u003e, or with \u003ccode\u003epoll_interval\u003c/code\u003e at or above \u003ccode\u003estale_threshold\u003c/code\u003e, now raises :class:\u003ccode\u003eValueError\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e exposes :attr:\u003ccode\u003e~filelock.SoftReadWriteLock.generation\u003c/code\u003e as a fencing token for\nthe protected resource and reports a lost hold through \u003ccode\u003eon_compromise\u003c/code\u003e and\n:attr:\u003ccode\u003e~filelock.SoftReadWriteLock.compromise\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e no longer deadlocks when a holder dies on another host mid-transition, and\n\u003ccode\u003erelease()\u003c/code\u003e no longer waits on a mutex a dead host left behind (:pr:\u003ccode\u003e725\u003c/code\u003e, :pr:\u003ccode\u003e735\u003c/code\u003e). The state mutex is gone.\nEach transition is one atomic snapshot commit, and liveness is a heartbeat nonce read on the observer's own clock\nrather than an \u003ccode\u003emtime\u003c/code\u003e read against another host's. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.7 (2026-09-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eValidate final-symlink refusal by error number so the test works across libc implementations. :pr:\u003ccode\u003e737\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocument that :meth:\u003ccode\u003e~filelock.BaseFileLock.acquire\u003c/code\u003e reads \u003ccode\u003eblocking=None\u003c/code\u003e as the lock's \u003ccode\u003eblocking\u003c/code\u003e attribute and\nraises :class:\u003ccode\u003e~filelock.Timeout\u003c/code\u003e after one attempt when \u003ccode\u003eblocking=False\u003c/code\u003e. :pr:\u003ccode\u003e733\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.6 (2026-09-08)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLease\u003c/code\u003e now reject a boolean or non-finite \u003ccode\u003elease_duration\u003c/code\u003e, which used to\npublish an owner record their own \u003ccode\u003eowner\u003c/code\u003e property reads back as malformed. :pr:\u003ccode\u003e723\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject non-finite heartbeat, stale, and polling intervals in \u003ccode\u003eSoftReadWriteLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftReadWriteLock\u003c/code\u003e,\nincluding cached singleton construction and overflow in the default stale threshold. :pr:\u003ccode\u003e724\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4efd93e0482e8095a0b6949fb337206e7f67495d\"\u003e\u003ccode\u003e4efd93e\u003c/code\u003e\u003c/a\u003e Release 3.32.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7b7b7a8b9b10acf826cca246441297468039b0c1\"\u003e\u003ccode\u003e7b7b7a8\u003c/code\u003e\u003c/a\u003e Fix SoftReadWriteLock state lock timeout (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2f7b8696426c518b6828ea10e755c0ba2a4ffe2\"\u003e\u003ccode\u003ef2f7b86\u003c/code\u003e\u003c/a\u003e fix: respect ACL write access when the owner write bit is absent (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/e947a694fb0da6676c4861c8bfef3650e5656153\"\u003e\u003ccode\u003ee947a69\u003c/code\u003e\u003c/a\u003e test(soft-rw): reuse existing test module (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da3ae2bca0035fb9e5269257e6f393360866cf88\"\u003e\u003ccode\u003eda3ae2b\u003c/code\u003e\u003c/a\u003e fix: preserve exception notes when copying and pickling (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ae9cb5b2d66d6a79edd76b292fa7320c11468812\"\u003e\u003ccode\u003eae9cb5b\u003c/code\u003e\u003c/a\u003e 🐛 fix(soft-rw): reject non-finite timing options (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d00f9bbd709fbe92a99a38cb1e32b6690813e5a8\"\u003e\u003ccode\u003ed00f9bb\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/82f66d7b0aaa83755f8d71d0b0da88408b58ec4a\"\u003e\u003ccode\u003e82f66d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(lease): reject a duration no marker can carry (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1d9e9e7e43a1089c57d7c6f20d6a2268235a4745\"\u003e\u003ccode\u003e1d9e9e7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1585dfef9355a5c77d4a9498cc34d3a98056fdb9\"\u003e\u003ccode\u003e1585dfe\u003c/code\u003e\u003c/a\u003e Release 3.32.5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.23.0...3.32.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `plum-dispatch` from 2.5.7 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/beartype/plum/releases\"\u003eplum-dispatch's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003e_wrap_type_hint\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/310\"\u003e#310\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eBuild macOS arm64 mypyc wheels (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/320\"\u003e#320\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/beartype/plum/issues/317\"\u003e#317\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/318\"\u003e#318\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/319\"\u003e#319\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCompile more things with \u003ccode\u003emypyc\u003c/code\u003e for faster dispatch (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/287\"\u003e#287\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/beartype/plum/issues/288\"\u003e#288\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/289\"\u003e#289\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake concurrent dispatch resolution thread safe (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/281\"\u003e#281\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix support for \u003ccode\u003ebeartype\u0026gt;=0.23\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/296\"\u003e#296\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImprove typing (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/268\"\u003e#268\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003eVal\u003c/code\u003e, which was deprecated in v0.5.0 in favour of \u003ccode\u003etyping.Literal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/269\"\u003e#269\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.9.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport union aliases in Python 3.14 and later (\u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.8.0\u003c/h2\u003e\n\u003cp\u003eStarting this release, Plum will be available on PyPI as both \u003ccode\u003eplum-dispatch\u003c/code\u003e and \u003ccode\u003eplum\u003c/code\u003e.\u003c/p\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003efaithful\u003c/code\u003e keyword to \u003ccode\u003eModuleType\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e All imports should now go through \u003ccode\u003eplum\u003c/code\u003e directly! That is, not \u003ccode\u003eplum.signature.Signature\u003c/code\u003e, but \u003ccode\u003eplum.Signature\u003c/code\u003e. Please do open an issue if this release breaks something that shouldn't break.\u003c/p\u003e\n\u003cp\u003eChanges:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSignificantly improve typing of the internals (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/179\"\u003e#179\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/242\"\u003e#242\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSwitch to \u003ccode\u003euv\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/218\"\u003e#218\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake modules private for public/private separation (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/241\"\u003e#241\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSwitch to \u003ccode\u003esrc\u003c/code\u003e layout (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/249\"\u003e#249\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImprove config (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/248\"\u003e#248\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEnable \u003ccode\u003emypyc\u003c/code\u003e builds for better performance (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/247\"\u003e#247\u003c/a\u003e by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.1\u003c/h2\u003e\n\u003cp\u003eThis release features numerous very helpful contributions and improvements by \u003ca href=\"https://github.com/nstarman\"\u003e\u003ccode\u003e@​nstarman\u003c/code\u003e\u003c/a\u003e!\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse dependency groups (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/195\"\u003e#195\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003etyping_extensions\u003c/code\u003e as standard library and make more use of it (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/226\"\u003e#226\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/232\"\u003e#232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eComplete deprecation cycles (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/230\"\u003e#230\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/236\"\u003e#236\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eTurn various arguments into positional-only (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/229\"\u003e#229\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRemove unnecessary path manipulation (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/233\"\u003e#233\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRework tests with a \u003ccode\u003edispatch\u003c/code\u003e fixture (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/234\"\u003e#234\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAvoid using a deprecated NumPy module (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/231\"\u003e#231\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eDrops support for Python 3.9 (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/228\"\u003e#228\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImport exports from \u003ccode\u003emethods.py\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/237\"\u003e#237\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixes an incorrect \u003ccode\u003eoverload\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/238\"\u003e#238\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003enox\u003c/code\u003e for testing (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/235\"\u003e#235\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/beartype/plum/issues/240\"\u003e#240\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/beartype/plum/issues/228\"\u003e#228\u003c/a\u003e also fixes an important bug to do with the handling of unions (CC \u003ca href=\"https://github.com/davidwyld\"\u003e\u003ccode\u003e@​davidwyld\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/beartype/plum/commit/c835c8cf5ebea4f00ee304a647e026739034e63b\"\u003e\u003ccode\u003ec835c8c\u003c/code\u003e\u003c/a\u003e fix(mypyc): keep \u003ccode\u003eFunction\u003c/code\u003e weak-referenceable on the compiled wheels (\u003ca href=\"https://redirect.github.com/beartype/plum/issues/319\"\u003e#319\u003c...\n\n_Description has been truncated_","html_url":"https://github.com/dimensionalOS/dimos/pull/4260","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimensionalOS%2Fdimos/issues/4260","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4260/packages"}},{"old_version":"49.0.0","new_version":"50.0.0","update_type":"major","path":null,"pr_created_at":"2026-09-21T22:10:04.000Z","version_change":"49.0.0 → 50.0.0","issue":{"uuid":"5533006007","node_id":"PR_kwDOTNFrcM8AAAABEfpOQg","number":13,"state":"closed","title":"chore(deps): bump cryptography from 49.0.0 to 50.0.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-21T22:25:11.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-21T22:10:04.000Z","updated_at":"2026-09-21T22:25:12.000Z","time_to_close":907,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"cryptography","old_version":"49.0.0","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cryptography](https://github.com/pyca/cryptography) from 49.0.0 to 50.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/49.0.0...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=pip\u0026previous-version=49.0.0\u0026new-version=50.0.0)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/blytkerchan/kem-make/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/blytkerchan/kem-make/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/blytkerchan%2Fkem-make/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"}},{"old_version":"42.0.0","new_version":"50.0.1","update_type":"major","path":null,"pr_created_at":"2026-09-21T18:07:39.000Z","version_change":"42.0.0 → 50.0.1","issue":{"uuid":"5530702253","node_id":"PR_kwDOEc5xqM8AAAABEdyR3g","number":4,"state":"closed","title":"Bump the python group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-21T22:15:21.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-21T18:07:39.000Z","updated_at":"2026-09-21T22:15:23.000Z","time_to_close":14862,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":9,"packages":[{"name":"pyyaml","old_version":"6.0.1","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"pydantic","old_version":"2.6.0","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"mysql-connector-python","old_version":"8.4.0","new_version":"26.7.0","repository_url":"https://github.com/mysql/mysql-connector-python"},{"name":"psycopg","old_version":"3.2.10","new_version":"3.3.6","repository_url":"https://github.com/psycopg/psycopg"},{"name":"oracledb","old_version":"2.5.0","new_version":"26.0.0","repository_url":"https://github.com/oracle/python-oracledb"},{"name":"pymssql","old_version":"2.3.5","new_version":"2.4.1","repository_url":"https://github.com/pymssql/pymssql"},{"name":"cryptography","old_version":"42.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"types-pyyaml","old_version":"6.0.12.20260815","new_version":"6.0.12.20260906","repository_url":"https://github.com/python/typeshed"},{"name":"pydantic-core","old_version":"2.46.5","new_version":"2.49.0","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.1` | `6.0.3` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.6.0` | `2.13.5` |\n| [mysql-connector-python](https://github.com/mysql/mysql-connector-python) | `8.4.0` | `26.7.0` |\n| [psycopg](https://github.com/psycopg/psycopg) | `3.2.10` | `3.3.6` |\n| [oracledb](https://github.com/oracle/python-oracledb) | `2.5.0` | `26.0.0` |\n| [pymssql](https://github.com/pymssql/pymssql) | `2.3.5` | `2.4.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `42.0.0` | `50.0.1` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260815` | `6.0.12.20260906` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.5` | `2.49.0` |\n\n\nUpdates `pyyaml` from 6.0.1 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/yaml/pyyaml/releases\"\u003epyyaml's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 and free-threading (experimental).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ehttps://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Cython 3.x and Python 3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.1...6.0.2\"\u003ehttps://github.com/yaml/pyyaml/compare/6.0.1...6.0.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.2rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for extension build with Cython 3.x\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.13\u003c/li\u003e\n\u003cli\u003eAdded PyPI wheels for musllinux on aarch64\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/yaml/pyyaml/blob/6.0.3/CHANGES\"\u003epyyaml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e6.0.3 (2025-09-25)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/yaml/pyyaml/pull/864\"\u003eyaml/pyyaml#864\u003c/a\u003e -- Support for Python 3.14 and free-threading (experimental)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e6.0.2 (2024-08-06)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/yaml/pyyaml/pull/808\"\u003eyaml/pyyaml#808\u003c/a\u003e -- Support for Cython 3.x and Python 3.13\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/49790e73684bebad1df05ef8d828fa12f685bffb\"\u003e\u003ccode\u003e49790e7\u003c/code\u003e\u003c/a\u003e Release 6.0.3 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/889\"\u003e#889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/41309b0bcb4559edb1d691d47199035ef539d785\"\u003e\u003ccode\u003e41309b0\u003c/code\u003e\u003c/a\u003e Release 6.0.2 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/819\"\u003e#819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/dd9f0e1236775dcce682c91823e009556ce2a271\"\u003e\u003ccode\u003edd9f0e1\u003c/code\u003e\u003c/a\u003e 6.0.2rc1 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/f5527a26d518b3e9c66f9211e0af00c83f09a97e\"\u003e\u003ccode\u003ef5527a2\u003c/code\u003e\u003c/a\u003e disable CI trigger on PR edits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/b4d80a742142004490d2da7691d534923820b81c\"\u003e\u003ccode\u003eb4d80a7\u003c/code\u003e\u003c/a\u003e Python 3.12 + musllinux_1_1_x86_64 wheel support\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.1...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.6.0 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.6.0...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mysql-connector-python` from 8.4.0 to 26.7.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mysql/mysql-connector-python/blob/trunk/CHANGES.txt\"\u003emysql-connector-python's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev26.7.0\u003c/h1\u003e\n\u003cp\u003eThis release contains no functional changes.\u003c/p\u003e\n\u003ch1\u003ev9.7.0\u003c/h1\u003e\n\u003cp\u003eThis release contains no functional changes.\u003c/p\u003e\n\u003ch1\u003ev9.6.0\u003c/h1\u003e\n\u003cp\u003eThis release contains no functional changes.\u003c/p\u003e\n\u003ch1\u003ev9.5.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eWL#17049: Remove usage of SQL functions MD5() and SHA1()\u003c/li\u003e\n\u003cli\u003eWL#17088: MySQL Connector Python HeatWave GenAI and ML SDK\u003c/li\u003e\n\u003cli\u003eWL#17048: Remove Python 3.9 support\u003c/li\u003e\n\u003cli\u003eWL#17045: Add support for Python 3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev9.4.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eWL#16966: Upgrade Python lz4 version\u003c/li\u003e\n\u003cli\u003eWL#16963: Update the OpenTelemetry version\u003c/li\u003e\n\u003cli\u003eWL#16962: Update the Python Protobuf version\u003c/li\u003e\n\u003cli\u003eWL#16954: Make sdist packages pip installable\u003c/li\u003e\n\u003cli\u003eBUG#38072835: Authentication OCI plugin option parameters not being supported by the aio connector\u003c/li\u003e\n\u003cli\u003eBUG#37868219: RPM packages have incorrect copyright year in their metadata\u003c/li\u003e\n\u003cli\u003eBUG#37859771: mysql/connector python version 9.3.0 has a regression which cannot persist binary data with percent signs in it\u003c/li\u003e\n\u003cli\u003eBUG#37820231: Text based django ORM filters doesn't work with Connector/Python\u003c/li\u003e\n\u003cli\u003eBUG#37806057: Rename extra option (when installing wheel package) to install webauthn functionality dependencies\u003c/li\u003e\n\u003cli\u003eBUG#37774513: Inconsistent conversion to_sql for cext vs pure python\u003c/li\u003e\n\u003cli\u003eBUG#37642447: The license type is missing from RPM package\u003c/li\u003e\n\u003cli\u003eBUG#37627508: mysql/connector python fetchmany() has an off by one bug when argument given as 1\u003c/li\u003e\n\u003cli\u003eBUG#37047789: Python connector does not support Django enum\u003c/li\u003e\n\u003cli\u003eBUG#36733242: Contribution: Add Connection Pooling Support for AsyncIO Connector\u003c/li\u003e\n\u003cli\u003eBUG#36452514: Missing version info resources\u003c/li\u003e\n\u003cli\u003eBUG#34950958: MySQL Python Connector doesn't work with ssh in the same process\u003c/li\u003e\n\u003cli\u003eBUG#34844347: Freezes on connection via sshtunnel\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev9.3.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eWL#16754: The host wildcard no longer applies to localhost\u003c/li\u003e\n\u003cli\u003eWL#16752: Deprecate class methods to access instance data or to know instance internal state\u003c/li\u003e\n\u003cli\u003eWL#16327: Remove Cursors Prepared Raw and Named Tuple\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/79f3435138368bbb1f86926c376952caa8411099\"\u003e\u003ccode\u003e79f3435\u003c/code\u003e\u003c/a\u003e Fix mysqld version parsing for multi-digit components\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/1a242a75fbe22515d4fc9ae0458728759a39be6c\"\u003e\u003ccode\u003e1a242a7\u003c/code\u003e\u003c/a\u003e Updated Connector/Python version to v26.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/d5645ae01e2be0b873c641f57ca2eb6d5b32c668\"\u003e\u003ccode\u003ed5645ae\u003c/code\u003e\u003c/a\u003e Updated GPL licence book\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/c94b53c600856f79afd028c092e0ad92d4844795\"\u003e\u003ccode\u003ec94b53c\u003c/code\u003e\u003c/a\u003e Updated the CONTRIBUTING and README files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/ecbe56ee903d4cc774fe478e0414e771daac2718\"\u003e\u003ccode\u003eecbe56e\u003c/code\u003e\u003c/a\u003e Updated the CONTRIBUTING and README files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/b0dde65f5728727c7c8f2b459ee98237d6b04d46\"\u003e\u003ccode\u003eb0dde65\u003c/code\u003e\u003c/a\u003e Updated Connector/Python version to v10.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/cbac6da551e915605575989551b3b7c803d74a0c\"\u003e\u003ccode\u003ecbac6da\u003c/code\u003e\u003c/a\u003e Updated GPL licence book\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/8245a3dfa47eb8f264e82e92b53363dabc225270\"\u003e\u003ccode\u003e8245a3d\u003c/code\u003e\u003c/a\u003e Updated project setup files.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/4111d801a6a62fdcaeea595d777d39eff176d750\"\u003e\u003ccode\u003e4111d80\u003c/code\u003e\u003c/a\u003e Copyright header year bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mysql/mysql-connector-python/commit/2e3dededcef1cb8ff0d1c2e13ab0070088e4f51c\"\u003e\u003ccode\u003e2e3dede\u003c/code\u003e\u003c/a\u003e Updated Connector/Python version to v9.7.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mysql/mysql-connector-python/compare/8.4.0...26.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg` from 3.2.10 to 3.3.6\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.6\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1245](https://github.com/psycopg/psycopg/issues/1245)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDon't wait forever for a query to terminate after interrupting it, for\ninstance if the server is unresponsive. The fix requires libpq 17 or newer\n(:ticket:\u003ccode\u003e[#1371](https://github.com/psycopg/psycopg/issues/1371)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eCancel a running query upon receiving \u003ccode\u003e!SystemExit\u003c/code\u003e (:ticket:\u003ccode\u003e[#1384](https://github.com/psycopg/psycopg/issues/1384)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReport \u003ccode\u003e!None\u003c/code\u003e instead of \u003ccode\u003e65535\u003c/code\u003e as the \u003ccode\u003eColumn.precision\u003c/code\u003e of an\n:sql:\u003ccode\u003einterval\u003c/code\u003e column declared with a fields restriction and no explicit\nprecision, such as e.g. :sql:\u003ccode\u003einterval day to second\u003c/code\u003e (:ticket:\u003ccode\u003e[#1397](https://github.com/psycopg/psycopg/issues/1397)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix dumping of nested subclasses of lists as arrays (:ticket:\u003ccode\u003e[#1398](https://github.com/psycopg/psycopg/issues/1398)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eDEALLOCATE ALL\u003c/code\u003e (:ticket:\u003ccode\u003e[#1408](https://github.com/psycopg/psycopg/issues/1408)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eBetter guards dumping large Python \u003ccode\u003e!int\u003c/code\u003e to binary numeric (:ticket:\u003ccode\u003e[#1414](https://github.com/psycopg/psycopg/issues/1414)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eImprove performance of async queries by reducing the overhead of the\n\u003ccode\u003e!wait_async()\u003c/code\u003e function (:ticket:\u003ccode\u003e[#1331](https://github.com/psycopg/psycopg/issues/1331)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a67654d1e7afbf9b3a619557838f62de1c790e7c\"\u003e\u003ccode\u003ea67654d\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/443814b3b111ac678a39fd523c1a826266fb69b5\"\u003e\u003ccode\u003e443814b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1416\"\u003e#1416\u003c/a\u003e from dvarrazzo/wait-async-perf\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/42966e9ebbda3b9c69b15c5588543c15f2aae5dd\"\u003e\u003ccode\u003e42966e9\u003c/code\u003e\u003c/a\u003e test: add helpful comments to some tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/5e8797f0c8003d8cd12a1e5c13f05fbb94c1c1d2\"\u003e\u003ccode\u003e5e8797f\u003c/code\u003e\u003c/a\u003e test: add reasonable connect_timeout to most tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/c81ba62442dfbd69e207d6914e6ae2aa27e56886\"\u003e\u003ccode\u003ec81ba62\u003c/code\u003e\u003c/a\u003e perf: reduce the overhead of wait_async()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/d2bbfe4e2b1e36a20e72a18097f35a3db27296e3\"\u003e\u003ccode\u003ed2bbfe4\u003c/code\u003e\u003c/a\u003e refactor: use get_running_loop() in the async wait functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2b1484a550e01c88fda077099678f0abb9217ecb\"\u003e\u003ccode\u003e2b1484a\u003c/code\u003e\u003c/a\u003e test: add a script to measure the async wait functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/573cf4aa70d8fdefc9d5f3eb69d5419cd6d3cd51\"\u003e\u003ccode\u003e573cf4a\u003c/code\u003e\u003c/a\u003e test: fix incorrect wait timing test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2b68990874175b8d97269218d4963b2d5c8656f3\"\u003e\u003ccode\u003e2b68990\u003c/code\u003e\u003c/a\u003e refactor: drop leftovers of waiting with inf interval in wait_conn_async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/60765dd8fc7d8df03cd75efcff485bfb3c83a0ed\"\u003e\u003ccode\u003e60765dd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1414\"\u003e#1414\u003c/a\u003e from dvarrazzo/fix-decimal-overflow\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.2.10...3.3.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `oracledb` from 2.5.0 to 26.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/oracle/python-oracledb/releases\"\u003eoracledb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev26.0.0\u003c/h2\u003e\n\u003cp\u003epython-oracledb 26.0.0 is now released. The major version number will now be the two digit year in which that version was first released. This release has the following highlights:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esupport for Python 3.14 templates\u003c/li\u003e\n\u003cli\u003esupport for centralized configuration providers for GCP and AWS\u003c/li\u003e\n\u003cli\u003esupport for setting transaction priority (Oracle AI Database 26ai feature)\u003c/li\u003e\n\u003cli\u003esupport for Oracle AI Database 26ai Deep Data Security using asyncio\u003c/li\u003e\n\u003cli\u003esupport for external authentication using TLS in thin mode\u003c/li\u003e\n\u003cli\u003esupport for operation and round trip callbacks\u003c/li\u003e\n\u003cli\u003eimprovements to Apache Arrow support\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-26-0-0-september-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev4.0.2\u003c/h2\u003e\n\u003cp\u003epython-oracledb 4.0.2 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-4-0-2-july-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003cp\u003epython-oracledb 4.0.1 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-4-0-1-may-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003cp\u003epython-oracledb 4.0.0 is now released. This release has the following highlights:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esupport for Oracle AI Database 26ai Deep Data Security in thin mode\u003c/li\u003e\n\u003cli\u003esupport for Continuous Query Notification (CQN) and Advanced Queuing (AQ) notifications in thin mode\u003c/li\u003e\n\u003cli\u003enew functions to help developers prevent SQL injection when processing user input to create SQL statements\u003c/li\u003e\n\u003cli\u003eimproved cloud native authentication\u003c/li\u003e\n\u003cli\u003eimproved support for data frames (binary views \u0026quot;vb\u0026quot; and string views \u0026quot;vu\u0026quot; formats now accepted)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-4-0-0-may-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev3.4.2\u003c/h2\u003e\n\u003cp\u003epython-oracledb 3.4.2 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-3-4-2-january-2026\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev3.4.1\u003c/h2\u003e\n\u003cp\u003epython-oracledb 3.4.1 is now released. This release addresses a number of issues. See the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-3-4-1-november-2025\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003cp\u003epython-oracledb 3.4.0 is now released. This release has the following highlights:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esupport for Direct Path Load in thin mode for fast data ingestion\u003c/li\u003e\n\u003cli\u003esupport for data frames is no longer considered a pre-release\u003c/li\u003e\n\u003cli\u003esupport for type mapping when querying with data frames\u003c/li\u003e\n\u003cli\u003esupport for ingesting more Apache Arrow data types\u003c/li\u003e\n\u003cli\u003esupport for ingesting Apache Arrow data frames containing multiple chunks\u003c/li\u003e\n\u003cli\u003esupport for cursor.executemany() operating on large input data in batches\u003c/li\u003e\n\u003cli\u003efine-grained control over LOB and number handling\u003c/li\u003e\n\u003cli\u003enew optional install dependencies for plugins\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee the \u003ca href=\"https://python-oracledb.readthedocs.io/en/latest/release_notes.html#oracledb-3-4-0-october-2025\"\u003efull release notes\u003c/a\u003e for all of the details.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/601f2b4677aa6733a9739359e2da889f0f98e2ac\"\u003e\u003ccode\u003e601f2b4\u003c/code\u003e\u003c/a\u003e Preparing to release python-oracledb 26.0.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/7082aadc63b3a06edccd3a7e8ea8fff8a249f671\"\u003e\u003ccode\u003e7082aad\u003c/code\u003e\u003c/a\u003e Tweak release notes as suggested.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/36fa3ae7009e3d2cb15c17b7d8dddd9e63935396\"\u003e\u003ccode\u003e36fa3ae\u003c/code\u003e\u003c/a\u003e Tidy up tests to ensure cleanup works as it should.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/a7b8c60d8bb5e7d676c5c813691c27ebb710a89b\"\u003e\u003ccode\u003ea7b8c60\u003c/code\u003e\u003c/a\u003e Add Cython declaration to avoid attribute error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/9aa77531783aa3ddd88d47f53996c1eb5659c7ec\"\u003e\u003ccode\u003e9aa7753\u003c/code\u003e\u003c/a\u003e Fixed typo.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/c41a5cceeb69ceaadcca18b0fa1139d6963ff28a\"\u003e\u003ccode\u003ec41a5cc\u003c/code\u003e\u003c/a\u003e Change Oracle Database 26ai to Oracle AI Database 26ai.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/94f94c1421b318389f90057774219953715baeff\"\u003e\u003ccode\u003e94f94c1\u003c/code\u003e\u003c/a\u003e Ensure the HA readiness piggyback is not sent for client initiated connections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/b6b14c23d8d9c8a663217b7c0bceb46257ff114a\"\u003e\u003ccode\u003eb6b14c2\u003c/code\u003e\u003c/a\u003e Added directory name to test functions for better differentiation of tests.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/d1703fbef113f4f268cb2e1a3b5386acbb1b8e74\"\u003e\u003ccode\u003ed1703fb\u003c/code\u003e\u003c/a\u003e Small tweaks in preparing for release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/oracle/python-oracledb/commit/bf0ea3cfb203dea1a7170e711f835af47f96dd4d\"\u003e\u003ccode\u003ebf0ea3c\u003c/code\u003e\u003c/a\u003e Added method AsyncConnection.terminate() as requested (\u003ca href=\"https://redirect.github.com/oracle/python-oracledb/issues/602\"\u003e#602\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/oracle/python-oracledb/compare/v2.5.0...v26.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymssql` from 2.3.5 to 2.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymssql/pymssql/releases\"\u003epymssql's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epymssql 2.0 greenish\u003c/h2\u003e\n\u003cp\u003eExperimental support for greening for gevent, etc.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymssql/pymssql/blob/master/ChangeLog.rst\"\u003epymssql's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion 2.4.1 - 2026-09-07 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix socket resource leak on failed connections (\u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1002\"\u003e#1002\u003c/a\u003e), thanks to gintsmurans.\u003c/li\u003e\n\u003cli\u003eEnable free-threaded Python 3.14 wheel builds (\u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1004\"\u003e#1004\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd wheels for Python 3.15 (PR \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1016\"\u003e#1016\u003c/a\u003e), thanks to edgarrmondragon.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.4.0 - 2026-08-31 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate license information in pyproject.toml, thanks to ecederstrand (PR \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1003\"\u003e#1003\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUpdate win-iconv to 0.0.10.\u003c/li\u003e\n\u003cli\u003eFix datetime conversion for BCP operations and build on Windows (PR \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1015\"\u003e#1015\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUpdate to latest OpenSSL version on Windows (currently 4.0.2).\u003c/li\u003e\n\u003cli\u003eUpdate FreeTDS to 1.5.19 for wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.3.13 - 2026-02-13 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix type stubs with generics, overloads, and corrected types, thanks to jacks0n.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.3.12 - 2026-02-10 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate manylinux base image to manylinux_2_28 to fix CVE-2023-0464, thanks to \u003ca href=\"mailto:grgalex@ba.uoa.gr\"\u003egrgalex@ba.uoa.gr\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eVersion 2.3.11 - 2025-12-30 - Mikhail Terekhov\u003c/h1\u003e\n\u003ch2\u003eGeneral\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop build of MacOS-13 wheels (The macOS-13 based runner images are now retired on GitHub).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInternals\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/dfb9051a2b59ed96d7281725ca13d23e8740dd69\"\u003e\u003ccode\u003edfb9051\u003c/code\u003e\u003c/a\u003e Update ChangeLog.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/0908736864edb75175f3eb4bd6f67052bc06eb73\"\u003e\u003ccode\u003e0908736\u003c/code\u003e\u003c/a\u003e Add concurrency limits to wheel-building job\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/8fdadd4a0ca173fbe1c0ddb188ac495f70003d7c\"\u003e\u003ccode\u003e8fdadd4\u003c/code\u003e\u003c/a\u003e PyPy is opt-in, so no need to skip it\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/926541e8f6f5e79f78ae5b1f1bcb429525efb3e4\"\u003e\u003ccode\u003e926541e\u003c/code\u003e\u003c/a\u003e Build Python 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/9a21ce75f656a5f11bfb81a81bdbf8df0bb98beb\"\u003e\u003ccode\u003e9a21ce7\u003c/code\u003e\u003c/a\u003e Protect connection_object_list with Lock\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/c751db2073c23fa3307f93556bec5e9988a84237\"\u003e\u003ccode\u003ec751db2\u003c/code\u003e\u003c/a\u003e Add free-threaded Python specific tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/42a4f4ae8805902a82fa78de58630d3ca33f9664\"\u003e\u003ccode\u003e42a4f4a\u003c/code\u003e\u003c/a\u003e Enable free-threaded Python 3.14 wheel builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/0be64d18292fcef70a123bd4c1e22a2d54edbbff\"\u003e\u003ccode\u003e0be64d1\u003c/code\u003e\u003c/a\u003e Fix socket resource leak on failed connections (\u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/1002\"\u003e#1002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/deda6bc823ceb3c496ea4e53c8aec7a9f48321fd\"\u003e\u003ccode\u003ededa6bc\u003c/code\u003e\u003c/a\u003e Add test for \u003ca href=\"https://redirect.github.com/pymssql/pymssql/issues/968\"\u003e#968\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymssql/pymssql/commit/ade7bd1d1cbe98e59ca8d0728a71226b4d60a2e1\"\u003e\u003ccode\u003eade7bd1\u003c/code\u003e\u003c/a\u003e Update ChangeLog.rst\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymssql/pymssql/compare/v2.3.5...v2.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 42.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/42.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `types-pyyaml` from 6.0.12.20260815 to 6.0.12.20260906\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/typeshed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-core` from 2.46.5 to 2.49.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e","html_url":"https://github.com/ribeiro11075/bauta/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ribeiro11075%2Fbauta/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"}},{"old_version":"\u003c49.0.0,\u003e=48.0.1","new_version":"\u003e=48.0.1,\u003c51.0.0","update_type":"patch","path":null,"pr_created_at":"2026-09-21T12:10:18.000Z","version_change":"\u003c49.0.0,\u003e=48.0.1 → \u003e=48.0.1,\u003c51.0.0","issue":{"uuid":"5526786470","node_id":"PR_kwDOSyHRgs8AAAABEanxKw","number":89,"state":"closed","title":"chore(deps): update cryptography requirement from \u003c49.0.0,\u003e=48.0.1 to \u003e=48.0.1,\u003c51.0.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-09-21T20:59:37.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-21T12:10:18.000Z","updated_at":"2026-09-21T20:59:47.000Z","time_to_close":31759,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"cryptography","old_version":"\u003c49.0.0,\u003e=48.0.1","new_version":"\u003e=48.0.1,\u003c51.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/commits/50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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\u003c/details\u003e","html_url":"https://github.com/thalovant/thalovant-python-sdk/pull/89","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalovant%2Fthalovant-python-sdk/issues/89","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/89/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-20T18:19:37.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5519620660","node_id":"PR_kwDOT6dLns8AAAABEU-lYg","number":7,"state":"closed","title":"Bump the runtime-and-build group across 1 directory with 43 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-27T18:16:24.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-20T18:19:37.000Z","updated_at":"2026-09-27T18:16:26.000Z","time_to_close":604607,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"runtime-and-build","update_count":43,"packages":[{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"sqlalchemy","old_version":"2.0.51","new_version":"2.0.54","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"alembic","old_version":"1.19.1","new_version":"1.20.0","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.14.2","new_version":"4.15.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"charset-normalizer","old_version":"3.4.9","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.4.2","new_version":"8.5.0","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"gitpython","old_version":"3.1.58","new_version":"3.1.62","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"greenlet","old_version":"3.5.4","new_version":"3.5.6","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.18","new_version":"3.20","repository_url":"https://github.com/kjd/idna"},{"name":"joblib","old_version":"1.5.3","new_version":"1.6.0","repository_url":"https://github.com/joblib/joblib"},{"name":"narwhals","old_version":"2.24.0","new_version":"2.26.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"neo4j","old_version":"6.2.0","new_version":"6.3.1","repository_url":"https://github.com/neo4j/neo4j-python-driver"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.49.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.12.1","new_version":"5.13.0","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"scikit-learn","old_version":"1.9.0","new_version":"1.9.1","repository_url":"https://github.com/scikit-learn/scikit-learn"},{"name":"sse-starlette","old_version":"3.4.8","new_version":"3.4.11","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"threadpoolctl","old_version":"3.6.0","new_version":"3.7.0","repository_url":"https://github.com/joblib/threadpoolctl"},{"name":"typing-inspection","old_version":"0.4.2","new_version":"0.4.4","repository_url":"https://github.com/pydantic/typing-inspection"},{"name":"urllib3","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"websockets","old_version":"17.0.1","new_version":"17.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"ast-serialize","old_version":"0.8.0","new_version":"0.11.2","repository_url":"https://github.com/mypyc/ast_serialize"},{"name":"build","old_version":"1.5.0","new_version":"1.6.1","repository_url":"https://github.com/pypa/build"},{"name":"coverage","old_version":"7.15.4","new_version":"7.16.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"googleapis-common-protos","old_version":"1.75.1","new_version":"1.75.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.83.0","new_version":"1.84.0","repository_url":"https://github.com/grpc/grpc"},{"name":"httpcore2","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"httpx2","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"mcp","old_version":"2.0.0","new_version":"2.2.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mcp-types","old_version":"2.0.0","new_version":"2.2.0","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pip-tools","old_version":"7.6.0","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"platformdirs","old_version":"4.11.1","new_version":"4.11.9","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"protobuf","old_version":"7.35.1","new_version":"7.36.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pyproject-hooks","old_version":"1.2.0","new_version":"1.3.3","repository_url":"https://github.com/pypa/pyproject-hooks"},{"name":"reportlab","old_version":"5.0.0","new_version":"5.0.1"},{"name":"ruff","old_version":"0.16.2","new_version":"0.16.8","repository_url":"https://github.com/astral-sh/ruff"},{"name":"wheel","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"}],"path":null,"ecosystem":"pip"},"body":"Bumps the runtime-and-build group with 43 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.51` | `2.0.54` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.19.1` | `1.20.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.2` | `4.15.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.9` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.4.2` | `8.5.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.58` | `3.1.62` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.4` | `3.5.6` |\n| [idna](https://github.com/kjd/idna) | `3.18` | `3.20` |\n| [joblib](https://github.com/joblib/joblib) | `1.5.3` | `1.6.0` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.24.0` | `2.26.0` |\n| [neo4j](https://github.com/neo4j/neo4j-python-driver) | `6.2.0` | `6.3.1` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.49.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.12.1` | `5.13.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [scikit-learn](https://github.com/scikit-learn/scikit-learn) | `1.9.0` | `1.9.1` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.4.8` | `3.4.11` |\n| [threadpoolctl](https://github.com/joblib/threadpoolctl) | `3.6.0` | `3.7.0` |\n| [typing-inspection](https://github.com/pydantic/typing-inspection) | `0.4.2` | `0.4.4` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.7.0` | `2.8.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.1` | `0.53.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `17.0.1` | `17.1` |\n| [ast-serialize](https://github.com/mypyc/ast_serialize) | `0.8.0` | `0.11.2` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.6.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.4` | `7.16.1` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.75.1` | `1.75.3` |\n| [grpcio](https://github.com/grpc/grpc) | `1.83.0` | `1.84.0` |\n| [httpcore2](https://github.com/pydantic/httpx2) | `2.10.0` | `2.13.0` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.10.0` | `2.13.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `2.0.0` | `2.2.0` |\n| [mcp-types](https://github.com/modelcontextprotocol/python-sdk) | `2.0.0` | `2.2.0` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.6.0` | `7.6.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.11.1` | `4.11.9` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `7.35.1` | `7.36.1` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [pyproject-hooks](https://github.com/pypa/pyproject-hooks) | `1.2.0` | `1.3.3` |\n| [reportlab](https://www.reportlab.com/) | `5.0.0` | `5.0.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.2` | `0.16.8` |\n| [wheel](https://github.com/pypa/wheel) | `0.47.0` | `0.48.0` |\n\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.51 to 2.0.54\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.54\u003c/h1\u003e\n\u003cp\u003eReleased: September 15, 2026\u003c/p\u003e\n\u003ch2\u003eplatform\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [change]\u003c/strong\u003e Binary wheels are no longer built for Python 3.7.  PyPI now rejects wheel\nfiles whose filename does not begin with the normalized project name, and\nthe packaging tools that can be installed on Python 3.7 do not produce\nsuch a filename.  As a result, SQLAlchemy 2.0.44 was the last release to\npublish Python 3.7 wheels to PyPI, and releases 2.0.45 and later have\nbeen available on Python 3.7 only as a source distribution; the wheel\nbuilds for Python 3.7 are now removed.  Python 3.7 remains supported by\nthe 2.0 series.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [bug]\u003c/strong\u003e Fixed issue where the Cython extensions were compiled without the\n\u003ccode\u003efreethreading_compatible\u003c/code\u003e directive, so that they did not declare\nthemselves as safe to run without the GIL.  On a free-threaded Python\ninterpreter such as Python 3.13t or 3.14t, importing SQLAlchemy would\ncause the interpreter to re-enable the GIL, emitting a\n\u003ccode\u003eRuntimeWarning\u003c/code\u003e.  The directive is now set when building for Python\n3.13 and above, and a test has been added which confirms that importing\nSQLAlchemy on a free-threaded build does not enable the GIL.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13592\"\u003e#13592\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e2.0.53\u003c/h1\u003e\n\u003cp\u003eReleased: September 14, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where an expression passed to \u003ccode\u003e_orm.with_expression()\u003c/code\u003e\nthat embedded a \u003ccode\u003e_sql.select()\u003c/code\u003e, such as a correlated\n\u003ccode\u003e_sql.exists()\u003c/code\u003e, would fail to populate the attribute correctly on\nthe second and subsequent executions of an otherwise identical\nstatement, when the \u003ccode\u003e_orm.query_expression()\u003c/code\u003e attribute was loaded\nby a relationship loader that emits a second query, i.e.\n\u003ccode\u003e_orm.selectinload()\u003c/code\u003e, \u003ccode\u003e_orm.lazyload()\u003c/code\u003e or\n\u003ccode\u003e_orm.immediateload()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13560\"\u003e#13560\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed memory issue where mapped classes, along with their\n\u003ccode\u003eTable\u003c/code\u003e and \u003ccode\u003e_orm.Mapper\u003c/code\u003e objects, would not be garbage\ncollected after the \u003ccode\u003e_orm.registry\u003c/code\u003e in which they were mapped had\nbeen disposed and dereferenced.  The issue would occur for mappings that\nmade use of \u003ccode\u003e_orm.relationship()\u003c/code\u003e together with constructs such as an\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.19.1 to 1.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.20.0\u003c/h1\u003e\n\u003cp\u003eReleased: September 11, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [batch]\u003c/strong\u003e Added a warning for the case where an unnamed CHECK constraint on a\nreflected table is omitted from a batch \u0026quot;recreate\u0026quot; operation.  An unnamed\nCHECK constraint can't be reliably carried over in a batch recreate\nas it may refer to columns that are being dropped or changed.  This\nomission was previously a silent operation.   The presence of any\n\u003ccode\u003e~sqlalchemy.schema.CheckConstraint\u003c/code\u003e in\n\u003ccode\u003eOperations.batch_alter_table.table_args\u003c/code\u003e is taken to indicate\nthat the case has been accommodated, and no warning is emitted.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1846\"\u003e#1846\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [autogenerate]\u003c/strong\u003e Autogenerate now renders a warning comment above any rendered\n\u003ccode\u003eOperations.drop_constraint()\u003c/code\u003e directive for which the constraint name\nis \u003ccode\u003eNone\u003c/code\u003e, as is the case when a constraint that has no name in the model\nis dropped, most typically within the \u003ccode\u003edowngrade()\u003c/code\u003e function of a\nmigration that adds an unnamed constraint.  A warning is also emitted on\nthe console when the migration script is generated.   The directive\nrequires a non-None name in order to be able to emit a \u0026quot;DROP CONSTRAINT\u0026quot;\ncommand.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/916\"\u003e#916\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where adding a column with a type that generates\nits own CHECK constraint, such as \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or\n\u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e with\n\u003ccode\u003e~sqlalchemy.types.Boolean.create_constraint\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e,\nwould emit the constraint twice when the table was recreated, once under\nthe name generated by the naming convention in use and once under the\nname given to the type.  The constraint is now emitted once, using the\nsame name that would be used outside of batch mode.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1768\"\u003e#1768\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where a CHECK constraint generated by a type such\nas \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or \u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e\nwould lose the name established for it by the naming convention in use\nwhen the table was recreated, as the constraint was regenerated against\nthe temporary table used for the recreate operation.  The naming\nconvention is now resolved against the name of the table being replaced.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.2 to 4.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplemented a compatibility fix for supporting direct access of \u003ccode\u003eanyio.*\u003c/code\u003e submodules from the main package even when those submodules were not directly imported first (\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311\"\u003e#1311\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311%5C%3E\"\u003eagronholm/anyio#1311\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for the newer keyword-only arguments on \u003ccode\u003eanyio.Path\u003c/code\u003e methods to match the standard library \u003ccode\u003epathlib.Path\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eexists()\u003c/code\u003e (Python 3.12+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_dir()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_file()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eowner()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003egroup()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enewline\u003c/code\u003e on \u003ccode\u003eread_text()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1286\"\u003e#1286\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1293\"\u003e#1293\u003c/a\u003e; PR by \u003ca href=\"https://github.com/jaideeppyne\"\u003e\u003ccode\u003e@​jaideeppyne\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eamap\u003c/code\u003e, \u003ccode\u003egather\u003c/code\u003e, and \u003ccode\u003eas_completed\u003c/code\u003e utility functions to simplify common patterns (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1173\"\u003e#1173\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003e--anyio-mode\u003c/code\u003e command-line option as an alternative to the \u003ccode\u003eanyio_mode\u003c/code\u003e ini setting, and fix the pytest plugin's auto mode detection to recognize the mode when set via either mechanism(e.g: \u003ccode\u003epytest_asyncio\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1242\"\u003e#1242\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003eanyio.Future\u003c/code\u003e synchronization primitive which behaves similar to \u003ccode\u003easyncio.Future\u003c/code\u003e, allowing tasks to wait for a value (or exception) from another task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1146\"\u003e#1146\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded guidance for managing multiple memory object stream producers and consumers with cloned streams (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/330\"\u003e#330\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nightcityblade\"\u003e\u003ccode\u003e@​nightcityblade\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eStapledObjectStream.send_nowait()\u003c/code\u003e that delegates to the underlying \u003ccode\u003eObjectSendStream\u003c/code\u003e, if it implements it (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1241\"\u003e#1241\u003c/a\u003e; PR by \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003emove_on_at()\u003c/code\u003e and \u003ccode\u003efail_at()\u003c/code\u003e functions to complement \u003ccode\u003emove_on_after()\u003c/code\u003e and \u003ccode\u003efail_after()\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the default name for a task spawned with \u003ccode\u003eTaskGroup.create_task(func())\u003c/code\u003e to match the default task name for the analogous task spawned with \u003ccode\u003eTaskGroup.start_soon(func)\u003c/code\u003e or \u003ccode\u003eTaskGroup.start(func)\u003c/code\u003e in more situations. Previously, the default name of a \u003ccode\u003eTaskGroup.create_task\u003c/code\u003e task never included the module name. (The default name for a task spawned with \u003ccode\u003eTaskGroup.start_soon\u003c/code\u003e or \u003ccode\u003eTaskGroup.start\u003c/code\u003e typically includes the module name.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1234\"\u003e#1234\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the \u003ccode\u003eanyio\u003c/code\u003e and \u003ccode\u003eanyio.abc\u003c/code\u003e modules to lazily (much like \u003ccode\u003e810\u003c/code\u003e) import the necessary submodules. This is done by parsing the AST of the module and building a lookup table from the \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block. A fallback mode has been provided for installations where the source code is unavailable (e.g. PyInstaller). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1169\"\u003e#1169\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed free-threading compatibility issues arising from the fact that on Python 3.14 free-threading builds, newly created threads inherit the current context by default, causing AnyIO to behave erroneously in relation to \u003ccode\u003estart_blocking_portal()\u003c/code\u003e and \u003ccode\u003eanyio.to_thread.run_sync()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1224\"\u003e#1224\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eSpooledTemporaryFile.readinto()\u003c/code\u003e and \u003ccode\u003ereadinto1()\u003c/code\u003e reading twice before rollover, so the destination buffer was overwritten by the second read and the file position advanced twice, silently losing data (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1215\"\u003e#1215\u003c/a\u003e; PR by \u003ca href=\"https://github.com/c-tonneslan\"\u003e\u003ccode\u003e@​c-tonneslan\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003efail_after\u003c/code\u003e (and the new \u003ccode\u003efail_at\u003c/code\u003e) allowing for added exception context when raising \u003ccode\u003eTimeoutError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1227\"\u003e#1227\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the default \u003ccode\u003eTaskHandle.name\u003c/code\u003e missing part of the task name for tasks started with \u003ccode\u003eTaskGroup.start\u003c/code\u003e on Trio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1231\"\u003e#1231\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.run\u003c/code\u003e leaking, or at least, delaying collection of loop and root_task due to the root task being cached in a \u003ccode\u003eRunVar\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1203\"\u003e#1203\u003c/a\u003e; PR by \u003ca href=\"https://github.com/tapetersen\"\u003e\u003ccode\u003e@​tapetersen\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.Path.with_stem()\u003c/code\u003e silently producing a wrong path (e.g. \u003ccode\u003ePath(\u0026quot;.txt\u0026quot;)\u003c/code\u003e) instead of raising \u003ccode\u003eValueError\u003c/code\u003e when given an empty stem on a path with a non-empty suffix, unlike \u003ccode\u003epathlib.PurePath.with_stem\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1200\"\u003e#1200\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eUNIXSocketStream.aclose()\u003c/code\u003e raising \u003ccode\u003easyncio.InvalidStateError\u003c/code\u003e when a concurrent receive or send operation had just been cancelled on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1267\"\u003e#1267\u003c/a\u003e; PR by \u003ca href=\"https://github.com/alloutflo\"\u003e\u003ccode\u003e@​alloutflo\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the pytest plugin importing the deprecated \u003ccode\u003e_pytest.python.CallSpec2\u003c/code\u003e alias, which triggers \u003ccode\u003ePytestRemovedIn10Warning\u003c/code\u003e on \u003ccode\u003epytest\u0026gt;=9.2\u003c/code\u003e and crashes pytest at startup when \u003ccode\u003efilterwarnings = error\u003c/code\u003e is configured (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1271\"\u003e#1271\u003c/a\u003e; PR by \u003ca href=\"https://github.com/matthewfeickert\"\u003e\u003ccode\u003e@​matthewfeickert\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an asyncio worker thread race that could raise \u003ccode\u003eRuntimeError\u003c/code\u003e when the event loop closed between checking its state and scheduling the worker result (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1265\"\u003e#1265\u003c/a\u003e; PR by \u003ca href=\"https://github.com/hansu650\"\u003e\u003ccode\u003e@​hansu650\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens when \u003ccode\u003etotal_tokens\u003c/code\u003e was raised while the limiter was over-subscribed (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1223\"\u003e#1223\u003c/a\u003e; PR by \u003ca href=\"https://github.com/zelinewang\"\u003e\u003ccode\u003e@​zelinewang\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffcd1542cd6d127980205f90a0100078849dd703\"\u003e\u003ccode\u003effcd154\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/0ecf5ed98d294242509b043ebd1a0843e52d892f\"\u003e\u003ccode\u003e0ecf5ed\u003c/code\u003e\u003c/a\u003e Added a workaround for third party code accessing unimported submodules (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/928366259543412a2deb1e2ba09ea45ffa92ef4f\"\u003e\u003ccode\u003e9283662\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d137692a90f76e4f71605e32ea5ca94cab3a539d\"\u003e\u003ccode\u003ed137692\u003c/code\u003e\u003c/a\u003e Improved the instructions for AI agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/033fc52b8fa8e90c5d0ef24b10b3860e974a6265\"\u003e\u003ccode\u003e033fc52\u003c/code\u003e\u003c/a\u003e Shield TemporaryDirectory cleanup from cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1304\"\u003e#1304\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/942e9a6552cc10b5aaa779d84bfc8e2c3d5fcffc\"\u003e\u003ccode\u003e942e9a6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1305\"\u003e#1305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b825c3be7cb4ca1a8000b8065d4e147843deb704\"\u003e\u003ccode\u003eb825c3b\u003c/code\u003e\u003c/a\u003e Fixed pyproject.toml changes not triggering the test suite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9727dc504681e2986b5bc285de9571fb467539af\"\u003e\u003ccode\u003e9727dc5\u003c/code\u003e\u003c/a\u003e Fixed start inconsistencies between trio and asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b05fe6d160a640355c201363cab286a7d2581da8\"\u003e\u003ccode\u003eb05fe6d\u003c/code\u003e\u003c/a\u003e Fixed wrong type in move_on_after (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1297\"\u003e#1297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44d0c93cc20079acbf38ba4dbed5ab9df323f153\"\u003e\u003ccode\u003e44d0c93\u003c/code\u003e\u003c/a\u003e Fixed asyncio task group coroutine cleanup (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.2...4.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.9 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.9...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.2 to 8.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.5.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.5.0/\"\u003ehttps://pypi.org/project/click/8.5.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-5-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-5-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/33\"\u003ehttps://github.com/pallets/click/milestone/33\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2672\"\u003e#2672\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3637\"\u003e#3637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2986\"\u003e#2986\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3505\"\u003e#3505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2983\"\u003e#2983\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3473\"\u003e#3473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when \u003ca href=\"https://redirect.github.com/pallets/click/issues/2969\"\u003e#2969\u003c/a\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3572\"\u003e#3572\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3653\"\u003e#3653\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2877\"\u003e#2877\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3642\"\u003e#3642\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/3581\"\u003e#3581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3677\"\u003e#3677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2819\"\u003e#2819\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3678\"\u003e#3678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3681\"\u003e#3681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.5.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-08-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. {issue}\u003ccode\u003e2672\u003c/code\u003e {pr}\u003ccode\u003e3637\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. {issue}\u003ccode\u003e2986\u003c/code\u003e {pr}\u003ccode\u003e3505\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. {issue}\u003ccode\u003e2983\u003c/code\u003e {pr}\u003ccode\u003e3473\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when {pr}\u003ccode\u003e2969\u003c/code\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. {issue}\u003ccode\u003e3572\u003c/code\u003e {pr}\u003ccode\u003e3653\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix test failures when using pytest \u0026gt;= 9.1. {pr}\u003ccode\u003e3656\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. {issue}\u003ccode\u003e2877\u003c/code\u003e {pr}\u003ccode\u003e3642\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). {pr}\u003ccode\u003e3581\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. {pr}\u003ccode\u003e3677\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n{issue}\u003ccode\u003e2819\u003c/code\u003e {pr}\u003ccode\u003e3678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. {pr}\u003ccode\u003e3681\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\ntime. {pr}\u003ccode\u003e3641\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eget_binary_stream\u003c/code\u003e and {func}\u003ccode\u003eget_text_stream\u003c/code\u003e are deprecated and\nwill be removed in Click 9.0. {issue}\u003ccode\u003e3481\u003c/code\u003e {pr}\u003ccode\u003e3695\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe following \u003ccode\u003eclick.utils\u003c/code\u003e names were never intentionally public and are\nnow private (\u003ccode\u003e_\u003c/code\u003e-prefixed). The old names remain available with a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e until Click 9.0: \u003ccode\u003eLazyFile\u003c/code\u003e, \u003ccode\u003eKeepOpenFile\u003c/code\u003e,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8b19813f2bfca99f1018a587a8cf54fc959f2e5d\"\u003e\u003ccode\u003e8b19813\u003c/code\u003e\u003c/a\u003e Release version 8.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2c8cd3ac958a7eb316d67f2d316c27086c4c0369\"\u003e\u003ccode\u003e2c8cd3a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3778\"\u003e#3778\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/131c86aadddfa5cb6dca8339c9d6294c4eacb8ac\"\u003e\u003ccode\u003e131c86a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e1fd5946ab26aaf372009eaff1acf947140b40fb\"\u003e\u003ccode\u003ee1fd594\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a1d87858abd77fa8e3ffc204670ccd75b96c4781\"\u003e\u003ccode\u003ea1d8785\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2103e157683c5e4cadc8ee1838df526a54bde9a4\"\u003e\u003ccode\u003e2103e15\u003c/code\u003e\u003c/a\u003e Forward all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e and improve flag detection (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3777\"\u003e#3777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a6256bfb5971d5e58585fe7b6c656134e1ade5a4\"\u003e\u003ccode\u003ea6256bf\u003c/code\u003e\u003c/a\u003e Forwards all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/61b69e967e525bd502f5bf42def4d551e761fe0e\"\u003e\u003ccode\u003e61b69e9\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3776\"\u003e#3776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/9835b0f7612d1b1ea180a975fd6d24cf16791ba8\"\u003e\u003ccode\u003e9835b0f\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f36d58bbd7f188178de2d4fe1d0292c510375ca7\"\u003e\u003ccode\u003ef36d58b\u003c/code\u003e\u003c/a\u003e Refactor pager stream handling (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3767\"\u003e#3767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.2...8.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gitpython` from 3.1.58 to 3.1.62\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gitpython-developers/GitPython/releases\"\u003egitpython's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.62\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare next release by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2222\"\u003egitpython-developers/GitPython#2222\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep bare-repository worktrees non-bare by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2224\"\u003egitpython-developers/GitPython#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject unsafe submodule checkout paths by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2225\"\u003egitpython-developers/GitPython#2225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e from v0.16.0 to 0.16.5 in the pre-commit group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2226\"\u003egitpython-developers/GitPython#2226\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: join backslash line continuations when reading config values by \u003ca href=\"https://github.com/nkbeast\"\u003e\u003ccode\u003e@​nkbeast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2227\"\u003egitpython-developers/GitPython#2227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nkbeast\"\u003e\u003ccode\u003e@​nkbeast\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2227\"\u003egitpython-developers/GitPython#2227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.61...3.1.62\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.61...3.1.62\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.1.61\u003c/h2\u003e\n\u003cp\u003eFix accidental removal of exploitable regex in \u003ccode\u003eActor\u003c/code\u003e by bringing it back, and deprecating it.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix repository discovery precedence by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2218\"\u003egitpython-developers/GitPython#2218\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: wait for git daemon to listen before connecting by \u003ca href=\"https://github.com/Vogtinator\"\u003e\u003ccode\u003e@​Vogtinator\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2219\"\u003egitpython-developers/GitPython#2219\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: restore Actor.name_email_regex by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2221\"\u003egitpython-developers/GitPython#2221\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Vogtinator\"\u003e\u003ccode\u003e@​Vogtinator\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2219\"\u003egitpython-developers/GitPython#2219\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.60...3.1.61\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.60...3.1.61\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.1.60 Security\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare changelog prior to release by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2212\"\u003egitpython-developers/GitPython#2212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve Git config escape semantics by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2213\"\u003egitpython-developers/GitPython#2213\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHarden diff path and actor identity parsing by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2215\"\u003egitpython-developers/GitPython#2215\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequire explicit opt-in for filesystem diffs by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2217\"\u003egitpython-developers/GitPython#2217\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.59...3.1.60\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.59...3.1.60\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.1.59 - Security\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eprepare changelog for upcoming release by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2207\"\u003egitpython-developers/GitPython#2207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlock file-reading Git options by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2208\"\u003egitpython-developers/GitPython#2208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eindex: write blobs via git hash-object, not gitdb's odb.store by \u003ca href=\"https://github.com/caroescm\"\u003e\u003ccode\u003e@​caroescm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2209\"\u003egitpython-developers/GitPython#2209\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlock separate git directories during clone by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2210\"\u003egitpython-developers/GitPython#2210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: harden config parsing boundaries by \u003ca href=\"https://github.com/Byron\"\u003e\u003ccode\u003e@​Byron\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2211\"\u003egitpython-developers/GitPython#2211\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erepo.index.add()\u003c/code\u003e now respects worktree filters  \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/pull/2209\"\u003egitpython-developers/GitPython#2209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.58...3.1.59\"\u003ehttps://github.com/gitpython-developers/GitPython/compare/3.1.58...3.1.59\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/db47516dac750c5968b8f6d388b18712c355df50\"\u003e\u003ccode\u003edb47516\u003c/code\u003e\u003c/a\u003e prepare new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/10ec385a725fee70def3d9bb7b52208e75174068\"\u003e\u003ccode\u003e10ec385\u003c/code\u003e\u003c/a\u003e get better commit messages from agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/b7548979693b3f7c8d13b8da2b7c3ecef07327da\"\u003e\u003ccode\u003eb754897\u003c/code\u003e\u003c/a\u003e test: cover subdirectory discovery and pathspec commands in bare-repo worktre...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/9ebf8b62dfb9ca05178334dc909a4d9a52b505df\"\u003e\u003ccode\u003e9ebf8b6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2227\"\u003e#2227\u003c/a\u003e from nkbeast/fix-config-backslash-continuation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/a15f7910d1d9a169b5a0c7adf14ce9bf4ede35d0\"\u003e\u003ccode\u003ea15f791\u003c/code\u003e\u003c/a\u003e fix: parse joined config values as a whole\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/60dd9467a73140e00b0d1b0857df5176660b3832\"\u003e\u003ccode\u003e60dd946\u003c/code\u003e\u003c/a\u003e fix: ignore continuation markers in config comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/075a664f3da8564c44f2b74536914b9ce9fb4cc1\"\u003e\u003ccode\u003e075a664\u003c/code\u003e\u003c/a\u003e fix: join backslash line continuations when reading config values\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/62d1e2f63ec51f868781c79f8280dc90b46af987\"\u003e\u003ccode\u003e62d1e2f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2226\"\u003e#2226\u003c/a\u003e from gitpython-developers/dependabot/pre_commit/pre-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/23d0e9269c84573129acd1f90dbedf639e889c8f\"\u003e\u003ccode\u003e23d0e92\u003c/code\u003e\u003c/a\u003e build(deps): bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gitpython-developers/GitPython/commit/8a14adc62401f6b3cb8d9dcf8fa78615810a7e98\"\u003e\u003ccode\u003e8a14adc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gitpython-developers/GitPython/issues/2225\"\u003e#2225\u003c/a\u003e from gitpython-developers/submodule-path-hardening\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gitpython-developers/GitPython/compare/3.1.58...3.1.62\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.5.4 to 3.5.6\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.5.6 (2026-09-14)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect a race condition that could lead to garbage collection\nunintentionally being disabled. See \u003ccode\u003ePR 529 \u0026lt;https://github.com/python-greenlet/greenlet/pull/529\u0026gt;\u003c/code\u003e_ by Yurii.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.5 (2026-08-10)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eLink the C++ runtime statically into the Windows wheels again, as the\nAppveyor builds did through 3.3.0. Since 3.3.1 \u003ccode\u003e_greenlet.pyd\u003c/code\u003e\nimported \u003ccode\u003eMSVCP140.dll\u003c/code\u003e, which no Windows CPython distribution ships,\nso importing greenlet failed on machines without the Visual C++\nredistributable. See \u003ccode\u003eissue 525 \u0026lt;https://github.com/python-greenlet/greenlet/issues/525\u0026gt;\u003c/code\u003e_. Issue\nand pull request by Daniel Sticker.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. note::\nBinary 3.15 wheels are now built with 3.15.0rc1. This should be\ncompatible with future 3.15 releases and is believed compatible\nwith 3.15b4 as well (but not earlier versions).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/abfe740315a9926ff180c622cf02f122c07f9126\"\u003e\u003ccode\u003eabfe740\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e23e3e47df21bbc7a83219621ce4966d349f7d2b\"\u003e\u003ccode\u003ee23e3e4\u003c/code\u003e\u003c/a\u003e Change note for \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8de830f6df6fefd533fedbe4bb0a2028bcf77372\"\u003e\u003ccode\u003e8de830f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e from Georggi/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/72d7cacf4cf667f92786db306be095b6041bca5a\"\u003e\u003ccode\u003e72d7cac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/530\"\u003e#530\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ac01b7d1a6b3a4d2477c17a1047af6d0056d69a7\"\u003e\u003ccode\u003eac01b7d\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e18f5a6d2696c031d34cf4933dcdd6a8e37f6f85\"\u003e\u003ccode\u003ee18f5a6\u003c/code\u003e\u003c/a\u003e Simplify GCDisabledGuard constructor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6aaf3af698aa7789075a904e5bbb70e24df06553\"\u003e\u003ccode\u003e6aaf3af\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ddb14535002029347139ce137c137a04eecf61c5\"\u003e\u003ccode\u003eddb1453\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/7de515cc948fcbca31abc672e0db9bf5d51460a5\"\u003e\u003ccode\u003e7de515c\u003c/code\u003e\u003c/a\u003e Update CHANGES: Credit for issue 525 and note about 3.15 binary wheels [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/f3746aa53b16a2a13e8894e3fd91a13c4578a428\"\u003e\u003ccode\u003ef3746aa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/526\"\u003e#526\u003c/a\u003e from stickerdaniel/windows-static-runtime\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.4...3.5.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.18 to 3.20\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/releases\"\u003eidna's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.20\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 18.0.0.\u003c/li\u003e\n\u003cli\u003eBetter enforcement of the domain length limit in the incremental\ncodec.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.19\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestore the \u003ccode\u003estd3_rules\u003c/code\u003e option, which had no effect since changes\nto UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e processing in Unicode 16. Note that \u003ccode\u003euts46_remap()\u003c/code\u003e\ndefaults to enabling STD3 rules, so direct callers will see input\ncontaining non-LDH ASCII characters rejected again.\u003c/li\u003e\n\u003cli\u003ePerformance improvements to UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e mapping, particularly for\nASCII-only domains.\u003c/li\u003e\n\u003cli\u003eTest on free-threaded CPython with the GIL disabled and document\nthread safety.\u003c/li\u003e\n\u003cli\u003eExpose the Unicode version of the generated tables as\n\u003ccode\u003eidna.unicode_version\u003c/code\u003e, and show it in \u003ccode\u003eidna --version\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecode\u003c/code\u003e, \u003ccode\u003etext\u003c/code\u003e, \u003ccode\u003ecodepoint\u003c/code\u003e and \u003ccode\u003eposition\u003c/code\u003e attributes to\n\u003ccode\u003eIDNAError\u003c/code\u003e so that the failed rule and the offending character can\nbe identified without parsing the exception message.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003etransitional\u003c/code\u003e argument to \u003ccode\u003eencode()\u003c/code\u003e and\n\u003ccode\u003euts46_remap()\u003c/code\u003e is now completely ignored, and gives a deprecation warning\nfor the latter.\u003c/li\u003e\n\u003cli\u003eReject A-labels that are not the canonical Punycode encoding of\ntheir U-label.\u003c/li\u003e\n\u003cli\u003eFix CONTEXTJ violations raising \u003ccode\u003eIDNAError\u003c/code\u003e instead of\n\u003ccode\u003eInvalidCodepointContext\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eConsistently raise \u003ccode\u003eIDNAError\u003c/code\u003e for empty labels and non-ASCII bytes\npassed to label helper functions and the incremental codec.\u003c/li\u003e\n\u003cli\u003eAdd property-based tests, extended fuzzing targets, coverage\nmeasurement, and CI checks that the data tables match the generator\noutput.\u003c/li\u003e\n\u003cli\u003eVarious code quality and tooling improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for\ncontributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.md\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.20 (2026-09-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 18.0.0.\u003c/li\u003e\n\u003cli\u003eBetter enforcement of the domain length limit in the incremental\ncodec.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.19 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestore the \u003ccode\u003estd3_rules\u003c/code\u003e option, which had no effect since changes\nto UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e processing in Unicode 16. Note that \u003ccode\u003euts46_remap()\u003c/code\u003e\ndefaults to enabling STD3 rules, so direct callers will see input\ncontaining non-LDH ASCII characters rejected again.\u003c/li\u003e\n\u003cli\u003ePerformance improvements to UTS \u003ca href=\"https://redirect.github.com/kjd/idna/issues/46\"\u003e#46\u003c/a\u003e mapping, particularly for\nASCII-only domains.\u003c/li\u003e\n\u003cli\u003eTest on free-threaded CPython with the GIL disabled and document\nthread safety.\u003c/li\u003e\n\u003cli\u003eExpose the Unicode version of the generated tables as\n\u003ccode\u003eidna.unicode_version\u003c/code\u003e, and show it in \u003ccode\u003eidna --version\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecode\u003c/code\u003e, \u003ccode\u003etext\u003c/code\u003e, \u003ccode\u003ecodepoint\u003c/code\u003e and \u003ccode\u003eposition\u003c/code\u003e attributes to\n\u003ccode\u003eIDNAError\u003c/code\u003e so that the failed rule and the offending character can\nbe identified without parsing the exception message.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003etransitional\u003c/code\u003e argument to \u003ccode\u003eencode()\u003c/code\u003e and\n\u003ccode\u003euts46_remap()\u003c/code\u003e is now completely ignored, and gives a deprecation warning\nfor the latter.\u003c/li\u003e\n\u003cli\u003eReject A-labels that are not the canonical Punycode encoding of\ntheir U-label.\u003c/li\u003e\n\u003cli\u003eFix CONTEXTJ violations raising \u003ccode\u003eIDNAError\u003c/code\u003e instead of\n\u003ccode\u003eInvalidCodepointContext\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eConsistently raise \u003ccode\u003eIDNAError\u003c/code\u003e for empty labels and non-ASCII bytes\npassed to label helper functions and the incremental codec.\u003c/li\u003e\n\u003cli\u003eAdd property-based tests, extended fuzzing targets, coverage\nmeasurement, and CI checks that the data tables match the generator\noutput.\u003c/li\u003e\n\u003cli\u003eVarious code quality and tooling improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for\ncontributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d55e65e1a3b1ede7f556bc202738066f5597e249\"\u003e\u003ccode\u003ed55e65e\u003c/code\u003e\u003c/a\u003e Release 3.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0c0824a928e50048e59d4ce55fe760dba30528bc\"\u003e\u003ccode\u003e0c0824a\u003c/code\u003e\u003c/a\u003e Pre-release 3.20rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/bd7c316a08761c79ba557b5b9e6a3da24d71fa88\"\u003e\u003ccode\u003ebd7c316\u003c/code\u003e\u003c/a\u003e Note Python 3.15 support in the 3.20 changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b6cce8523eae3442aba976f01607b1cdf797c6ff\"\u003e\u003ccode\u003eb6cce85\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/276\"\u003e#276\u003c/a\u003e from kjd/unicode-18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/9a4bc59e9d5ab89e7916fc0a50650cb55e3faf26\"\u003e\u003ccode\u003e9a4bc59\u003c/code\u003e\u003c/a\u003e Update to Unicode 18.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/dfab5a06affddcc7781a7bbab1cac1bb7d3b4e05\"\u003e\u003ccode\u003edfab5a0\u003c/code\u003e\u003c/a\u003e Merge branch 'python-3.15'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/417c35496ccbffad4b0a434ac9b563ee6f8fa0a9\"\u003e\u003ccode\u003e417c354\u003c/code\u003e\u003c/a\u003e Read the latest Unicode version from the DerivedAge.txt header instead of the...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/cd1739200f3bf07871372bcb31c271de136eaccf\"\u003e\u003ccode\u003ecd17392\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/274\"\u003e#274\u003c/a\u003e from kjd/fix-decode-length-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c5796d79d44c76a54f03e8938dd22edaa1221c27\"\u003e\u003ccode\u003ec5796d7\u003c/code\u003e\u003c/a\u003e Skip the decode round-trip check for domains past encode's length limit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d6ee690bf133e874351103b9fe838fdda2a7a09f\"\u003e\u003ccode\u003ed6ee690\u003c/code\u003e\u003c/a\u003e Update to Python 3.15 release candidate in CI and add trove classifier\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.18...v3.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `joblib` from 1.5.3 to 1.6.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/joblib/joblib/blob/main/CHANGES.rst\"\u003ejoblib's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 1.6.0 - 2026/08/31\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix caching of functions whose source cannot be retrieved, such as functions\ndefined in a notebook cell. Their identity fell back to\n\u003ccode\u003estr(hash(func.__code__))\u003c/code\u003e, which is salted by \u003ccode\u003ePYTHONHASHSEED\u003c/code\u003e and so\ndiffered between processes. A worker reading the \u003ccode\u003efunc_code.py\u003c/code\u003e written by\nanother one concluded that the function had changed and wiped the whole\ncache directory for it, discarding results computed by its peers.\n\u003ccode\u003efunc_code.py\u003c/code\u003e is also no longer rewritten in place, so a reader can no\nlonger catch it half-written and draw the same conclusion.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/issues/1694\"\u003ejoblib/joblib#1694\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop python 3.9 support. The oldest supported Python version\nis now Python 3.10.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1773\"\u003ejoblib/joblib#1773\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eeval_expr\u003c/code\u003e (used to evaluate the \u003ccode\u003epre_dispatch\u003c/code\u003e argument of\n\u003ccode\u003eParallel\u003c/code\u003e) to raise a \u003ccode\u003eValueError\u003c/code\u003e as documented instead of leaking a\n\u003ccode\u003eZeroDivisionError\u003c/code\u003e for expressions that divide or take a modulo by zero.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1810\"\u003ejoblib/joblib#1810\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eMemorizedResult\u003c/code\u003e now forwards \u003ccode\u003emmap_mode\u003c/code\u003e to its store backend, so a\ncached array reconstructed from a location is memory-mapped as requested\ninstead of being loaded fully into memory.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1799\"\u003ejoblib/joblib#1799\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUnvendor cloudpickle to more quickly benefit from maintenance releases\nof cloudpickle\n\u003ca href=\"https://redirect.github.com/joblib/joblib/pull/1775\"\u003ejoblib/joblib#1775\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eMemory.cache\u003c/code\u003e for functions with a keyword-only argument that has a\ndefault declared before a keyword-only argument without a default.\n\u003ca href=\"https://redirect.github.com/joblib/joblib/issue...\n\n_Description has been truncated_","html_url":"https://github.com/Bik4ram/my_project/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bik4ram%2Fmy_project/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-20T06:49:46.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5516302428","node_id":"PR_kwDOQeYl_s8AAAABESeotw","number":586,"state":"open","title":"chore(deps): bump the python-runtime group with 7 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-20T06:49:46.000Z","updated_at":"2026-09-20T06:49:52.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-runtime","update_count":7,"packages":[{"name":"xrpl-py","old_version":"5.0.0","new_version":"5.2.0","repository_url":"https://github.com/XRPLF/xrpl-py"},{"name":"numpy","old_version":"2.2.6","new_version":"2.5.3","repository_url":"https://github.com/numpy/numpy"},{"name":"opencv-python","old_version":"4.13.0.92","new_version":"5.0.0.93","repository_url":"https://github.com/opencv/opencv-python"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"python-dotenv","old_version":"0.21.1","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"aiohttp","old_version":"3.14.1","new_version":"3.14.3","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-runtime group with 7 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [xrpl-py](https://github.com/XRPLF/xrpl-py) | `5.0.0` | `5.2.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.2.6` | `2.5.3` |\n| [opencv-python](https://github.com/opencv/opencv-python) | `4.13.0.92` | `5.0.0.93` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `0.21.1` | `1.2.3` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.14.1` | `3.14.3` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n\nUpdates `xrpl-py` from 5.0.0 to 5.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/XRPLF/xrpl-py/releases\"\u003exrpl-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(coderabbit): reduce review noise and load .ai-review/instructions.md by \u003ca href=\"https://github.com/arshjafri-ripple\"\u003e\u003ccode\u003e@​arshjafri-ripple\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1024\"\u003eXRPLF/xrpl-py#1024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: remove integration test requirement for beta releases by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1039\"\u003eXRPLF/xrpl-py#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e signing prefixes (\u003ccode\u003eSponsor\u003c/code\u003e) by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1036\"\u003eXRPLF/xrpl-py#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Support LendingProtocolV1_1 by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1034\"\u003eXRPLF/xrpl-py#1034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/XRPLF/xrpl-py/compare/v5.1.0...v5.2.0\"\u003ehttps://github.com/XRPLF/xrpl-py/compare/v5.1.0...v5.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.2.0b0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSet dependabot version update frequency to quarterly by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/898\"\u003eXRPLF/xrpl-py#898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease pipeline by \u003ca href=\"https://github.com/shichengripple001\"\u003e\u003ccode\u003e@​shichengripple001\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/876\"\u003eXRPLF/xrpl-py#876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix number serialization by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/900\"\u003eXRPLF/xrpl-py#900\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdates to the Lending-Protocol transactions by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/901\"\u003eXRPLF/xrpl-py#901\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: improve int32 integration by \u003ca href=\"https://github.com/mvadari\"\u003e\u003ccode\u003e@​mvadari\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/902\"\u003eXRPLF/xrpl-py#902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eRequest.from_xrpl\u003c/code\u003e by aliasing it to \u003ccode\u003eRequest.from_dict\u003c/code\u003e by \u003ca href=\"https://github.com/mvadari\"\u003e\u003ccode\u003e@​mvadari\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/892\"\u003eXRPLF/xrpl-py#892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease 4.5.0: release-4.5.0 → main by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/904\"\u003eXRPLF/xrpl-py#904\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd pull request types to unit test workflow by \u003ca href=\"https://github.com/shichengripple001\"\u003e\u003ccode\u003e@​shichengripple001\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/911\"\u003eXRPLF/xrpl-py#911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8 by \u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/917\"\u003eXRPLF/xrpl-py#917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/912\"\u003eXRPLF/xrpl-py#912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: incorrect SField definitions for Lending Protocols and DynamicMPTs by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/918\"\u003eXRPLF/xrpl-py#918\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate trivy-action version by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/922\"\u003eXRPLF/xrpl-py#922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix _calculate_precision by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/924\"\u003eXRPLF/xrpl-py#924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop python 3.9 support by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/940\"\u003eXRPLF/xrpl-py#940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default algorithm in\u003ccode\u003eWallet\u003c/code\u003e class (breaking change) by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/942\"\u003eXRPLF/xrpl-py#942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): quarterly batch dependency upgrade 2026-Q2 by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/995\"\u003eXRPLF/xrpl-py#995\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCollection of bug-fixes by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/993\"\u003eXRPLF/xrpl-py#993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: docker path for integration test by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1003\"\u003eXRPLF/xrpl-py#1003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve significant trailing zeros in \u003ccode\u003eAmount.to_json\u003c/code\u003e for IOU values by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1001\"\u003eXRPLF/xrpl-py#1001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(wallet): infer signing algorithm from seed prefix in Wallet.from_seed / Wallet.from_secret by \u003ca href=\"https://github.com/ckeshava\"\u003e\u003ccode\u003e@​ckeshava\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/999\"\u003eXRPLF/xrpl-py#999\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease 5.0.0: release-5.0.0 → main by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1004\"\u003eXRPLF/xrpl-py#1004\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Batch (XLS-56) V1_1 signing support by \u003ca href=\"https://github.com/Patel-Raj11\"\u003e\u003ccode\u003e@​Patel-Raj11\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1015\"\u003eXRPLF/xrpl-py#1015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: support private xrpld images via committed config file by \u003ca href=\"https://github.com/rrmanukyan\"\u003e\u003ccode\u003e@​rrmanukyan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1019\"\u003eXRPLF/xrpl-py#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: Handle signing fields correctly in definitions generation by \u003ca href=\"https://github.com/mvadari\"\u003e\u003ccode\u003e@​mvadari\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1021\"\u003eXRPLF/xrpl-py#1021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Dynamic MPT (XLS-94d) by \u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/877\"\u003eXRPLF/xrpl-py#877\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand team required-reviewers into individual member logins for Slack notifications by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1029\"\u003eXRPLF/xrpl-py#1029\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport XLS-68 Sponsored Fees and Reserves by \u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1020\"\u003eXRPLF/xrpl-py#1020\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: ConfidentialMPT Support by \u003ca href=\"https://github.com/pdp2121\"\u003e\u003ccode\u003e@​pdp2121\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/919\"\u003eXRPLF/xrpl-py#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelease 5.1.0: release-5.1.0 → main by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1032\"\u003eXRPLF/xrpl-py#1032\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(coderabbit): reduce review noise and load .ai-review/instructions.md by \u003ca href=\"https://github.com/arshjafri-ripple\"\u003e\u003ccode\u003e@​arshjafri-ripple\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1024\"\u003eXRPLF/xrpl-py#1024\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shichengripple001\"\u003e\u003ccode\u003e@​shichengripple001\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/876\"\u003eXRPLF/xrpl-py#876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/904\"\u003eXRPLF/xrpl-py#904\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kuan121\"\u003e\u003ccode\u003e@​kuan121\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/917\"\u003eXRPLF/xrpl-py#917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rrmanukyan\"\u003e\u003ccode\u003e@​rrmanukyan\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1019\"\u003eXRPLF/xrpl-py#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/arshjafri-ripple\"\u003e\u003ccode\u003e@​arshjafri-ripple\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/pull/1024\"\u003eXRPLF/xrpl-py#1024\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/XRPLF/xrpl-py/compare/v4.4.0...v5.2.0b0\"\u003ehttps://github.com/XRPLF/xrpl-py/compare/v4.4.0...v5.2.0b0\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/XRPLF/xrpl-py/blob/v5.2.0/CHANGELOG.md\"\u003exrpl-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[[5.2.0]]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for the \u003ccode\u003eLendingProtocolV1_1\u003c/code\u003e amendment.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eencode_for_signing_counterparty\u003c/code\u003e / \u003ccode\u003eencode_for_multisigning_counterparty\u003c/code\u003e and \u003ccode\u003eencode_for_signing_sponsor\u003c/code\u003e / \u003ccode\u003eencode_for_multisigning_sponsor\u003c/code\u003e for the role-specific signing prefixes introduced by \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport the \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e signing prefixes.\u003c/li\u003e\n\u003cli\u003eRegenerate \u003ccode\u003edefinitions.json\u003c/code\u003e from rippled 3.4.0: adds new fields (e.g. \u003ccode\u003eVaultKind\u003c/code\u003e, \u003ccode\u003eSubscriptionDate\u003c/code\u003e, \u003ccode\u003eRedemptionDate\u003c/code\u003e) and removes Hook/Emit field definitions, as Hooks is no longer supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[[5.1.0]]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for \u003ccode\u003eConfidential MPT\u003c/code\u003e (XLS-0096). The optional native cryptography (proof generation and balance decryption) is provided by the separate \u003ccode\u003exrpl.ext.confidential\u003c/code\u003e extension.\u003c/li\u003e\n\u003cli\u003eAdded support for the Sponsored Fees and Reserves (XLS-68)\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eDynamic Multi-Purpose Tokens\u003c/code\u003e (XLS-94)\u003c/li\u003e\n\u003cli\u003eAdd support for Batch (XLS-56) \u003ccode\u003eBatchV1_1\u003c/code\u003e signing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for the older \u003ccode\u003eBatch\u003c/code\u003e signing format (never live on any network, so no existing signatures are affected).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/a553301e2c4caaf0bf808fc48d18e5271a5c7d28\"\u003e\u003ccode\u003ea553301\u003c/code\u003e\u003c/a\u003e bump packages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/634ab7a4c5c18c547a9336fcaa8320a15ccca4ce\"\u003e\u003ccode\u003e634ab7a\u003c/code\u003e\u003c/a\u003e feat: Support LendingProtocolV1_1 (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/28836d0a7346e92adce877eeb02721fff218fb89\"\u003e\u003ccode\u003e28836d0\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003efixCleanup3_4_0\u003c/code\u003e signing prefixes (\u003ccode\u003eSponsor\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/a29bdba371fabdf08aafda1dbbb15c8bfbfcc4a8\"\u003e\u003ccode\u003ea29bdba\u003c/code\u003e\u003c/a\u003e ci: remove integration test requirement for beta releases (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1039\"\u003e#1039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/10ed82ee1f25c8bef0bf3bbc08d2708d6dde2a0f\"\u003e\u003ccode\u003e10ed82e\u003c/code\u003e\u003c/a\u003e chore(coderabbit): reduce review noise and load .ai-review/instructions.md (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/ad08b5b79ee221fd32ca610bf72e6e0dcfb7c894\"\u003e\u003ccode\u003ead08b5b\u003c/code\u003e\u003c/a\u003e Release 5.1.0: release-5.1.0 → main (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1032\"\u003e#1032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/d80063149a70c5478d5f3fe5fef1b2bdd81bf67c\"\u003e\u003ccode\u003ed800631\u003c/code\u003e\u003c/a\u003e feat: ConfidentialMPT Support (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/919\"\u003e#919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/e648619de0961b13dc6f7548f4973bf5345b888e\"\u003e\u003ccode\u003ee648619\u003c/code\u003e\u003c/a\u003e Support XLS-68 Sponsored Fees and Reserves (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/1020\"\u003e#1020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/524f230c6581a99d876137a4d8121391df691a30\"\u003e\u003ccode\u003e524f230\u003c/code\u003e\u003c/a\u003e Expand team required-reviewers into individual member logins for Slack notifi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/XRPLF/xrpl-py/commit/cddeb632e611348550edc4c9c03eb90ae562789a\"\u003e\u003ccode\u003ecddeb63\u003c/code\u003e\u003c/a\u003e Support for Dynamic MPT (XLS-94d) (\u003ca href=\"https://redirect.github.com/XRPLF/xrpl-py/issues/877\"\u003e#877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/XRPLF/xrpl-py/compare/v5.0.0...v5.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.2.6 to 2.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.3 (Sep 6, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.3 Release Notes\u003c/h1\u003e\n\u003cp\u003eThe NumPy 2.5.3 is a patch release that fixes bugs discovered after the 2.5.2\nrelease. Apart from the usual bug and maintenance work, there are a number of\nStringDType related fixes for problems discovered during the ongoing string\nwork in the main branch.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCasting a fixed-width byte string array (\u003ccode\u003enp.bytes_\u003c/code\u003e) to \u003ccode\u003eStringDType\u003c/code\u003e\nnow raises \u003ccode\u003eTypeError\u003c/code\u003e when the bytes are not valid UTF-8. Previously the\ninvalid bytes were stored as-is and later caused undefined behavior in\nstring operations.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32296\"\u003egh-32296\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eMaskedArray._fill_value\u003c/code\u003e would become stale when ufuncs that change dtype\nleft the result holding a fill_value typed for the old dtype. The mismatch\nwas silent until something later called \u003ccode\u003e_check_fill_value\u003c/code\u003e, such as\n\u003ccode\u003e.view()\u003c/code\u003e, and then a \u003ccode\u003eTypeError\u003c/code\u003e would be raised. Now, when the copied\nfill_value is no longer valid for the new dtype, fall back to the\ndefault fill_value for that dtype instead of propagating the stale value.\nThis may raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is complex and the\nnew dtype is real.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32423\"\u003egh-32423\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 9 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eIason Krommydas\u003c/li\u003e\n\u003cli\u003eJames Davies +\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eMaanas Arora\u003c/li\u003e\n\u003cli\u003eMatti Picus\u003c/li\u003e\n\u003cli\u003eNathan Goldbaum\u003c/li\u003e\n\u003cli\u003eShikhar Goel +\u003c/li\u003e\n\u003cli\u003eYeonho Kim +\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePull requests merged\u003c/h2\u003e\n\u003cp\u003eA total of 27 pull requests were merged for this release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32235\"\u003e#32235\u003c/a\u003e: MAINT: Prepare 2.5.x for further development\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst\"\u003enumpy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis is a walkthrough of the NumPy 2.4.0 release on Linux, which will be the\nfirst feature release using the \u003ccode\u003enumpy/numpy-release \u0026lt;https://github.com/numpy/numpy-release\u0026gt;\u003c/code\u003e__ repository.\u003c/p\u003e\n\u003cp\u003eThe commands can be copied into the command line, but be sure to replace 2.4.0\nwith the correct version. This should be read together with the\n:ref:\u003ccode\u003egeneral release guide \u0026lt;prepare_release\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n\u003ch1\u003eFacility preparation\u003c/h1\u003e\n\u003cp\u003eBefore beginning to make a release, use the \u003ccode\u003erequirements/*_requirements.txt\u003c/code\u003e files to\nensure that you have the needed software. Most software can be installed with\npip, but some will require apt-get, dnf, or whatever your system uses for\nsoftware. You will also need a GitHub personal access token (PAT) to push the\ndocumentation. There are a few ways to streamline things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGit can be set up to use a keyring to store your GitHub personal access token.\nSearch online for the details.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ePrior to release\u003c/h1\u003e\n\u003ch2\u003eAdd/drop Python versions\u003c/h2\u003e\n\u003cp\u003eWhen adding or dropping Python versions, multiple config and CI files need to\nbe edited in addition to changing the minimum version in \u003ccode\u003epyproject.toml\u003c/code\u003e.\nMake these changes in an ordinary PR against main and backport if necessary.\nWe currently release wheels for new Python versions after the first Python RC\nonce manylinux and cibuildwheel support that new Python version.\u003c/p\u003e\n\u003ch2\u003eBackport pull requests\u003c/h2\u003e\n\u003cp\u003eChanges that have been marked for this release must be backported to the\nmaintenance/2.4.x branch.\u003c/p\u003e\n\u003ch2\u003eUpdate 2.4.0 milestones\u003c/h2\u003e\n\u003cp\u003eLook at the issues/prs with 2.4.0 milestones and either push them off to a\nlater version, or maybe remove the milestone. You may need to add a milestone.\u003c/p\u003e\n\u003ch2\u003eCheck the numpy-release repo\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/dd88c0c19b54ad9ed3533224221285bf0873249a\"\u003e\u003ccode\u003edd88c0c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32511\"\u003e#32511\u003c/a\u003e from charris/prepare-2.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/edcac6acc392f4010933ee83e8a4769a7cfe92c5\"\u003e\u003ccode\u003eedcac6a\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.3 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/fd4d908aff89773ead13f7c6a0ab31153f14439e\"\u003e\u003ccode\u003efd4d908\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32509\"\u003e#32509\u003c/a\u003e from charris/backport-32496\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/65bb1da13d0ee784be84d173b86784f0d64bdaca\"\u003e\u003ccode\u003e65bb1da\u003c/code\u003e\u003c/a\u003e BUG: fix crash in ufunc.resolve_dtypes with a Python scalar type (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32496\"\u003e#32496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/294956e85dfaea149aada1278c2ed6be0f6f28c8\"\u003e\u003ccode\u003e294956e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32506\"\u003e#32506\u003c/a\u003e from charris/backport-32503\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/26428d9a3f5ab4f604b326347e3a9c6dcc00c1cb\"\u003e\u003ccode\u003e26428d9\u003c/code\u003e\u003c/a\u003e DOC: fix scipy docs links in intersphinx mapping (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32507\"\u003e#32507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/5fab1cbc6aa9e119d9f931243a56c6fbca989476\"\u003e\u003ccode\u003e5fab1cb\u003c/code\u003e\u003c/a\u003e DOC: use static scipy doc site for intershpinx (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32503\"\u003e#32503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/7beed2f7e9a24e493a04ff7e2eb1db0d7f9c50e6\"\u003e\u003ccode\u003e7beed2f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32481\"\u003e#32481\u003c/a\u003e from ngoldbaum/stringdtype-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/8972f70798a2ba1bb4557157982fd6001906f993\"\u003e\u003ccode\u003e8972f70\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32478\"\u003e#32478\u003c/a\u003e from charris/backport-32466\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/ab1b58902a868d4151ef3cf8dbeb91d8a1924fa4\"\u003e\u003ccode\u003eab1b589\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32477\"\u003e#32477\u003c/a\u003e from charris/backport-32423\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.2.6...v2.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opencv-python` from 4.13.0.92 to 5.0.0.93\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/opencv/opencv-python/releases\"\u003eopencv-python's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.0.0.93\u003c/h2\u003e\n\u003cp\u003eOpenCV 5.0.0 released!\u003c/p\u003e\n\u003cp\u003eOpenCV 5.0.0 overview: \u003ca href=\"https://opencv.org/opencv-5\"\u003ehttps://opencv.org/opencv-5\u003c/a\u003e\nOpenCV 4.x -\u0026gt; 5.x migration guide: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-4-to-5-migration\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-4-to-5-migration\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/opencv/opencv-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 0.21.1 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v0.21.1...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `aiohttp` from 3.14.1 to 3.14.3\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Team-Hamsa/LFG/pull/586","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Team-Hamsa%2FLFG/issues/586","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/586/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-19T23:36:07.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5514402833","node_id":"PR_kwDOQWOdqc8AAAABEQ_z5Q","number":588,"state":"open","title":"chore(deps): Bump the python-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-19T23:36:07.000Z","updated_at":"2026-09-23T22:42:47.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"python-dependencies","update_count":16,"packages":[{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [uvicorn](https://github.com/Kludex/uvicorn), [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy), [alembic](https://github.com/sqlalchemy/alembic), [pydantic](https://github.com/pydantic/pydantic), [pydantic-settings](https://github.com/pydantic/pydantic-settings), [av](https://github.com/PyAV-Org/PyAV), [cryptography](https://github.com/pyca/cryptography), [openai](https://github.com/openai/openai-python), [anthropic](https://github.com/anthropics/anthropic-sdk-python), [litellm](https://github.com/BerriAI/litellm), [uiprotect](https://github.com/uilibs/uiprotect), [pywebpush](https://github.com/web-push-libs/pywebpush), [aiosmtplib](https://github.com/cole/aiosmtplib), [sentence-transformers](https://github.com/huggingface/sentence-transformers), [python-json-logger](https://github.com/nhairs/python-json-logger) and [pyjwt](https://github.com/jpadilla/pyjwt) to permit the latest version.\nUpdates `uvicorn` from 0.52.1 to 0.53.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.53.0\u003c/h2\u003e\n\u003ch2\u003e🌐 Opt-in HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003euvicorn\u003c/code\u003e 0.53.0 adds experimental HTTP/2 through \u003ccode\u003ezttp\u003c/code\u003e, alongside a new \u003ccode\u003ezuvloop\u003c/code\u003e integration and connection-handling improvements.\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003euv add uvicorn==0.53.0\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eServe HTTP/1.1 and HTTP/2 with \u003ccode\u003ezttp\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e). Install \u003ccode\u003ezttp\u003c/code\u003e, then enable HTTP/2 with \u003ccode\u003e--http zttp --http2\u003c/code\u003e. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 remains experimental.\u003c/strong\u003e Upgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚙️ More event loop choice\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRun Uvicorn with \u003ccode\u003ezuvloop\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e). Install \u003ccode\u003ezuvloop\u003c/code\u003e separately and select it explicitly with \u003ccode\u003e--loop zuvloop\u003c/code\u003e on CPython 3.14 or newer.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛡️ More reliable connections and proxies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHonor \u003ccode\u003eConnection: close\u003c/code\u003e token lists\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTrust IPv6 loopback proxies by default\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e). The default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value now includes \u003ccode\u003e::1\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeep upgraded WebSockets alive\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.4...0.53.0\"\u003e0.52.4...0.53.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.53.0 (September 14, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e. Enable it with \u003ccode\u003e--http zttp --http2\u003c/code\u003e.\nUpgrade-based h2c and WebSockets over HTTP/2 are not supported.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd experimental HTTP/2 support through \u003ccode\u003ezttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2982\"\u003e#2982\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ezuvloop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3104\"\u003e#3104\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle comma-separated, case-insensitive \u003ccode\u003eConnection: close\u003c/code\u003e tokens across HTTP implementations (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3103\"\u003e#3103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTrust IPv6 loopback in the default \u003ccode\u003eFORWARDED_ALLOW_IPS\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCancel the HTTP keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/421708fbc1a704dac8bd4053a7c4c0bf4d3704ee\"\u003e\u003ccode\u003e421708f\u003c/code\u003e\u003c/a\u003e Version 0.53.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f1a1bff7be819f5724d6fdf86dfd448a97c62e23\"\u003e\u003ccode\u003ef1a1bff\u003c/code\u003e\u003c/a\u003e Unset the keep-alive timer when upgrading to WebSocket (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3107\"\u003e#3107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/63971ed952090438896e6eba7d07178b616d97cc\"\u003e\u003ccode\u003e63971ed\u003c/code\u003e\u003c/a\u003e Document HTTP/2 support (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3130\"\u003e#3130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d1a0055aee5e281accc646b559ddd147486bf8a\"\u003e\u003ccode\u003e7d1a005\u003c/code\u003e\u003c/a\u003e Remove race from multiprocess health check test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3128\"\u003e#3128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5ac6265a01ff6dcadb0e4250152c3deaf8a168a9\"\u003e\u003ccode\u003e5ac6265\u003c/code\u003e\u003c/a\u003e Add ::1 to FORWARDED_ALLOW_IPS (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3119\"\u003e#3119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/098b206ff7b01098561956ff4e7746d05e02acc6\"\u003e\u003ccode\u003e098b206\u003c/code\u003e\u003c/a\u003e Remove timing race from SIGHUP supervisor test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3127\"\u003e#3127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/968f15e5d09df5f6b8959975f18687b9d755862d\"\u003e\u003ccode\u003e968f15e\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3113\"\u003e#3113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7d4c08cce9eeabf64695c326b0e45c47c6a0337b\"\u003e\u003ccode\u003e7d4c08c\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 11 update...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fe528a480c0aec3aea3ee8ef13251b5216c47ae9\"\u003e\u003ccode\u003efe528a4\u003c/code\u003e\u003c/a\u003e Require explicit opt-in for zttp HTTP/2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3101\"\u003e#3101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fa324a415364563cf45908966435e2480a6b46bf\"\u003e\u003ccode\u003efa324a4\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump httpx2 from 2.10.0 to 2.12.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3121\"\u003e#3121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.53.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` to 2.0.54\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.54\u003c/h1\u003e\n\u003cp\u003eReleased: September 15, 2026\u003c/p\u003e\n\u003ch2\u003eplatform\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [change]\u003c/strong\u003e Binary wheels are no longer built for Python 3.7.  PyPI now rejects wheel\nfiles whose filename does not begin with the normalized project name, and\nthe packaging tools that can be installed on Python 3.7 do not produce\nsuch a filename.  As a result, SQLAlchemy 2.0.44 was the last release to\npublish Python 3.7 wheels to PyPI, and releases 2.0.45 and later have\nbeen available on Python 3.7 only as a source distribution; the wheel\nbuilds for Python 3.7 are now removed.  Python 3.7 remains supported by\nthe 2.0 series.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[platform] [bug]\u003c/strong\u003e Fixed issue where the Cython extensions were compiled without the\n\u003ccode\u003efreethreading_compatible\u003c/code\u003e directive, so that they did not declare\nthemselves as safe to run without the GIL.  On a free-threaded Python\ninterpreter such as Python 3.13t or 3.14t, importing SQLAlchemy would\ncause the interpreter to re-enable the GIL, emitting a\n\u003ccode\u003eRuntimeWarning\u003c/code\u003e.  The directive is now set when building for Python\n3.13 and above, and a test has been added which confirms that importing\nSQLAlchemy on a free-threaded build does not enable the GIL.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13592\"\u003e#13592\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` to 1.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.20.0\u003c/h1\u003e\n\u003cp\u003eReleased: September 11, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [batch]\u003c/strong\u003e Added a warning for the case where an unnamed CHECK constraint on a\nreflected table is omitted from a batch \u0026quot;recreate\u0026quot; operation.  An unnamed\nCHECK constraint can't be reliably carried over in a batch recreate\nas it may refer to columns that are being dropped or changed.  This\nomission was previously a silent operation.   The presence of any\n\u003ccode\u003e~sqlalchemy.schema.CheckConstraint\u003c/code\u003e in\n\u003ccode\u003eOperations.batch_alter_table.table_args\u003c/code\u003e is taken to indicate\nthat the case has been accommodated, and no warning is emitted.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1846\"\u003e#1846\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [autogenerate]\u003c/strong\u003e Autogenerate now renders a warning comment above any rendered\n\u003ccode\u003eOperations.drop_constraint()\u003c/code\u003e directive for which the constraint name\nis \u003ccode\u003eNone\u003c/code\u003e, as is the case when a constraint that has no name in the model\nis dropped, most typically within the \u003ccode\u003edowngrade()\u003c/code\u003e function of a\nmigration that adds an unnamed constraint.  A warning is also emitted on\nthe console when the migration script is generated.   The directive\nrequires a non-None name in order to be able to emit a \u0026quot;DROP CONSTRAINT\u0026quot;\ncommand.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/916\"\u003e#916\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where adding a column with a type that generates\nits own CHECK constraint, such as \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or\n\u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e with\n\u003ccode\u003e~sqlalchemy.types.Boolean.create_constraint\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e,\nwould emit the constraint twice when the table was recreated, once under\nthe name generated by the naming convention in use and once under the\nname given to the type.  The constraint is now emitted once, using the\nsame name that would be used outside of batch mode.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1768\"\u003e#1768\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where a CHECK constraint generated by a type such\nas \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or \u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e\nwould lose the name established for it by the naming convention in use\nwhen the table was recreated, as the constraint was regenerated against\nthe temporary table used for the recreate operation.  The naming\nconvention is now resolved against the name of the table being replaced.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.15.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBehavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ecase_sensitive\u003c/code\u003e now applies to init kwargs and config-file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/900\"\u003e#900\u003c/a\u003e). \u003ccode\u003eInitSettingsSource\u003c/code\u003e and the JSON/TOML/YAML config sources previously ignored \u003ccode\u003ecase_sensitive\u003c/code\u003e. Since it defaults to \u003ccode\u003eFalse\u003c/code\u003e, \u003cstrong\u003ecase-insensitive matching is now the default\u003c/strong\u003e for these sources — e.g. \u003ccode\u003eSettings(TeSt=...)\u003c/code\u003e now populates a \u003ccode\u003etest\u003c/code\u003e field where it previously did not. Nested keys are still matched case-sensitively.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFields with unresolved forward references now emit a warning\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/901\"\u003e#901\u003c/a\u003e). Settings sources can silently fail to resolve such fields; they now raise \u003ccode\u003eIncompleteFieldDefinitionWarning\u003c/code\u003e telling you to call \u003ccode\u003emodel_rebuild()\u003c/code\u003e. If you have \u003ccode\u003efilterwarnings = error\u003c/code\u003e configured, this may surface as a new failure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNon-JSON env values for strict fields now raise \u003ccode\u003eValidationError\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/926\"\u003e#926\u003c/a\u003e) instead of a less specific error.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eShow environment variable names in CLI help\u003c/strong\u003e via \u003ccode\u003ecli_show_env_vars=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/860\"\u003e#860\u003c/a\u003e), so generated \u003ccode\u003e--help\u003c/code\u003e output doubles as configuration documentation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePYDANTIC_SETTINGS_DEBUG\u003c/code\u003e for debugging settings resolution\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/913\"\u003e#913\u003c/a\u003e). Set it to a truthy value with \u003ccode\u003eDEBUG\u003c/code\u003e logging enabled to see each source's contribution in priority order, which source won for each value, and which \u003ccode\u003eenv_file\u003c/code\u003e/secret files were probed, loaded, or skipped — the long-standing \u0026quot;why isn't my \u003ccode\u003e.env\u003c/code\u003e being picked up?\u0026quot; question.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003etoml_table_header\u003c/code\u003e for regular TOML files\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/882\"\u003e#882\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/887\"\u003e#887\u003c/a\u003e), letting you root settings at a nested table in any TOML file, not just \u003ccode\u003epyproject.toml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eTraversable\u003c/code\u003e support for JSON/TOML/YAML file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/902\"\u003e#902\u003c/a\u003e), so you can load config packaged inside a distribution — including files inside a zip or wheel — via \u003ccode\u003eimportlib.resources.files(...)\u003c/code\u003e without casting to \u003ccode\u003ePath\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGCP: \u003ccode\u003eproject_id\u003c/code\u003e can come from an earlier settings source\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003e#878\u003c/a\u003e), rather than only from the constructor or \u003ccode\u003eGOOGLE_CLOUD_PROJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix env vars not loading on Windows with \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/894\"\u003e#894\u003c/a\u003e). Windows upper-cases \u003ccode\u003eos.environ\u003c/code\u003e keys, so fields raised \u003ccode\u003eField required\u003c/code\u003e instead of picking up their values.\u003c/li\u003e\n\u003cli\u003eRead secret files as UTF-8 instead of the platform locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/917\"\u003e#917\u003c/a\u003e). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAliasPath\u003c/code\u003e on nested model fields not JSON-decoding env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/898\"\u003e#898\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix case-insensitive matching for \u003cstrong\u003eoptional\u003c/strong\u003e nested models (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/905\"\u003e#905\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix dotenv extras being wrongly claimed by a complex field sharing a name prefix (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/912\"\u003e#912\u003c/a\u003e) — e.g. \u003ccode\u003edbx_token\u003c/code\u003e being swallowed by a \u003ccode\u003edb: dict\u003c/code\u003e field.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e corrupting discriminated unions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/876\"\u003e#876\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSecret\u003c/code\u003e subclasses crashing when loaded from the environment (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/920\"\u003e#920\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix enum names not parsing through nested annotations such as \u003ccode\u003eOptional[Annotated[MyEnum, ...]]\u003c/code\u003e with \u003ccode\u003eenv_parse_enums=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/910\"\u003e#910\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty \u003ccode\u003eyaml_config_section\u003c/code\u003e now falls back to defaults instead of raising \u003ccode\u003eAttributeError: 'NoneType' object has no attribute 'keys'\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/914\"\u003e#914\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e no longer follows symlinks pointing outside \u003ccode\u003esecrets_dir\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/889\"\u003e#889\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGCP: skip the \u003ccode\u003elist_secrets\u003c/code\u003e call when \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003e#862\u003c/a\u003e), lowering the required IAM permissions to just \u003ccode\u003eroles/secretmanager.secretAccessor\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAWS: \u003ccode\u003etypes-boto3[secretsmanager]\u003c/code\u003e is no longer required at runtime (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/880\"\u003e#880\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument JSON parsing of complex env values, plus a comma-separated-values recipe (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/919\"\u003e#919\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRecommend an async settings loading pattern (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/908\"\u003e#908\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify behavior when an unprefixed value is present in a dotenv file (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/895\"\u003e#895\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify environment variable helper descriptions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003e#867\u003c/a\u003e) and fix assorted typos (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/904\"\u003e#904\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate documentation link for Pydantic settings by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/863\"\u003epydantic/pydantic-settings#863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/865\"\u003epydantic/pydantic-settings#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify environment variable helper descriptions by \u003ca href=\"https://github.com/vip892766gma\"\u003e\u003ccode\u003e@​vip892766gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003epydantic/pydantic-settings#867\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/870\"\u003epydantic/pydantic-settings#870\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/875\"\u003epydantic/pydantic-settings#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip list_secrets call when case_sensitive=True by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003epydantic/pydantic-settings#862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGoogleSecretManagerSettingsSource: read project_id from previous sources by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003epydantic/pydantic-settings#878\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f725ca187bee4212e9ef799eefa3cb25be788462\"\u003e\u003ccode\u003ef725ca1\u003c/code\u003e\u003c/a\u003e Prepare release 2.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/28f35c25fac5d61210d532c31a300d49c0b684a4\"\u003e\u003ccode\u003e28f35c2\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9056db049560897229f2603493753bae27b6479f\"\u003e\u003ccode\u003e9056db0\u003c/code\u003e\u003c/a\u003e test: move function-local imports to the top of test modules (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f077e3ab3d9492838c7ef9275a88c95134688095\"\u003e\u003ccode\u003ef077e3a\u003c/code\u003e\u003c/a\u003e fix: raise ValidationError for non-JSON env values on strict fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ae25d703c458b57f5a9a425f6ec9a28ad868f980\"\u003e\u003ccode\u003eae25d70\u003c/code\u003e\u003c/a\u003e fix: treat Secret subclasses as non-complex fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/716\"\u003e#716\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/920\"\u003e#920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/798dcea2a23b08a3e9b37994014e036224f6dd18\"\u003e\u003ccode\u003e798dcea\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/a190041d353bda2d432ea1908de4c499ae89ee0a\"\u003e\u003ccode\u003ea190041\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/925\"\u003e#925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/5d9333282b5c85d65a457c45e4476369b9949726\"\u003e\u003ccode\u003e5d93332\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/921\"\u003e#921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/d2fdeda91157140d2ff0c05404f32a9b1218115a\"\u003e\u003ccode\u003ed2fdeda\u003c/code\u003e\u003c/a\u003e fix: read secret files as UTF-8 instead of the locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/917\"\u003e#917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2256a4e60f83f2da81e7654252562fc4841aa5d4\"\u003e\u003ccode\u003e2256a4e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/915\"\u003e#915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `av` to 18.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyAV-Org/PyAV/releases\"\u003eav's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev18.1.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInfer the specific stream and codec context types for all FFmpeg encoder names in type-checked code by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.supported_options\u003c/code\u003e to discover generic and codec-specific options by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2032\"\u003e#2032\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ePacket.rescale_ts()\u003c/code\u003e to rescale packet PTS, DTS, and duration to a new \u003ccode\u003eAVRational\u003c/code\u003e time base by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSupport reusing the thread's current CUDA context via a \u003ccode\u003ecurrent_ctx\u003c/code\u003e flag on \u003ccode\u003eCudaContext\u003c/code\u003e and \u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e, for interop with libraries like PyTorch that initialize CUDA first by \u003ca href=\"https://github.com/Yozer\"\u003e\u003ccode\u003e@​Yozer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2339\"\u003e#2339\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e no longer requires restating \u003ccode\u003eprimary_ctx\u003c/code\u003e/\u003ccode\u003ecurrent_ctx\u003c/code\u003e when passing an explicit \u003ccode\u003ecuda_context\u003c/code\u003e; the flags are only validated when explicitly given by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSupport passing an explicit CUDA stream to FFmpeg CUDA operations, including NVENC input and output, via a \u003ccode\u003ecuda_stream\u003c/code\u003e parameter on \u003ccode\u003eCudaContext\u003c/code\u003e; currently limited to logical CUDA device 0 by \u003ca href=\"https://github.com/Yozer\"\u003e\u003ccode\u003e@​Yozer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2360\"\u003e#2360\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eav.AVRational\u003c/code\u003e, an exact rational number stored as two int32s that mirrors FFmpeg's \u003ccode\u003eAVRational\u003c/code\u003e. \u003ccode\u003eCodec.frame_rates\u003c/code\u003e now holds these rather than \u003ccode\u003efractions.Fraction\u003c/code\u003e, and every setter that accepts a \u003ccode\u003eFraction\u003c/code\u003e also accepts an \u003ccode\u003eAVRational\u003c/code\u003e. Unset rational attributes are falsy, so test them with \u003ccode\u003eif not stream.time_base:\u003c/code\u003e rather than \u003ccode\u003eis None\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eFrame.metadata\u003c/code\u003e, the metadata FFmpeg attaches to a frame, by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.level\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVideoCodecContext.field_order\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.save\u003c/code\u003e now forwards keyword arguments to the encoder, letting callers trade file size for speed (e.g. \u003ccode\u003epred=\u0026quot;none\u0026quot;\u003c/code\u003e or \u003ccode\u003ecompression_level=1\u003c/code\u003e for PNG, \u003ccode\u003eqscale=2\u003c/code\u003e for JPG) by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInputContainer.start_time_realtime\u003c/code\u003e, the stream's start time in microseconds since the Unix epoch, which RTSP derives from RTCP sender reports, by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2365\"\u003e#2365\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eVideoFrame.save\u003c/code\u003e raising \u003ccode\u003eAttributeError\u003c/code\u003e when given a \u003ccode\u003ePath\u003c/code\u003e rather than a \u003ccode\u003estr\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix a frame rate assigned to a \u003ccode\u003eVideoStream\u003c/code\u003e after \u003ccode\u003eadd_stream\u003c/code\u003e being dropped from the output; the codec context's frame rate is now copied to the stream before the header is written by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2301\"\u003e#2301\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePrevent crashes and corrupted output when structural codec properties are changed after an output stream has been opened by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e, reported by \u003ca href=\"https://github.com/oakaigh\"\u003e\u003ccode\u003e@​oakaigh\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2232\"\u003e#2232\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix a crash when using a stream that has no \u003ccode\u003eCodecContext\u003c/code\u003e (a demuxed stream with no available decoder, such as one from a truncated file, or a stream created by \u003ccode\u003eadd_mux_stream\u003c/code\u003e); decoding now raises \u003ccode\u003eDecoderNotFoundError\u003c/code\u003e, encoding now raises \u003ccode\u003eEncoderNotFoundError\u003c/code\u003e, and \u003ccode\u003eBitStreamFilterContext\u003c/code\u003e accepts such a stream as \u003ccode\u003eout_stream\u003c/code\u003e by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e, reported by \u003ca href=\"https://github.com/justinrmiller\"\u003e\u003ccode\u003e@​justinrmiller\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2344\"\u003e#2344\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport building from source against FFmpeg 9.0 by \u003ca href=\"https://github.com/WyattBlue\"\u003e\u003ccode\u003e@​WyattBlue\u003c/code\u003e\u003c/a\u003e. The binary wheels still ship FFmpeg 8.1.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Yozer\"\u003e\u003ccode\u003e@​Yozer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/pull/2339\"\u003ePyAV-Org/PyAV#2339\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyAV-Org/PyAV/compare/v18.0.0...v18.1.0\"\u003ehttps://github.com/PyAV-Org/PyAV/compare/v18.0.0...v18.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyAV-Org/PyAV/blob/v18.1.0/CHANGELOG.rst\"\u003eav's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev18.1.0\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInfer the specific stream and codec context types for all FFmpeg encoder names in type-checked code by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.supported_options\u003c/code\u003e to discover generic and codec-specific options by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2032\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ePacket.rescale_ts()\u003c/code\u003e to rescale packet PTS, DTS, and duration to a new \u003ccode\u003eAVRational\u003c/code\u003e time base by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSupport reusing the thread's current CUDA context via a \u003ccode\u003ecurrent_ctx\u003c/code\u003e flag on \u003ccode\u003eCudaContext\u003c/code\u003e and \u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e, for interop with libraries like PyTorch that initialize CUDA first by :gh-user:\u003ccode\u003eYozer\u003c/code\u003e (:pr:\u003ccode\u003e2339\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.from_dlpack\u003c/code\u003e no longer requires restating \u003ccode\u003eprimary_ctx\u003c/code\u003e/\u003ccode\u003ecurrent_ctx\u003c/code\u003e when passing an explicit \u003ccode\u003ecuda_context\u003c/code\u003e; the flags are only validated when explicitly given by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSupport passing an explicit CUDA stream to FFmpeg CUDA operations, including NVENC input and output, via a \u003ccode\u003ecuda_stream\u003c/code\u003e parameter on \u003ccode\u003eCudaContext\u003c/code\u003e; currently limited to logical CUDA device 0 by :gh-user:\u003ccode\u003eYozer\u003c/code\u003e (:pr:\u003ccode\u003e2360\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eav.AVRational\u003c/code\u003e, an exact rational number stored as two int32s that mirrors FFmpeg's \u003ccode\u003eAVRational\u003c/code\u003e. \u003ccode\u003eCodec.frame_rates\u003c/code\u003e now holds these rather than \u003ccode\u003efractions.Fraction\u003c/code\u003e, and every setter that accepts a \u003ccode\u003eFraction\u003c/code\u003e also accepts an \u003ccode\u003eAVRational\u003c/code\u003e. Unset rational attributes are falsy, so test them with \u003ccode\u003eif not stream.time_base:\u003c/code\u003e rather than \u003ccode\u003eis None\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eFrame.metadata\u003c/code\u003e, the metadata FFmpeg attaches to a frame, by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCodecContext.level\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eVideoCodecContext.field_order\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVideoFrame.save\u003c/code\u003e now forwards keyword arguments to the encoder, letting callers trade file size for speed (e.g. \u003ccode\u003epred=\u0026quot;none\u0026quot;\u003c/code\u003e or \u003ccode\u003ecompression_level=1\u003c/code\u003e for PNG, \u003ccode\u003eqscale=2\u003c/code\u003e for JPG) by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInputContainer.start_time_realtime\u003c/code\u003e, the stream's start time in microseconds since the Unix epoch, which RTSP derives from RTCP sender reports, by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2365\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eVideoFrame.save\u003c/code\u003e raising \u003ccode\u003eAttributeError\u003c/code\u003e when given a \u003ccode\u003ePath\u003c/code\u003e rather than a \u003ccode\u003estr\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFix a frame rate assigned to a \u003ccode\u003eVideoStream\u003c/code\u003e after \u003ccode\u003eadd_stream\u003c/code\u003e being dropped from the output; the codec context's frame rate is now copied to the stream before the header is written by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2301\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc.:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport building from source against FFmpeg 9.0 by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e. The binary wheels still ship FFmpeg 8.1.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePrevent crashes and corrupted output when structural codec properties are changed after an output stream has been opened by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e, reported by :gh-user:\u003ccode\u003eoakaigh\u003c/code\u003e (:issue:\u003ccode\u003e2232\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix a crash when using a stream that has no \u003ccode\u003eCodecContext\u003c/code\u003e (a demuxed stream with no available decoder, such as one from a truncated file, or a stream created by \u003ccode\u003eadd_mux_stream\u003c/code\u003e); decoding now raises \u003ccode\u003eDecoderNotFoundError\u003c/code\u003e, encoding now raises \u003ccode\u003eEncoderNotFoundError\u003c/code\u003e, and \u003ccode\u003eBitStreamFilterContext\u003c/code\u003e accepts such a stream as \u003ccode\u003eout_stream\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e, reported by :gh-user:\u003ccode\u003ejustinrmiller\u003c/code\u003e (:issue:\u003ccode\u003e2344\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev18.0.0\u003c/h2\u003e\n\u003cp\u003eBreaking:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemove Python 3.10\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport HW encoding via a \u003ccode\u003ehwaccel\u003c/code\u003e parameter on \u003ccode\u003eOutputContainer.add_stream\u003c/code\u003e (e.g. \u003ccode\u003eh264_vaapi\u003c/code\u003e, \u003ccode\u003eh264_nvenc\u003c/code\u003e, \u003ccode\u003eh264_videotoolbox\u003c/code\u003e); software frames passed to \u003ccode\u003eencode\u003c/code\u003e are uploaded to the device automatically by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2156\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eUse FFmpeg 8.1.2 in the binary wheels by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eExpose \u003ccode\u003esw_format\u003c/code\u003e on \u003ccode\u003eVideoCodecContext\u003c/code\u003e, and allow configuring the software format of hardware encoders by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eoptions\u003c/code\u003e parameter to \u003ccode\u003eAudioResampler\u003c/code\u003e for passing \u003ccode\u003elibswresample\u003c/code\u003e options (e.g. \u003ccode\u003eresampler\u003c/code\u003e, \u003ccode\u003efilter_size\u003c/code\u003e, \u003ccode\u003ecutoff\u003c/code\u003e) by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2262\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eyuv420p10le\u003c/code\u003e in \u003ccode\u003eVideoFrame.to_ndarray\u003c/code\u003e and \u003ccode\u003eVideoFrame.from_ndarray\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e1981\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eat\u003c/code\u003e parameter to \u003ccode\u003eGraph.push\u003c/code\u003e and \u003ccode\u003eGraph.vpush\u003c/code\u003e to push a frame to a single buffer source by index, for multi-input filters like \u003ccode\u003eoverlay\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efind_best_pix_fmt_of_list\u003c/code\u003e now returns the loss as a \u003ccode\u003ePixFmtLoss\u003c/code\u003e \u003ccode\u003eenum.IntFlag\u003c/code\u003e instead of a plain \u003ccode\u003eint\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e (:issue:\u003ccode\u003e2300\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eColorspace.BT2020\u003c/code\u003e by :gh-user:\u003ccode\u003emark-oshea\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eBitStreamFilterContext\u003c/code\u003e now accepts a \u003ccode\u003eCodec\u003c/code\u003e or a codec-name \u003ccode\u003estr\u003c/code\u003e as \u003ccode\u003ein_stream\u003c/code\u003e to pin the input codec without a full \u003ccode\u003eStream\u003c/code\u003e by :gh-user:\u003ccode\u003eWyattBlue\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/7e3d950a8b72062502c1a60d672f8ca565313af5\"\u003e\u003ccode\u003e7e3d950\u003c/code\u003e\u003c/a\u003e Release 18.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/842955f0cb6df927a42172ff14de186aec6e9a00\"\u003e\u003ccode\u003e842955f\u003c/code\u003e\u003c/a\u003e Changelog entries missed since 18.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/fdb4ce4e18181332b0704b78a5e655e8acc6e7e1\"\u003e\u003ccode\u003efdb4ce4\u003c/code\u003e\u003c/a\u003e Add InputContainer.start_time_realtime, closes \u003ca href=\"https://redirect.github.com/PyAV-Org/PyAV/issues/2365\"\u003e#2365\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/b9ef85f33cca825f7f47bfb04217f92f27c60b8e\"\u003e\u003ccode\u003eb9ef85f\u003c/code\u003e\u003c/a\u003e Forward encoder options from \u003ccode\u003eVideoFrame.save()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/f711ab6866f27608c8b6a1e60e4512e98a52cc75\"\u003e\u003ccode\u003ef711ab6\u003c/code\u003e\u003c/a\u003e Disable avx-512 in build-deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/883642e7e68497de5c31487deaf48a11b364135e\"\u003e\u003ccode\u003e883642e\u003c/code\u003e\u003c/a\u003e Test with ffmpeg 9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/b35726c2b80f54b572d8c95f9bbae71ffa7ec9c6\"\u003e\u003ccode\u003eb35726c\u003c/code\u003e\u003c/a\u003e FFmpeg 9.0 reorders AVCodecID\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/f6f0a5e3d975aab851e12ca881bdadfdd8f9ec74\"\u003e\u003ccode\u003ef6f0a5e\u003c/code\u003e\u003c/a\u003e Avoid probing primary context flags for no reason\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/387fca5ec3eadbdd9ba286cac2918b74a5385b42\"\u003e\u003ccode\u003e387fca5\u003c/code\u003e\u003c/a\u003e Support explicit CUDA streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyAV-Org/PyAV/commit/32e9f7de15c3ecdddd78cc17b5ed4cdafdd15149\"\u003e\u003ccode\u003e32e9f7d\u003c/code\u003e\u003c/a\u003e Refresh installation documentation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PyAV-Org/PyAV/compare/v18.0.0...v18.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` to 3.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.14.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.13.0...v3.14.0\"\u003e3.14.0\u003c/a\u003e (2026-09-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e normalize errors raised while reading streams (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3827\"\u003e#3827\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d7c41efee1b0802b79f3f88a678ef2052b06e9ce\"\u003ed7c41ef\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebound vector store file polling (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3401\"\u003e#3401\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ae41bc46cdd53d17e948ac8a73e16bdbf34123a1\"\u003eae41bc4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexample:\u003c/strong\u003e refresh realtime push_to_talk_app session types (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2926\"\u003e#2926\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/0b7ad38292ef862f1dd07f71543b2f60eade8999\"\u003e0b7ad38\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efiles:\u003c/strong\u003e normalize PathLike upload tuples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3475\"\u003e#3475\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/90ac74ccfe7a966787d1f204755d4cd4cc4d406a\"\u003e90ac74c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einclude completion in content filter errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3094\"\u003e#3094\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e57a1b19fbcc32306a691e63334fd2dc4b1a804c\"\u003ee57a1b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elogging:\u003c/strong\u003e support standard OPENAI_LOG levels (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3734\"\u003e#3734\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/44000e0fc5e11692663045d6183568ff3ec32736\"\u003e44000e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enormalize API error codes to strings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3532\"\u003e#3532\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/233d9557be3e7ee186b5ac3f1ab634a257134ac1\"\u003e233d955\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3531\"\u003e#3531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/5bae14cb22724ef0a9db0d3a7fb7556d28b3fee3\"\u003e\u003ccode\u003e5bae14c\u003c/code\u003e\u003c/a\u003e release: 3.14.1 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3856\"\u003e#3856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003e\u003ccode\u003ef86c721\u003c/code\u003e\u003c/a\u003e fix(client): validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e\u003ccode\u003e6520df1\u003c/code\u003e\u003c/a\u003e fix(responses): skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b3c04f4e701e07726f320295a38928421946e530\"\u003e\u003ccode\u003eb3c04f4\u003c/code\u003e\u003c/a\u003e fix(azure): preserve deployment routing across copy/with_options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3593\"\u003e#3593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003e\u003ccode\u003eccc10f5\u003c/code\u003e\u003c/a\u003e fix: log only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e\u003ccode\u003e9640f29\u003c/code\u003e\u003c/a\u003e chore: remove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e\u003ccode\u003e8cb9ded\u003c/code\u003e\u003c/a\u003e docs: fix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003e\u003ccode\u003ea3d83b5\u003c/code\u003e\u003c/a\u003e docs: clarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e\u003ccode\u003e54f460e\u003c/code\u003e\u003c/a\u003e fix(examples): refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003e\u003ccode\u003ed241ed6\u003c/code\u003e\u003c/a\u003e fix(examples): split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.53.0...v3.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` to 1.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.6.0\u003c/h2\u003e\n\u003ch2\u003e1.6.0 (2026-09-15)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v1.5.0...v1.6.0\"\u003ev1.5.0...v1.6.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add auto mode tool permissions for Managed Agents (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/909d92ff57dd27270796407547ffbbf521cf941e\"\u003e909d92f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add compaction parameter and signed compaction blocks (beta) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/8689179d2c760f005d0f7736387d352b71f05bee\"\u003e8689179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add enum types for workspace data-residency geo fields (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3dc6dbfcea444305dd9b0cc418e26e14163bac78\"\u003e3dc6dbf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add thinking_mismatch_allowed entries to input_transformations (beta) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/14d179280ebfe241ef0604fd6afc331fc69528fd\"\u003e14d1792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add url_sources to the web fetch tool (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/4ba7115da810cade002b1893973ac3812466d2f4\"\u003e4ba7115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add workspace_id parameter to user profiles methods (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/1c359b22de5a33df1c30aabe367c7381510783e8\"\u003e1c359b2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e support async credential token providers (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/95e93f763e104110fc0fb855175a8551dcbe5931\"\u003e95e93f7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e mark usage iteration model as nullable (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/520d000440ddbc2262e5814d76c3add2380395db\"\u003e520d000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e use one input transformation type for message and delta event (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/ae86d7d7b689e9a9635270621af9fe9e7040ed57\"\u003eae86d7d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e honor Retry-After values above 60 seconds (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2d03ba20c747c0ee3b58f696355ce41acc605460\"\u003e2d03ba2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e ignore invalid Retry-After values and validate maxRetries (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/909d92ff57dd27270796407547ffbbf521cf941e\"\u003e909d92f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e retry connection errors in the async client and stop blocking in the coroutine retry loop (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/909d92ff57dd27270796407547ffbbf521cf941e\"...\n\n_Description has been truncated_","html_url":"https://github.com/project-argusai/ArgusAI/pull/588","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-argusai%2FArgusAI/issues/588","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/588/packages"}},{"old_version":"\u003e=42.0.0","new_version":"\u003e=50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-19T09:51:10.000Z","version_change":"\u003e=42.0.0 → \u003e=50.0.1","issue":{"uuid":"5509193051","node_id":"PR_kwDOS6olns8AAAABEM2nGQ","number":21,"state":"open","title":"chore(deps): update cryptography requirement from \u003e=42.0.0 to \u003e=50.0.1","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-19T09:51:10.000Z","updated_at":"2026-09-19T09:51:18.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"cryptography","old_version":"\u003e=42.0.0","new_version":"\u003e=50.0.1","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/42.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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\u003c/details\u003e","html_url":"https://github.com/donny-devops/pqc-sdk/pull/21","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/donny-devops%2Fpqc-sdk/issues/21","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/21/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-19T09:12:23.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5509025500","node_id":"PR_kwDOTduCbs8AAAABEMuexg","number":185,"state":"closed","title":"chore(deps): bump the python-runtime group with 7 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-09-19T09:50:45.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-19T09:12:23.000Z","updated_at":"2026-09-19T09:50:47.000Z","time_to_close":2302,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-runtime","update_count":7,"packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"django","old_version":"5.2.17","new_version":"6.1.1","repository_url":"https://github.com/django/django"},{"name":"gunicorn","old_version":"23.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography), [django](https://github.com/django/django), [django-allauth[mfa]](https://github.com/sponsors/pennersr), [gunicorn](https://github.com/benoitc/gunicorn), [psycopg[binary]](https://github.com/psycopg/psycopg), [procrastinate[django]](https://github.com/procrastinate-org/procrastinate) and [django-anymail[resend]](https://github.com/anymail/django-anymail) to permit the latest version.\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django` from 5.2.17 to 6.1.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/249b13d6e93ee3164dee8ed1775395622a50c337\"\u003e\u003ccode\u003e249b13d\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5f26fa88415db2268dcc3d865c5c1062c0a1d751\"\u003e\u003ccode\u003e5f26fa8\u003c/code\u003e\u003c/a\u003e [6.1.x] Added release date for 6.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fdcf78a14109a28433cf2b0983a75322baf5d0f7\"\u003e\u003ccode\u003efdcf78a\u003c/code\u003e\u003c/a\u003e [6.1.x] Added remaining community package mentions to the documentation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/72415689785fdf68238a288e71338a2f7b8deb2a\"\u003e\u003ccode\u003e7241568\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37222\"\u003e#37222\u003c/a\u003e -- Fixed QuerySet.distinct() crash on duplicated selecti...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/ef3fc8054fea8a728cfb879375a858a6f181b8d9\"\u003e\u003ccode\u003eef3fc80\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37312\"\u003e#37312\u003c/a\u003e, Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36605\"\u003e#36605\u003c/a\u003e -- Fixed annotation preservation and key se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/b09cb6bb9489dda57969108d058ac40e15d6584e\"\u003e\u003ccode\u003eb09cb6b\u003c/code\u003e\u003c/a\u003e [6.1.x] Clarified scope of object-level admin view permissions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/a6d3aa22a5ca5a3519cee39cf358ebdfa9fa1756\"\u003e\u003ccode\u003ea6d3aa2\u003c/code\u003e\u003c/a\u003e [6.1.x] Corrected heading hierarchy in the admin actions documentation.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9031d4185a7eaf4056dc3161859b8fe5874f0c28\"\u003e\u003ccode\u003e9031d41\u003c/code\u003e\u003c/a\u003e [6.1.x] Clarified object-level permission checks in admin actions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc805c6f3416c626074fdfaf992df09c02502737\"\u003e\u003ccode\u003efc805c6\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37311\"\u003e#37311\u003c/a\u003e -- Prevented consumption of rhs iterators in annotation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/4b0185a5fb02a8c691bee4ce82e70174e061a228\"\u003e\u003ccode\u003e4b0185a\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37300\"\u003e#37300\u003c/a\u003e -- Preserved parent instance hints on custom Prefetch qu...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.17...6.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` to 65.19.3\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 23.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg[binary]` to 3.3.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg[binary]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.6\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1245](https://github.com/psycopg/psycopg/issues/1245)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDon't wait forever for a query to terminate after interrupting it, for\ninstance if the server is unresponsive. The fix requires libpq 17 or newer\n(:ticket:\u003ccode\u003e[#1371](https://github.com/psycopg/psycopg/issues/1371)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eCancel a running query upon receiving \u003ccode\u003e!SystemExit\u003c/code\u003e (:ticket:\u003ccode\u003e[#1384](https://github.com/psycopg/psycopg/issues/1384)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReport \u003ccode\u003e!None\u003c/code\u003e instead of \u003ccode\u003e65535\u003c/code\u003e as the \u003ccode\u003eColumn.precision\u003c/code\u003e of an\n:sql:\u003ccode\u003einterval\u003c/code\u003e column declared with a fields restriction and no explicit\nprecision, such as e.g. :sql:\u003ccode\u003einterval day to second\u003c/code\u003e (:ticket:\u003ccode\u003e[#1397](https://github.com/psycopg/psycopg/issues/1397)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix dumping of nested subclasses of lists as arrays (:ticket:\u003ccode\u003e[#1398](https://github.com/psycopg/psycopg/issues/1398)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eDEALLOCATE ALL\u003c/code\u003e (:ticket:\u003ccode\u003e[#1408](https://github.com/psycopg/psycopg/issues/1408)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eBetter guards dumping large Python \u003ccode\u003e!int\u003c/code\u003e to binary numeric (:ticket:\u003ccode\u003e[#1414](https://github.com/psycopg/psycopg/issues/1414)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eImprove performance of async queries by reducing the overhead of the\n\u003ccode\u003e!wait_async()\u003c/code\u003e function (:ticket:\u003ccode\u003e[#1331](https://github.com/psycopg/psycopg/issues/1331)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ea542c9534cc9841d50450e0c156b549cc6c805a\"\u003e\u003ccode\u003eea542c9\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/8d31e4711c22b206d8863b9397b3b34f5b106e4d\"\u003e\u003ccode\u003e8d31e47\u003c/code\u003e\u003c/a\u003e chore(deps): bump the actions group across 1 directory with 4 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/268f863e0e8dbdbaf4f10616ebd14ff00edaeb51\"\u003e\u003ccode\u003e268f863\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1370\"\u003e#1370\u003c/a\u003e from Sanjays2402/fix/truncated-binary-copy-error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a412fa4d682f035a9cf3c7886a5c95c15c64ba96\"\u003e\u003ccode\u003ea412fa4\u003c/code\u003e\u003c/a\u003e docs: put together different issues fixed around copy parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/f757307068aef06e439cf164915a3781acf483b5\"\u003e\u003ccode\u003ef757307\u003c/code\u003e\u003c/a\u003e fix: clearer error messages according to truncated copy message part\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/b1f17c44096b8fbc90836d9652d083f23c88e28d\"\u003e\u003ccode\u003eb1f17c4\u003c/code\u003e\u003c/a\u003e test: move existing COPY format parsing tests into a single module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/21eba573f9356276b2a3e0b7c1d86fad03f2872f\"\u003e\u003ccode\u003e21eba57\u003c/code\u003e\u003c/a\u003e test: drop useless parametrization of copy binary parsigh test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/6780e17bcee0b838dedd0aa9c1b6dcc563a50cec\"\u003e\u003ccode\u003e6780e17\u003c/code\u003e\u003c/a\u003e fix(copy): handle truncated binary row headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2f2fcfbf35af4b80a4755fff75fe8b8f5e059193\"\u003e\u003ccode\u003e2f2fcfb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1364\"\u003e#1364\u003c/a\u003e from DylanYoung/fix_client_encoding_aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ccc351ec3180969d105199012a017240492a43c0\"\u003e\u003ccode\u003eccc351e\u003c/code\u003e\u003c/a\u003e refactor: don't store the encodings raw table as a dict\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.2.0...3.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `procrastinate[django]` to 3.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/procrastinate-org/procrastinate/releases\"\u003eprocrastinate[django]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.9.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd task middleware by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1556\"\u003eprocrastinate-org/procrastinate#1556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003econtrib/django: auto-close Django DB connections around each task by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1577\"\u003eprocrastinate-org/procrastinate#1577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd worker middleware by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1579\"\u003eprocrastinate-org/procrastinate#1579\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix worker stop request lost during startup and de-flake shutdown tests by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1564\"\u003eprocrastinate-org/procrastinate#1564\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd GitHub CLI feature to devcontainer by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1554\"\u003eprocrastinate-org/procrastinate#1554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Renovate blockers: ignore pre-commit.ci commits and re-pin benchmark action by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1566\"\u003eprocrastinate-org/procrastinate#1566\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove gitIgnoredAuthors to stop Renovate/pre-commit.ci force-push loop by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1569\"\u003eprocrastinate-org/procrastinate#1569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace deprecated migra with results by \u003ca href=\"https://github.com/EdwardBetts\"\u003e\u003ccode\u003e@​EdwardBetts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1511\"\u003eprocrastinate-org/procrastinate#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeflake test_sync_task_runs_in_parallel by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1574\"\u003eprocrastinate-org/procrastinate#1574\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClean up pyproject.toml by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1575\"\u003eprocrastinate-org/procrastinate#1575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeflake test_polling by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1578\"\u003eprocrastinate-org/procrastinate#1578\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix App.task / Blueprint.task not rendering in the API reference by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1562\"\u003eprocrastinate-org/procrastinate#1562\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependencies\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency django to v6.0.4 [SECURITY] by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1538\"\u003eprocrastinate-org/procrastinate#1538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pytest from 9.0.2 to 9.0.3 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1539\"\u003eprocrastinate-org/procrastinate#1539\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate astral-sh/setup-uv action to v8 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1541\"\u003eprocrastinate-org/procrastinate#1541\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v6.0.5 [SECURITY] by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1545\"\u003eprocrastinate-org/procrastinate#1545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ghcr.io/devcontainers/features/node Docker tag to v2 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1542\"\u003eprocrastinate-org/procrastinate#1542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump idna from 3.11 to 3.15 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1549\"\u003eprocrastinate-org/procrastinate#1549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1532\"\u003eprocrastinate-org/procrastinate#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1565\"\u003eprocrastinate-org/procrastinate#1565\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1567\"\u003eprocrastinate-org/procrastinate#1567\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1503\"\u003eprocrastinate-org/procrastinate#1503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1570\"\u003eprocrastinate-org/procrastinate#1570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop Renovate from proposing setuptools major updates by \u003ca href=\"https://github.com/medihack\"\u003e\u003ccode\u003e@​medihack\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1572\"\u003eprocrastinate-org/procrastinate#1572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1573\"\u003eprocrastinate-org/procrastinate#1573\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock file maintenance by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1576\"\u003eprocrastinate-org/procrastinate#1576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies to v7 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1581\"\u003eprocrastinate-org/procrastinate#1581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate all dependencies by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1580\"\u003eprocrastinate-org/procrastinate#1580\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EdwardBetts\"\u003e\u003ccode\u003e@​EdwardBetts\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/pull/1511\"\u003eprocrastinate-org/procrastinate#1511\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/procrastinate-org/procrastinate/compare/3.8.1...3.9.0\"\u003ehttps://github.com/procrastinate-org/procrastinate/compare/3.8.1...3.9.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/28462ad6e549bd8827eb67bfbe8a6519670198e6\"\u003e\u003ccode\u003e28462ad\u003c/code\u003e\u003c/a\u003e Update all dependencies (\u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/issues/1580\"\u003e#1580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/9d7ee553542cf6e19181acc2348311300a8154a7\"\u003e\u003ccode\u003e9d7ee55\u003c/code\u003e\u003c/a\u003e Update all dependencies to v7 (\u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/issues/1581\"\u003e#1581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/353773353dfea46b9cf428ad638e771f5df38699\"\u003e\u003ccode\u003e3537733\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] auto fixes from pre-commit.com hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/727c7de184be270a258489bfac389daca4c2a1a3\"\u003e\u003ccode\u003e727c7de\u003c/code\u003e\u003c/a\u003e Update all dependencies to v7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/4133f7de69607d90f05b821a50e38e51cb0e16f1\"\u003e\u003ccode\u003e4133f7d\u003c/code\u003e\u003c/a\u003e Update all dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/3d82ddba0ef235a736ea80fc1e68208feeae78b1\"\u003e\u003ccode\u003e3d82ddb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/procrastinate-org/procrastinate/issues/1579\"\u003e#1579\u003c/a\u003e from procrastinate-org/worker-middleware-feature\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/b3eb4d1debc9b5017f62d2693f75e73a5fc2d8e0\"\u003e\u003ccode\u003eb3eb4d1\u003c/code\u003e\u003c/a\u003e Raise MiddlewareKindMismatch for a sync worker middleware\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/7a36eff7ffb655253cdfd104190470703cff23d5\"\u003e\u003ccode\u003e7a36eff\u003c/code\u003e\u003c/a\u003e Frame Django DB cleanup as a built-in use and link the integration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/032edaef1e1c1dc31b1432c3fc37be5207d22cc8\"\u003e\u003ccode\u003e032edae\u003c/code\u003e\u003c/a\u003e Restructure middleware how-to around both middleware kinds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/procrastinate-org/procrastinate/commit/6a4a9daa790744c49f6ea3561e3b3a27faf522f1\"\u003e\u003ccode\u003e6a4a9da\u003c/code\u003e\u003c/a\u003e Scope the MiddlewareKindMismatch note to task middleware\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/procrastinate-org/procrastinate/compare/3.0.0...3.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[resend]` to 15.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[resend]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.2\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-2\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[resend]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.2\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-09-05\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES:** Add support for inbound messages using S3 encryption.\n  This requires the :pypi:`amazon-s3-encryption-client-python` package, which\n  is now included when installing with the ``django-anymail[amazon-ses]`` extra.\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eAmazon SES:\u003c/strong\u003e When using the S3 receipt action for inbound email, large\nmessages are now downloaded and parsed incrementally to reduce memory usage.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eMailtrap:\u003c/strong\u003e Support signature verification for tracking event webhooks.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eMailtrap:\u003c/strong\u003e Add support for inbound email. See\n\u003ccode\u003edocs \u0026amp;lt;https://anymail.dev/en/stable/esps/mailtrap/#inbound-webhook\u0026amp;gt;\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Add support for Postmark's bulk API. See\n\u003ccode\u003eUsing Postmark's bulk API \u0026amp;lt;https://anymail.dev/en/stable/esps/postmark/#using-postmark-s-bulk-api\u0026amp;gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Add \u003ccode\u003ePOSTMARK_MESSAGE_STREAM\u003c/code\u003e option to specify the id of the\nPostmark message stream used for sending. With Django 6.1 \u003ccode\u003eMAILERS\u003c/code\u003e you can\nuse a different \u003ccode\u003emessage_stream\u003c/code\u003e for each configured mailer.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eResend:\u003c/strong\u003e Large inbound messages are now downloaded and parsed\nincrementally to reduce memory usage.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES:** Avoid a Python bug that could corrupt images and attachments\n  in inbound messages.\n\n* **Inbound:** ``AnymailInboundMessage``'s ``text`` and ``html`` attributes\n  and ``get_content_text()`` method now normalize line endings to ``\\n``.\n  In earlier releases, either ``\\n`` or ``\\r\\n`` could be returned,\n  inconsistently and somewhat unpredictably.\n\n\nv15.1\n-----\n\n*2026-07-30*\n\nFixes\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/81c6505911b2770ba348e86a0b92a5dc0a65cde2\"\u003e\u003ccode\u003e81c6505\u003c/code\u003e\u003c/a\u003e Release 15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8ce3acac0f7d8f113dfc302bf2936a21b899957c\"\u003e\u003ccode\u003e8ce3aca\u003c/code\u003e\u003c/a\u003e Mailgun: Stop polling event API in integration tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d3c121cd868ec0648eb8a2b5bcd03ba8ad7343cd\"\u003e\u003ccode\u003ed3c121c\u003c/code\u003e\u003c/a\u003e Resend: Stream inbound messages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/9ab940e8900a1703b898833e45a650772bd8c909\"\u003e\u003ccode\u003e9ab940e\u003c/code\u003e\u003c/a\u003e Mailtrap: Make inbound download chunk size configurable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/854084129d43859af6d1ff9daf49394e2807f420\"\u003e\u003ccode\u003e8540841\u003c/code\u003e\u003c/a\u003e Remove unused AnymailInboundMessage.parse_raw_mime_file()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/05dd35a7c0925c2a4b4e038cfb3eb1a19657a055\"\u003e\u003ccode\u003e05dd35a\u003c/code\u003e\u003c/a\u003e Amazon SES: Stream inbound messages from S3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d8b4593eae39c9502bed325e7790b757ab3f6d2c\"\u003e\u003ccode\u003ed8b4593\u003c/code\u003e\u003c/a\u003e Inbound: Normalize line endings on text parts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/aef5d9d52a2ddcb56d6e7e2c66dbdeb9ed6ad908\"\u003e\u003ccode\u003eaef5d9d\u003c/code\u003e\u003c/a\u003e Brevo: Update quirks documentation for HTML body\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/bc8d362f3d9c8b00582b4a129f4b184c835a3a42\"\u003e\u003ccode\u003ebc8d362\u003c/code\u003e\u003c/a\u003e Mailtrap: Make inbound work with example payload\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7bc95200055af32d1926b5038c60a8378838c773\"\u003e\u003ccode\u003e7bc9520\u003c/code\u003e\u003c/a\u003e Amazon SES: Support inbound S3 encryption\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/AIJSAI/backyard/pull/185","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AIJSAI%2Fbackyard/issues/185","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/185/packages"}},{"old_version":"46.0.5","new_version":"50.0.0","update_type":"major","path":null,"pr_created_at":"2026-09-19T03:51:06.000Z","version_change":"46.0.5 → 50.0.0","issue":{"uuid":"5507547597","node_id":"PR_kwDOUTCdd88AAAABELl5rw","number":2,"state":"open","title":"chore(deps): bump the uv group across 2 directories with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-19T03:51:06.000Z","updated_at":"2026-09-19T03:51:56.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":15,"packages":[{"name":"aiohttp","old_version":"3.13.3","new_version":"3.14.3","repository_url":"https://github.com/aio-libs/aiohttp"},{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"h2","old_version":"4.4.0","new_version":"4.4.1","repository_url":"https://github.com/python-hyper/h2"},{"name":"httpcore2","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"httpx2","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"pyjwt","old_version":"2.10.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-dotenv","old_version":"1.1.0","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 9 updates in the /examples/python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.13.3` | `3.14.3` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.0` |\n| [h2](https://github.com/python-hyper/h2) | `4.4.0` | `4.4.1` |\n| [httpcore2](https://github.com/pydantic/httpx2) | `2.9.0` | `2.10.0` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.9.0` | `2.10.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.10.1` | `2.13.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.0` | `1.2.2` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n\nBumps the uv group with 12 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [web3](https://github.com/ApeWorX/web3.py) | `7.6.0` | `7.15.0` |\n| [aiohttp](https://github.com/aio-libs/aiohttp) | `3.13.3` | `3.14.3` |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.14.2` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.0` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.15` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.1` | `2.20.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.10.1` | `2.13.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.0` | `1.2.2` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [starlette](https://github.com/Kludex/starlette) | `0.52.1` | `1.3.1` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `9.0.3` |\n\n\nUpdates `aiohttp` from 3.13.3 to 3.14.3\nUpdates `cryptography` from 46.0.5 to 50.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.5...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `h2` from 4.4.0 to 4.4.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-hyper/h2/blob/master/CHANGELOG.rst\"\u003eh2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.4.1 (2026-08-03)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance improvement: remove consumed frames in-place from data buffer.\u003c/li\u003e\n\u003cli\u003eReject duplicate Host headers in request headers. Thanks to Sunand Mohan for the report.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/bc239af1d1b85bc70482804f30a0e0e587d90a08\"\u003e\u003ccode\u003ebc239af\u003c/code\u003e\u003c/a\u003e v4.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/92b925ed1b1817c82db32893503f74f47fcf4452\"\u003e\u003ccode\u003e92b925e\u003c/code\u003e\u003c/a\u003e add test for duplicate host headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/292a40829feefda98c8509dcdbbb4a57af9bd6a6\"\u003e\u003ccode\u003e292a408\u003c/code\u003e\u003c/a\u003e reject duplicate Host headers in request headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/04d3b87cbc1db020d28c7cfb44fe194558efbdde\"\u003e\u003ccode\u003e04d3b87\u003c/code\u003e\u003c/a\u003e update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/439b970d0fa19891fa81068907de97dfa3a07c3a\"\u003e\u003ccode\u003e439b970\u003c/code\u003e\u003c/a\u003e prepare for next release cycle\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/h2/commit/9a7ff7430df669fa8e90b6121f3cc1ed64d1115a\"\u003e\u003ccode\u003e9a7ff74\u003c/code\u003e\u003c/a\u003e performance: remove consumed frames in place from data buffer (\u003ca href=\"https://redirect.github.com/python-hyper/h2/issues/1321\"\u003e#1321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-hyper/h2/compare/v4.4.0...v4.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpcore2` from 2.9.0 to 2.10.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpcore2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🚀 Performance and memory improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSending large HTTP/2 request bodies no longer copies the body quadratically - sending a 256 MiB body went from ~36s to under 0.1s (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSSE parsing is up to 35x faster on highly fragmented streams (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCookie extraction is now skipped for responses without a \u003ccode\u003eSet-Cookie\u003c/code\u003e header, making typical requests roughly 8% faster (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🕸️ WebAssembly / Emscripten support\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ehttpx2\u003c/code\u003e now runs on Pyodide / Emscripten, using a JavaScript \u003ccode\u003efetch\u003c/code\u003e-based transport defined in \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1114\"\u003epydantic/httpx2#1114\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e!\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running on WebAssembly / Emscripten via Pyodide by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1071\"\u003epydantic/httpx2#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd RFC 9110 status code constants by \u003ca href=\"https://github.com/mbeijen\"\u003e\u003ccode\u003e@​mbeijen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1069\"\u003epydantic/httpx2#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove SSE chunk buffering performance by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip cookie extraction without \u003ccode\u003eSet-Cookie\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e by \u003ca href=\"https://github.com/ItsDrike\"\u003e\u003ccode\u003e@​ItsDrike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1121\"\u003epydantic/httpx2#1121\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce WebSocket max message size across fragments by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1085\"\u003epydantic/httpx2#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore unsolicited and duplicate Pong frames by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1122\"\u003epydantic/httpx2#1122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid quadratic copying when sending large HTTP/2 request bodies by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePropagate the original exception instead of raising \u003ccode\u003eKeyError\u003c/code\u003e when an HTTP/2 stream fails by \u003ca href=\"https://github.com/yhay81\"\u003e\u003ccode\u003e@​yhay81\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1093\"\u003epydantic/httpx2#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStart TLS for the \u003ccode\u003ewss\u003c/code\u003e scheme in SOCKS5 proxy connections by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1104\"\u003epydantic/httpx2#1104\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🙏 New Contributors\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/a966320e75477b8c55ee78fdb8f57ead6a574cb0\"\u003e\u003ccode\u003ea966320\u003c/code\u003e\u003c/a\u003e Version 2.10.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1129\"\u003e#1129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/586f968f5510aa4d3b7edd1f1b039684c42945ee\"\u003e\u003ccode\u003e586f968\u003c/code\u003e\u003c/a\u003e Avoid quadratic copying when sending large HTTP/2 request bodies (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dee1d1ace3021404d0aa255957821eda97c94c43\"\u003e\u003ccode\u003edee1d1a\u003c/code\u003e\u003c/a\u003e Return \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dec24ad57d1d337de7de23c011eb566a145e7b40\"\u003e\u003ccode\u003edec24ad\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/454b8b2197f62d699ff3ad762917643926b4da77\"\u003e\u003ccode\u003e454b8b2\u003c/code\u003e\u003c/a\u003e Ignore unsolicited and duplicate Pong frames (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/cbfc0e04ef6507da29ccbb3b9c2e5b23dd693414\"\u003e\u003ccode\u003ecbfc0e0\u003c/code\u003e\u003c/a\u003e Improve SSE chunk buffering performance (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1117\"\u003e#1117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/ad141d876c7d3c3f58555cbb0a178ec2c1f15b51\"\u003e\u003ccode\u003ead141d8\u003c/code\u003e\u003c/a\u003e Refactor SSE parser coordination (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1118\"\u003e#1118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e0b01245e42d2091034ee9455cbb068bc0d6c0c6\"\u003e\u003ccode\u003ee0b0124\u003c/code\u003e\u003c/a\u003e Make \u003ccode\u003e_client\u003c/code\u003e depend on the \u003ccode\u003e_transports\u003c/code\u003e package instead of its submodules ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e52f963c62f397f225c8d29573aedbe5ae613906\"\u003e\u003ccode\u003ee52f963\u003c/code\u003e\u003c/a\u003e Skip dependencies not needed on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1114\"\u003e#1114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/5d9eedc98186c612d0e426df417f78f6ec21e9ca\"\u003e\u003ccode\u003e5d9eedc\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.9.0...v2.10.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx2` from 2.9.0 to 2.10.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpx2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🚀 Performance and memory improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSending large HTTP/2 request bodies no longer copies the body quadratically - sending a 256 MiB body went from ~36s to under 0.1s (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSSE parsing is up to 35x faster on highly fragmented streams (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCookie extraction is now skipped for responses without a \u003ccode\u003eSet-Cookie\u003c/code\u003e header, making typical requests roughly 8% faster (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🕸️ WebAssembly / Emscripten support\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ehttpx2\u003c/code\u003e now runs on Pyodide / Emscripten, using a JavaScript \u003ccode\u003efetch\u003c/code\u003e-based transport defined in \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1114\"\u003epydantic/httpx2#1114\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e!\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running on WebAssembly / Emscripten via Pyodide by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003epydantic/httpx2#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1071\"\u003epydantic/httpx2#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd RFC 9110 status code constants by \u003ca href=\"https://github.com/mbeijen\"\u003e\u003ccode\u003e@​mbeijen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1069\"\u003epydantic/httpx2#1069\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove SSE chunk buffering performance by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003epydantic/httpx2#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip cookie extraction without \u003ccode\u003eSet-Cookie\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003epydantic/httpx2#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e by \u003ca href=\"https://github.com/ItsDrike\"\u003e\u003ccode\u003e@​ItsDrike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1121\"\u003epydantic/httpx2#1121\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce WebSocket max message size across fragments by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1085\"\u003epydantic/httpx2#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore unsolicited and duplicate Pong frames by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1122\"\u003epydantic/httpx2#1122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003epydantic/httpx2#1090\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid quadratic copying when sending large HTTP/2 request bodies by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1127\"\u003epydantic/httpx2#1127\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePropagate the original exception instead of raising \u003ccode\u003eKeyError\u003c/code\u003e when an HTTP/2 stream fails by \u003ca href=\"https://github.com/yhay81\"\u003e\u003ccode\u003e@​yhay81\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1093\"\u003epydantic/httpx2#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStart TLS for the \u003ccode\u003ewss\u003c/code\u003e scheme in SOCKS5 proxy connections by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1104\"\u003epydantic/httpx2#1104\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🙏 New Contributors\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/blob/main/src/httpx2/CHANGELOG.md\"\u003ehttpx2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.10.0 (August 9th, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running on WebAssembly / Emscripten via Pyodide, using a JavaScript\n\u003ccode\u003efetch\u003c/code\u003e-based transport defined in \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd RFC 9110 status code constants. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove SSE chunk buffering performance. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1117\"\u003e#1117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip cookie extraction for responses without \u003ccode\u003eSet-Cookie\u003c/code\u003e headers. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1107\"\u003e#1107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce the WebSocket max message size across fragmented messages. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1085\"\u003e#1085\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIgnore unsolicited and duplicate WebSocket Pong frames. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.9.1 (July 24th, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAlias \u003ccode\u003ehttpcore\u003c/code\u003e imports to \u003ccode\u003ehttpcore2\u003c/code\u003e in \u003ccode\u003ealias_httpx()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1082\"\u003e#1082\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/a966320e75477b8c55ee78fdb8f57ead6a574cb0\"\u003e\u003ccode\u003ea966320\u003c/code\u003e\u003c/a\u003e Version 2.10.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1129\"\u003e#1129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dee1d1ace3021404d0aa255957821eda97c94c43\"\u003e\u003ccode\u003edee1d1a\u003c/code\u003e\u003c/a\u003e Return \u003ccode\u003estr | None\u003c/code\u003e instead of \u003ccode\u003eAny\u003c/code\u003e from \u003ccode\u003eHeaders.get\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/dec24ad57d1d337de7de23c011eb566a145e7b40\"\u003e\u003ccode\u003edec24ad\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ehttpx2-jsfetch\u003c/code\u003e on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/454b8b2197f62d699ff3ad762917643926b4da77\"\u003e\u003ccode\u003e454b8b2\u003c/code\u003e\u003c/a\u003e Ignore unsolicited and duplicate Pong frames (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/cbfc0e04ef6507da29ccbb3b9c2e5b23dd693414\"\u003e\u003ccode\u003ecbfc0e0\u003c/code\u003e\u003c/a\u003e Improve SSE chunk buffering performance (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1117\"\u003e#1117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/ad141d876c7d3c3f58555cbb0a178ec2c1f15b51\"\u003e\u003ccode\u003ead141d8\u003c/code\u003e\u003c/a\u003e Refactor SSE parser coordination (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1118\"\u003e#1118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e0b01245e42d2091034ee9455cbb068bc0d6c0c6\"\u003e\u003ccode\u003ee0b0124\u003c/code\u003e\u003c/a\u003e Make \u003ccode\u003e_client\u003c/code\u003e depend on the \u003ccode\u003e_transports\u003c/code\u003e package instead of its submodules ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e52f963c62f397f225c8d29573aedbe5ae613906\"\u003e\u003ccode\u003ee52f963\u003c/code\u003e\u003c/a\u003e Skip dependencies not needed on Emscripten (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1114\"\u003e#1114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/5d9eedc98186c612d0e426df417f78f6ec21e9ca\"\u003e\u003ccode\u003e5d9eedc\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003emax_event_size\u003c/code\u003e to cap SSE event buffering (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/55fad715eb24b3b1c6bbf96757bcb49a03e121de\"\u003e\u003ccode\u003e55fad71\u003c/code\u003e\u003c/a\u003e Bump the python-packages group across 1 directory with 15 updates (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1112\"\u003e#1112\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.9.0...v2.10.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.10.1 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0\u003c/h2\u003e\n\u003ch1\u003ePyJWT 2.13.0 — Security Release\u003c/h1\u003e\n\u003cp\u003eThis release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\"\u003e\u003ccode\u003eGHSA-xgmm-8j9v-c9wx\u003c/code\u003e\u003c/a\u003e — JWK JSON accepted as HMAC secret (algorithm confusion).\u003c/strong\u003e \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e previously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms in \u003ccode\u003ealgorithms=[…]\u003c/code\u003e and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. \u003cem\u003eReported by \u003ca href=\"https://github.com/aradona91\"\u003e\u003ccode\u003e@​aradona91\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\"\u003e\u003ccode\u003eGHSA-jq35-7prp-9v3f\u003c/code\u003e\u003c/a\u003e — Algorithm allow-list bypass with \u003ccode\u003ePyJWK\u003c/code\u003e / \u003ccode\u003ePyJWKClient\u003c/code\u003e.\u003c/strong\u003e When verifying with a \u003ccode\u003ePyJWK\u003c/code\u003e, the caller's \u003ccode\u003ealgorithms=[…]\u003c/code\u003e allow-list was checked against the token header \u003ccode\u003ealg\u003c/code\u003e as a string only; actual verification used the algorithm bound to the \u003ccode\u003ePyJWK\u003c/code\u003e. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header \u003ccode\u003ealg\u003c/code\u003e to match the \u003ccode\u003ePyJWK\u003c/code\u003e's algorithm before verification. \u003cem\u003eReported by \u003ca href=\"https://github.com/sushi-gif\"\u003e\u003ccode\u003e@​sushi-gif\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\"\u003e\u003ccode\u003eGHSA-w7vc-732c-9m39\u003c/code\u003e\u003c/a\u003e — DoS via base64 decode of unused payload segment when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/strong\u003e For detached-payload JWS (\u003ccode\u003eb64=false\u003c/code\u003e), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied \u003ccode\u003edetached_payload\u003c/code\u003e. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. \u003cem\u003eReported by \u003ca href=\"https://github.com/thesmartshadow\"\u003e\u003ccode\u003e@​thesmartshadow\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\"\u003e\u003ccode\u003eGHSA-993g-76c3-p5m4\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e accepts non-HTTP(S) URIs.\u003c/strong\u003e \u003ccode\u003ePyJWKClient.fetch_data\u003c/code\u003e passed its URI to \u003ccode\u003eurllib.request.urlopen\u003c/code\u003e, which by default also handles \u003ccode\u003efile://\u003c/code\u003e, \u003ccode\u003eftp://\u003c/code\u003e, and \u003ccode\u003edata:\u003c/code\u003e schemes. An application that fed an attacker-influenced URI into \u003ccode\u003ePyJWKClient\u003c/code\u003e could be coerced into reading local files or reaching other unintended schemes. \u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects any URI whose scheme isn't \u003ccode\u003ehttp\u003c/code\u003e or \u003ccode\u003ehttps\u003c/code\u003e. \u003cem\u003eReported by \u003ca href=\"https://github.com/KEIJOT\"\u003e\u003ccode\u003e@​KEIJOT\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\"\u003e\u003ccode\u003eGHSA-fhv5-28vv-h8m8\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e cache wiped on fetch error.\u003c/strong\u003e A \u003ccode\u003efinally\u003c/code\u003e-block \u003ccode\u003eput(jwk_set=None)\u003c/code\u003e cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. \u003cem\u003eReported by \u003ca href=\"https://github.com/eddieran\"\u003e\u003ccode\u003e@​eddieran\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty HMAC keys outright in \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e with \u003ccode\u003eInvalidKeyError\u003c/code\u003e instead of accepting them with only a warning. Defends against the \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e footgun. \u003cem\u003eThanks to \u003ca href=\"https://github.com/SnailSploit\"\u003e\u003ccode\u003e@​SnailSploit\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/spartan8806\"\u003e\u003ccode\u003e@​spartan8806\u003c/code\u003e\u003c/a\u003e for the reports.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eForward per-call \u003ccode\u003eoptions\u003c/code\u003e (including \u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e) from \u003ccode\u003ePyJWT.decode\u003c/code\u003e through to \u003ccode\u003ePyJWS._verify_signature\u003c/code\u003e. The option was previously silently dropped between the two layers, so it only took effect when set on the \u003ccode\u003ePyJWT\u003c/code\u003e instance. \u003cem\u003eThanks to \u003ca href=\"https://github.com/WLUB\"\u003e\u003ccode\u003e@​WLUB\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRFC 7797 §3 compliance for \u003ccode\u003eb64=false\u003c/code\u003e:\u003c/strong\u003e the encoder now auto-adds \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e to \u003ccode\u003ecrit\u003c/code\u003e, and the decoder rejects tokens that set \u003ccode\u003eb64=false\u003c/code\u003e without listing it in \u003ccode\u003ecrit\u003c/code\u003e. \u003cem\u003eThanks to \u003ca href=\"https://github.com/MachineLearning-Nerd\"\u003e\u003ccode\u003e@​MachineLearning-Nerd\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups, by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1152\"\u003e#1152\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eUpgrade notes\u003c/h2\u003e\n\u003cp\u003eMost fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmpty HMAC keys now raise.\u003c/strong\u003e If your app passed \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e or \u003ccode\u003eb\u0026quot;\u0026quot;\u003c/code\u003e as a secret (often via a missing env var, e.g. \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e), \u003ccode\u003eencode\u003c/code\u003e/\u003ccode\u003edecode\u003c/code\u003e will now raise \u003ccode\u003eInvalidKeyError\u003c/code\u003e. This is the intended behavior — fix the configuration.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWK\u003c/code\u003e decoding now requires the token's \u003ccode\u003ealg\u003c/code\u003e to match the JWK's algorithm.\u003c/strong\u003e Previously a mismatch was silently honored if the header \u003ccode\u003ealg\u003c/code\u003e appeared in the allow-list. Tokens that relied on this mismatch will now fail with \u003ccode\u003eInvalidAlgorithmError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects non-HTTP(S) URIs at construction time.\u003c/strong\u003e Tests or dev environments that fetched JWKS from \u003ccode\u003efile://\u003c/code\u003e URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct \u003ccode\u003ePyJWKSet.from_dict(...)\u003c/code\u003e directly).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eb64=false\u003c/code\u003e tokens are now strictly RFC 7515 / 7797 compliant.\u003c/strong\u003e Tokens with a non-empty compact-form payload segment, or that omit \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e from \u003ccode\u003ecrit\u003c/code\u003e, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e set per-call now takes effect.\u003c/strong\u003e Callers who passed \u003ccode\u003eoptions={\u0026quot;enforce_minimum_key_length\u0026quot;: True}\u003c/code\u003e to \u003ccode\u003ejwt.decode()\u003c/code\u003e previously got no enforcement; they will now get \u003ccode\u003eInvalidKeyError\u003c/code\u003e on undersized keys, as documented.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd typing_extensions dependency for Python \u0026lt; 3.11 by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1151\"\u003ejpadilla/pyjwt#1151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.0\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by \u003ca href=\"https://github.com/dmbs335\"\u003e\u003ccode\u003e@​dmbs335\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f\"\u003eGHSA-752w-5fwx-jx9f\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.13.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject JWK JSON documents passed as raw HMAC secrets in\n  ``HMACAlgorithm.prepare_key`` to close an algorithm-confusion gap that\n  the existing PEM/SSH guard did not cover. Reported by @aradona91 in\n  `GHSA-xgmm-8j9v-c9wx \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\u0026gt;`__.\n- Bind the JWT header ``alg`` to ``PyJWK.algorithm_name`` during\n  verification so the caller's ``algorithms=[...]`` allow-list cannot be\n  bypassed when decoding with a ``PyJWK`` / ``PyJWKClient`` key. Reported\n  by @sushi-gif in `GHSA-jq35-7prp-9v3f \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\u0026gt;`__.\n- Reject non-``http(s)`` URI schemes in ``PyJWKClient`` so attacker-\n  influenced URIs cannot read local files or reach unintended schemes via\n  urllib's default ``file://`` / ``ftp://`` / ``data:`` handlers. Reported\n  by @KEIJOT in `GHSA-993g-76c3-p5m4 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\u0026gt;`__.\n- Preserve the cached JWK Set on fetch errors in ``PyJWKClient.fetch_data``.\n  The previous ``finally``-block ``put(None)`` pattern cleared the cache\n  on any transient outage, turning one bad JWKS request into application-\n  wide auth failure. Reported by @eddieran in `GHSA-fhv5-28vv-h8m8 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\u0026gt;`__.\n- Skip the unconditional base64 decode of the compact-form payload segment\n  when ``b64=false`` is set in the protected header, and require that\n  segment to be empty (RFC 7515 Appendix F detached form). Closes an\n  unauthenticated DoS amplifier. Reported by @thesmartshadow in\n  `GHSA-w7vc-732c-9m39 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject empty HMAC keys outright in ``HMACAlgorithm.prepare_key`` with\n  ``InvalidKeyError`` instead of accepting them with only a warning.\n  Thanks to @SnailSploit and @spartan8806 for independently flagging the\n  footgun.\n- Forward per-call ``options`` (including ``enforce_minimum_key_length``)\n  from ``PyJWT.decode`` through to ``PyJWS._verify_signature`` so the\n  option actually takes effect when set at the call site rather than only\n  on the ``PyJWT`` instance. Thanks to @WLUB for the report.\n- RFC 7797 §3 compliance for ``b64=false``: the encoder now auto-adds\n  ``\u0026amp;quot;b64\u0026amp;quot;`` to the ``crit`` header parameter, and the decoder rejects\n  tokens that set ``b64=false`` without listing it in ``crit``. Thanks to\n  @MachineLearning-Nerd for the report.\n\nChanged\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1152](https://github.com/jpadilla/pyjwt/issues/1152) \u0026amp;lt;https://github.com/jpadilla/pyjwt/pull/1152\u0026amp;gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ccode\u003ev2.12.1 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u0026amp;gt;\u003c/code\u003e__\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7144e4534c34810f4525dc4578a32addd8212cff\"\u003e\u003ccode\u003e7144e45\u003c/code\u003e\u003c/a\u003e Apply ruff format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/d2f4bec4963897c0ef96ef64a875894f2c8542ab\"\u003e\u003ccode\u003ed2f4bec\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003ecast()\u003c/code\u003e calls with cross-version \u003ccode\u003etype: ignore\u003c/code\u003e for \u003ccode\u003eprepare_key\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/22f478cebddd8294259c30f037ecb92b0b348774\"\u003e\u003ccode\u003e22f478c\u003c/code\u003e\u003c/a\u003e Remove redundant casts in \u003ccode\u003eRSAAlgorithm.prepare_key\u003c/code\u003e and `ECAlgorithm.prepare...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/95791b1759b8aa4f2203575d344d5c78564cdc81\"\u003e\u003ccode\u003e95791b1\u003c/code\u003e\u003c/a\u003e Bundle security fixes and hardening into 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/dcc27a9d3182a2349c30b160758785c6ce7a6508\"\u003e\u003ccode\u003edcc27a9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1155\"\u003e#1155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9d08a9a1896845ed8eaf88e6f6ac61e5800c3e7a\"\u003e\u003ccode\u003e9d08a9a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/b87c10014d4109f0214fea188d00faaaf8a80e64\"\u003e\u003ccode\u003eb87c100\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1154\"\u003e#1154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/40e3147eb5f790d8d041772e5fc00728a176c812\"\u003e\u003ccode\u003e40e3147\u003c/code\u003e\u003c/a\u003e Migrate development extras to dependency groups (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1152\"\u003e#1152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a4e1a3d1218b01c5806420b8f16d9308ac4adc30\"\u003e\u003ccode\u003ea4e1a3d\u003c/code\u003e\u003c/a\u003e Add typing_extensions dependency for Python \u0026lt; 3.11 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/bd9700cca7f9258fadcc429c1034e508025931f2\"\u003e\u003ccode\u003ebd9700c\u003c/code\u003e\u003c/a\u003e Use PyJWK algorithm when encoding without explicit algorithm (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.10.1...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.1.0 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.1] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMove more config to \u003ccode\u003epyproject.toml\u003c/code\u003e, removed \u003ccode\u003esetup.cfg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for reading \u003ccode\u003e.env\u003c/code\u003e from FIFOs (Unix) by [\u003ca href=\"https://github.com/sidharth-sudhir\"\u003e\u003ccode\u003e@​sidharth-sudhir\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/586\"\u003e#586\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.2.0] - 2025-10-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade build system to use PEP 517 \u0026amp; PEP 518 to use \u003ccode\u003ebuild\u003c/code\u003e and \u003ccode\u003epyproject.toml\u003c/code\u003e by [\u003ca href=\"https://github.com/EpicWink\"\u003e\u003ccode\u003e@​EpicWink\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/583\"\u003e#583\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 by [\u003ca href=\"https://github.com/23f3001135\"\u003e\u003ccode\u003e@​23f3001135\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/579\"\u003e#579\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for disabling of \u003ccode\u003eload_dotenv()\u003c/code\u003e using \u003ccode\u003ePYTHON_DOTENV_DISABLED\u003c/code\u003e env var. by [\u003ca href=\"https://github.com/matthewfranglen\"\u003e\u003ccode\u003e@​matthewfranglen\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/569\"\u003e#569\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.1.1] - 2025-06-24\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCLI: Ensure \u003ccode\u003efind_dotenv\u003c/code\u003e work reliably on python 3.13 by [\u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/563\"\u003e#563\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.1.0...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.33.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e docs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e docs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e docs: exclude Response.is_permanent_redirect from API docs (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e docs: clarify Quickstart POST example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.6.3 to 2.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been read and decompressed partially. (Reported by \u003ca href=\"https://github.com/Cycloctane\"\u003e\u003ccode\u003e@​Cycloctane\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or \u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed using the official \u003ca href=\"https://pypi.org/project/brotli/\"\u003eBrotli\u003c/a\u003e library. (Reported by \u003ca href=\"https://github.com/kimkou2024\"\u003e\u003ccode\u003e@​kimkou2024\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee GHSA-mf9v-mfxr-j63j for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip sensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by \u003ca href=\"https://github.com/christos-spearbit\"\u003e\u003ccode\u003e@​christos-spearbit\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3763\"\u003eurllib3/urllib3#3763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3720\"\u003eurllib3/urllib3#3720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003eurllib3/urllib3#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3777\"\u003eurllib3/urllib3#3777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed data buffered from previous partial reads. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3636\"\u003eurllib3/urllib3#3636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the response after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4967\"\u003eurllib3/urllib3#4967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eHTTPResponse.read_chunked()\u003c/code\u003e to handle \u003ccode\u003eamt=0\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3793\"\u003eurllib3/urllib3#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003e_TYPE_BODY\u003c/code\u003e type alias to include missing \u003ccode\u003eIterable[str]\u003c/code\u003e, matching the documented and runtime behavior of chunked request bodies. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3798\"\u003eurllib3/urllib3#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eLocationParseError\u003c/code\u003e when paths resembling schemeless URIs were passed to \u003ccode\u003eHTTPConnectionPool.urlopen()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3352\"\u003eurllib3/urllib3#3352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eBaseHTTPResponse.readinto()\u003c/code\u003e type annotation to accept \u003ccode\u003ememoryview\u003c/code\u003e in addition to \u003ccode\u003ebytearray\u003c/code\u003e, matching the \u003ccode\u003eio.RawIOBase.readinto\u003c/code\u003e contract and enabling use with \u003ccode\u003eio.BufferedReader\u003c/code\u003e without type errors. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3764\"\u003eurllib3/urllib3#3764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/blob/main/CHANGES.rst\"\u003eurllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.7.0 (2026-05-07)\u003c/h1\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues.\nImpact was limited to specific use cases detailed in the accompanying\nadvisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been\nread and decompressed partially.\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or\n\u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed\nusing the official \u003ccode\u003eBrotli \u0026lt;https://pypi.org/project/brotli/\u0026gt;\u003c/code\u003e__ library.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee \u003ccode\u003eGHSA-mf9v-mfxr-j63j \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j\u0026gt;\u003c/code\u003e__\nfor details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip\nsensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when\nredirecting to a different host.\n(\u003ccode\u003eGHSA-qccp-gfcp-xxvc \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc\u0026gt;\u003c/code\u003e__)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better\nvisibility of existing deprecation notices. Rescheduled the removal of\ndeprecated features to version 3.0.\n(\u003ccode\u003e[#3763](https://github.com/urllib3/urllib3/issues/3763) \u0026lt;https://github.com/urllib3/urllib3/issues/3763\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9.\n(\u003ccode\u003e[#3720](https://github.com/urllib3/urllib3/issues/3720) \u0026lt;https://github.com/urllib3/urllib3/issues/3720\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10.\n(\u003ccode\u003e[#4979](https://github.com/urllib3/urllib3/issues/4979) \u0026lt;https://github.com/urllib3/urllib3/issues/4979\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0.\n(\u003ccode\u003e[#3777](https://github.com/urllib3/urllib3/issues/3777) \u0026lt;https://github.com/urllib3/urllib3/issues/3777\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed\ndata buffered from previous partial reads.\n(\u003ccode\u003e[#3636](https://github.com/urllib3/urllib3/issues/3636) \u0026lt;https://github.com/urllib3/urllib3/issues/3636\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the\nresponse after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2\"\u003e\u003ccode\u003e9a950b9\u003c/code\u003e\u003c/a\u003e Release 2.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc\"\u003e\u003ccode\u003e5ec0de4\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2bdcc44d1e163fb5cc48a8662425e35e15adfe6a\"\u003e\u003ccode\u003e2bdcc44\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/f45b0df09d8620ac6ed0491eb9362c8c87b7bc2c\"\u003e\u003ccode\u003ef45b0...\n\n_Description has been truncated_","html_url":"https://github.com/dabelstech-creator/cdp-sdk/pull/2","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabelstech-creator%2Fcdp-sdk/issues/2","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2/packages"}},{"old_version":"49.0.0","new_version":"50.0.0","update_type":"major","path":null,"pr_created_at":"2026-09-19T02:33:25.000Z","version_change":"49.0.0 → 50.0.0","issue":{"uuid":"5507189123","node_id":"PR_kwDOPCehC88AAAABELUD2A","number":221,"state":"closed","title":"Bump cryptography from 49.0.0 to 50.0.0","user":"dependabot[bot]","labels":["lgtm","approved","size/M","dependencies","python:uv"],"assignees":["nabuskey"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-22T21:02:06.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-19T02:33:25.000Z","updated_at":"2026-09-22T21:02:15.000Z","time_to_close":325721,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"cryptography","old_version":"49.0.0","new_version":"50.0.0","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps [cryptography](https://github.com/pyca/cryptography) from 49.0.0 to 50.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**:\n  :func:`~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der`\n  and its PEM and S/MIME variants no longer expose distinguishable errors or\n  timing when unwrapping a ``RecipientInfo``'s ``encryptedKey``, which could\n  act as a Bleichenbacher oracle for callers that decrypt untrusted messages.\n  A random key is now substituted on failure, as described in :rfc:`3218`.\n  Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247**\n* Deprecated Diffie-Hellman key exchange over finite fields (FFDH).\n  Everything FFDH is deprecated, including the types in\n  ``cryptography.hazmat.primitives.asymmetric.dh`` and loading FFDH keys or\n  parameters with the key loading APIs. Users should migrate to a more\n  modern key exchange algorithm.\n* Added ``xof()`` class methods to\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE128` and\n  :class:`~cryptography.hazmat.primitives.hashes.SHAKE256` for constructing\n  algorithm instances configured for use with\n  :class:`~cryptography.hazmat.primitives.hashes.XOFHash`.\n* The :mod:`X.509 verification \u0026lt;cryptography.x509.verification\u0026gt;` APIs are now\n  considered stable and are subject to our API stability policy.\n* Added the :doc:`/cobblestone` recipe, an implementation of the\n  Cobblestone-128 and Cobblestone-256 instantiations of the `C2SP\n  chunked-encryption specification\n  \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;`_ for streaming authenticated\n  encryption of large messages.\n* Parsing a Signed Certificate Timestamp list now rejects encodings that\n  carry trailing bytes after the list or after an individual SCT, instead of\n  silently ignoring them.\n* Added support for using :class:`~cryptography.x509.Name` as a field type in\n  the :doc:`/hazmat/asn1/index` module.\n* Loading a public key or an EC private key now rejects DER where the\n  ``subjectPublicKey`` (or EC ``publicKey``) ``BIT STRING`` declares a non-zero\n  number of unused bits, instead of silently ignoring it.\n* Parsing a CRL entry's ``InvalidityDate`` extension now rejects a\n  ``GeneralizedTime`` that carries fractional seconds or another non-DER form,\n  matching the strict encoding already required for every other X.509 time\n  field.\n* :func:`~cryptography.x509.ocsp.load_der_ocsp_request` and\n  :func:`~cryptography.x509.ocsp.load_der_ocsp_response` now reject a request\n  or response whose ``version`` field is not ``v1``, the only version defined\n  by RFC 6960, matching the version validation already performed when loading\n  certificates, CSRs and CRLs.\n* :class:`~cryptography.hazmat.primitives.hashes.XOFHash` is now supported\n  when building against AWS-LC.\n* HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when\n  building against AWS-LC.\n* Diffie-Hellman (:doc:`/hazmat/primitives/asymmetric/dh`) is now supported\n  when building against AWS-LC.\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6893b94c33e948f6240082461424cfb5da2dacc6\"\u003e\u003ccode\u003e6893b94\u003c/code\u003e\u003c/a\u003e Import _serialization instead of serialization in x509/extensions (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15363\"\u003e#15363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/49.0.0...50.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography\u0026package-manager=uv\u0026previous-version=49.0.0\u0026new-version=50.0.0)](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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/kubeflow/mcp-apache-spark-history-server/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/kubeflow/mcp-apache-spark-history-server/pull/221","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubeflow%2Fmcp-apache-spark-history-server/issues/221","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/221/packages"}},{"old_version":"46.0.5","new_version":"50.0.1","update_type":"major","path":null,"pr_created_at":"2026-09-19T00:00:03.000Z","version_change":"46.0.5 → 50.0.1","issue":{"uuid":"5506212254","node_id":"PR_kwDOUE4m3s8AAAABEKg5kg","number":14,"state":"closed","title":"chore(deps): bump the python-runtime group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-25T23:58:36.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-19T00:00:03.000Z","updated_at":"2026-09-25T23:58:38.000Z","time_to_close":604713,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-runtime","update_count":16,"packages":[{"name":"cryptography","old_version":"46.0.5","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"numpy","old_version":"2.5.2","new_version":"2.5.3","repository_url":"https://github.com/numpy/numpy"},{"name":"onnxruntime","old_version":"1.29.0","new_version":"1.30.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"openai","old_version":"3.3.1","new_version":"3.14.1","repository_url":"https://github.com/openai/openai-python"},{"name":"piper-tts","old_version":"1.4.2","new_version":"1.8.0","repository_url":"https://github.com/OHF-voice/piper1-gpl"},{"name":"playwright","old_version":"1.55.0","new_version":"1.63.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"scipy","old_version":"1.18.0","new_version":"1.18.1","repository_url":"https://github.com/scipy/scipy"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.2","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"uvicorn","old_version":"0.52.4","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"vllm","old_version":"0.27.1","new_version":"0.29.0","repository_url":"https://github.com/vllm-project/vllm"},{"name":"huggingface-hub","old_version":"1.28.0","new_version":"1.31.0","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"ninja","old_version":"1.13.0","new_version":"1.13.2","repository_url":"https://github.com/ninja-build/ninja"},{"name":"accelerate","old_version":"1.14.0","new_version":"1.15.0","repository_url":"https://github.com/huggingface/accelerate"},{"name":"torch","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"transformers","old_version":"5.15.1","new_version":"5.17.0","repository_url":"https://github.com/huggingface/transformers"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-runtime group with 16 updates in the /requirements directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.5` | `50.0.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.5.2` | `2.5.3` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.29.0` | `1.30.0` |\n| [openai](https://github.com/openai/openai-python) | `3.3.1` | `3.14.1` |\n| [piper-tts](https://github.com/OHF-voice/piper1-gpl) | `1.4.2` | `1.8.0` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.55.0` | `1.63.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [scipy](https://github.com/scipy/scipy) | `1.18.0` | `1.18.1` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.4` | `0.53.0` |\n| [vllm](https://github.com/vllm-project/vllm) | `0.27.1` | `0.29.0` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.28.0` | `1.31.0` |\n| [ninja](https://github.com/ninja-build/ninja) | `1.13.0` | `1.13.2` |\n| [accelerate](https://github.com/huggingface/accelerate) | `1.14.0` | `1.15.0` |\n| [torch](https://github.com/pytorch/pytorch) | `2.13.0` | `2.14.0` |\n| [transformers](https://github.com/huggingface/transformers) | `5.15.1` | `5.17.0` |\n\n\nUpdates `cryptography` from 46.0.5 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.5...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.5.2 to 2.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.3 (Sep 6, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.3 Release Notes\u003c/h1\u003e\n\u003cp\u003eThe NumPy 2.5.3 is a patch release that fixes bugs discovered after the 2.5.2\nrelease. Apart from the usual bug and maintenance work, there are a number of\nStringDType related fixes for problems discovered during the ongoing string\nwork in the main branch.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.12-3.15\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCasting a fixed-width byte string array (\u003ccode\u003enp.bytes_\u003c/code\u003e) to \u003ccode\u003eStringDType\u003c/code\u003e\nnow raises \u003ccode\u003eTypeError\u003c/code\u003e when the bytes are not valid UTF-8. Previously the\ninvalid bytes were stored as-is and later caused undefined behavior in\nstring operations.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32296\"\u003egh-32296\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eMaskedArray._fill_value\u003c/code\u003e would become stale when ufuncs that change dtype\nleft the result holding a fill_value typed for the old dtype. The mismatch\nwas silent until something later called \u003ccode\u003e_check_fill_value\u003c/code\u003e, such as\n\u003ccode\u003e.view()\u003c/code\u003e, and then a \u003ccode\u003eTypeError\u003c/code\u003e would be raised. Now, when the copied\nfill_value is no longer valid for the new dtype, fall back to the\ndefault fill_value for that dtype instead of propagating the stale value.\nThis may raise a \u003ccode\u003eComplexWarning\u003c/code\u003e if the fill_value is complex and the\nnew dtype is real.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32423\"\u003egh-32423\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 9 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eIason Krommydas\u003c/li\u003e\n\u003cli\u003eJames Davies +\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eMaanas Arora\u003c/li\u003e\n\u003cli\u003eMatti Picus\u003c/li\u003e\n\u003cli\u003eNathan Goldbaum\u003c/li\u003e\n\u003cli\u003eShikhar Goel +\u003c/li\u003e\n\u003cli\u003eYeonho Kim +\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePull requests merged\u003c/h2\u003e\n\u003cp\u003eA total of 27 pull requests were merged for this release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/32235\"\u003e#32235\u003c/a\u003e: MAINT: Prepare 2.5.x for further development\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/dd88c0c19b54ad9ed3533224221285bf0873249a\"\u003e\u003ccode\u003edd88c0c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32511\"\u003e#32511\u003c/a\u003e from charris/prepare-2.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/edcac6acc392f4010933ee83e8a4769a7cfe92c5\"\u003e\u003ccode\u003eedcac6a\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.5.3 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/fd4d908aff89773ead13f7c6a0ab31153f14439e\"\u003e\u003ccode\u003efd4d908\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32509\"\u003e#32509\u003c/a\u003e from charris/backport-32496\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/65bb1da13d0ee784be84d173b86784f0d64bdaca\"\u003e\u003ccode\u003e65bb1da\u003c/code\u003e\u003c/a\u003e BUG: fix crash in ufunc.resolve_dtypes with a Python scalar type (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32496\"\u003e#32496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/294956e85dfaea149aada1278c2ed6be0f6f28c8\"\u003e\u003ccode\u003e294956e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32506\"\u003e#32506\u003c/a\u003e from charris/backport-32503\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/26428d9a3f5ab4f604b326347e3a9c6dcc00c1cb\"\u003e\u003ccode\u003e26428d9\u003c/code\u003e\u003c/a\u003e DOC: fix scipy docs links in intersphinx mapping (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32507\"\u003e#32507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/5fab1cbc6aa9e119d9f931243a56c6fbca989476\"\u003e\u003ccode\u003e5fab1cb\u003c/code\u003e\u003c/a\u003e DOC: use static scipy doc site for intershpinx (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32503\"\u003e#32503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/7beed2f7e9a24e493a04ff7e2eb1db0d7f9c50e6\"\u003e\u003ccode\u003e7beed2f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32481\"\u003e#32481\u003c/a\u003e from ngoldbaum/stringdtype-backport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/8972f70798a2ba1bb4557157982fd6001906f993\"\u003e\u003ccode\u003e8972f70\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32478\"\u003e#32478\u003c/a\u003e from charris/backport-32466\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/ab1b58902a868d4151ef3cf8dbeb91d8a1924fa4\"\u003e\u003ccode\u003eab1b589\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/32477\"\u003e#32477\u003c/a\u003e from charris/backport-32423\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.5.2...v2.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `onnxruntime` from 1.29.0 to 1.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/onnxruntime/releases\"\u003eonnxruntime's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eONNX Runtime v1.30.0\u003c/h2\u003e\n\u003cp\u003eONNX Runtime 1.30.0 expands generative AI inference, improves CPU and GPU performance, adds Go bindings, and strengthens runtime reliability. These notes cover changes since ONNX Runtime 1.29.1.\u003c/p\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExpanded CUDA inference support with variable-length causal convolution for continuous batching, speculative decoding in paged XQA, and INT4 paged KV caches with per-channel scales (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32168\"\u003e#32168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32340\"\u003e#32340\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32515\"\u003e#32515\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eImproved WebGPU PagedAttention, added GPT-OSS support and INT8 KV-cache block quantization, and extended convolution optimizations (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31727\"\u003e#31727\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32277\"\u003e#32277\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32284\"\u003e#32284\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32420\"\u003e#32420\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded fused CPU LinearAttention kernels for AVX-512, Arm64 NEON, and SVE, plus AVX2 LayerNorm/RMSNorm acceleration (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31674\"\u003e#31674\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31973\"\u003e#31973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32178\"\u003e#32178\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32356\"\u003e#32356\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded Go bindings for the ONNX Runtime C API and DeepSeek Engram contrib operators (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29615\"\u003e#29615\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32268\"\u003e#32268\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAnnouncements \u0026amp; Compatibility\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFP4 QMoE kernels are now enabled by default in CUDA builds, with Windows build support added in this release. Source builds can opt out with \u003ccode\u003e-Donnxruntime_USE_FP4_QMOE=OFF\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32096\"\u003e#32096\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32163\"\u003e#32163\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA fpA-intB builds now default to a compact kernel set for FP16 activations, INT4/INT8 weights, scale-only quantization, and \u003ccode\u003eblock_size=32\u003c/code\u003e. Set \u003ccode\u003e-Donnxruntime_USE_FPA_INTB_GEMM_FULL=ON\u003c/code\u003e when building from source to retain the full kernel set, including BF16, zero-point, bias, larger-block-size, and native Hopper variants (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32324\"\u003e#32324\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCPU FP16 \u003ccode\u003eGemm\u003c/code\u003e and \u003ccode\u003eMatMul\u003c/code\u003e execution is gated on hardware acceleration. CPU-assigned FP16 nodes without a matching kernel now fall back to FP32 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32301\"\u003e#32301\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32197\"\u003e#32197\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eWebGPU plugin EP packaging now supports Linux AArch64. Plugin versions were advanced to WebGPU 0.4.0 and CUDA 0.2 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32287\"\u003e#32287\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31960\"\u003e#31960\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31970\"\u003e#31970\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity \u0026amp; Reliability\u003c/h2\u003e\n\u003ch3\u003eModel Loading, Memory, and Input Validation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimited nested model-graph depth and canonicalized external-data locations to harden model loading (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32344\"\u003e#32344\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32135\"\u003e#32135\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded checked rounding for BFC arena allocations and fixed prepacked-weight reference lifetimes (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32010\"\u003e#32010\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32040\"\u003e#32040\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eStrengthened shape, rank, and parameter validation for \u003ccode\u003eSplit\u003c/code\u003e, \u003ccode\u003eScan\u003c/code\u003e, \u003ccode\u003eGatherND\u003c/code\u003e, \u003ccode\u003eScatterND\u003c/code\u003e, \u003ccode\u003eSpaceToDepth\u003c/code\u003e/\u003ccode\u003eDepthToSpace\u003c/code\u003e, \u003ccode\u003eCrop\u003c/code\u003e, \u003ccode\u003eConv\u003c/code\u003e, \u003ccode\u003eNormalizer\u003c/code\u003e, and pooling (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29461\"\u003e#29461\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31668\"\u003e#31668\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32034\"\u003e#32034\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32039\"\u003e#32039\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32076\"\u003e#32076\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32157\"\u003e#32157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32160\"\u003e#32160\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32161\"\u003e#32161\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32345\"\u003e#32345\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32349\"\u003e#32349\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eHardened generation and attention input handling, including attention-attribute narrowing, \u003ccode\u003eBifurcationDetector\u003c/code\u003e inputs, generation subgraph shapes, and QEmbed segment inputs. BeamSearch buffer expansion now uses dynamic shape storage (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31648\"\u003e#31648\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31701\"\u003e#31701\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32009\"\u003e#32009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32078\"\u003e#32078\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32144\"\u003e#32144\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eValidated \u003ccode\u003eTreeEnsemble\u003c/code\u003e node references and bounded subtree comparison, rejected non-finite CPU \u003ccode\u003eRoiAlign\u003c/code\u003e coordinates, and required \u003ccode\u003eImageScaler\u003c/code\u003e bias to match the channel count (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32031\"\u003e#32031\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32043\"\u003e#32043\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32011\"\u003e#32011\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32002\"\u003e#32002\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded an allowlist of safe LoRA adapter parameter data types, validated \u003ccode\u003eMatMulFpQ4\u003c/code\u003e shape inputs, and checked MLAS blockwise quantization/dequantization index ranges (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31682\"\u003e#31682\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32032\"\u003e#32032\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32007\"\u003e#32007\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eGPU Bounds and Resource Lifetimes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHardened CUDA indexing and buffer-size arithmetic in \u003ccode\u003eMatMulNBits\u003c/code\u003e, \u003ccode\u003eRemovePadding\u003c/code\u003e, \u003ccode\u003eRotaryEmbedding\u003c/code\u003e, \u003ccode\u003eSparseAttention\u003c/code\u003e, Whisper beam search, NMS, QDQ, and \u003ccode\u003eGatherElements\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31643\"\u003e#31643\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31994\"\u003e#31994\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31995\"\u003e#31995\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31996\"\u003e#31996\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31998\"\u003e#31998\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32014\"\u003e#32014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32029\"\u003e#32029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32030\"\u003e#32030\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed overflow in CUDA reduction scans and Softmax offset arithmetic, and handled zero-sized outputs in CUDA random-generator kernels (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32137\"\u003e#32137\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32330\"\u003e#32330\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31997\"\u003e#31997\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed CUDA MultiHeadAttention shared-cache scratch lifetimes and kept \u003ccode\u003eCudaAsyncBuffer\u003c/code\u003e staging storage alive across CUDA graph replay (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/31968\"\u003e#31968\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32121\"\u003e#32121\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed WebGPU out-of-bounds subgroup-matrix loads for partial tiles, zero-initialized writable device-allocator buffers, and rejected foreign GPU handles in built-in data transfers (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32364\"\u003e#32364\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32063\"\u003e#32063\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32317\"\u003e#32317\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependencies and Tooling\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgraded Protobuf to 33.6 and refreshed Python documentation dependencies, including an ONNX security-related update (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29906\"\u003e#29906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32190\"\u003e#32190\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32424\"\u003e#32424\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eUpdated JavaScript dependencies including \u003ccode\u003ejs-yaml\u003c/code\u003e, \u003ccode\u003ejoi\u003c/code\u003e, \u003ccode\u003efast-uri\u003c/code\u003e, and the Next.js end-to-end fixture (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32397\"\u003e#32397\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32486\"\u003e#32486\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32488\"\u003e#32488\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32505\"\u003e#32505\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32508\"\u003e#32508\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePinned GitHub Actions to full-length commit SHAs and strengthened packaging infrastructure with authenticated package feeds and NPM network isolation (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32176\"\u003e#32176\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32005\"\u003e#32005\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32440\"\u003e#32440\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Features\u003c/h2\u003e\n\u003ch3\u003eCore APIs \u0026amp; Runtime\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Go bindings for the ONNX Runtime C API (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29615\"\u003e#29615\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eExtended memory importing with host-pointer support and added access to preallocated outputs through \u003ccode\u003eKernelContext::GetPreallocatedOutput\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/29726\"\u003e#29726\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32089\"\u003e#32089\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded packed-attention workspace recipes and estimates, and made workspace input-shape handling aware of optional inputs (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32283\"\u003e#32283\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32321\"\u003e#32321\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32312\"\u003e#32312\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded DeepSeek Engram contrib operators, \u003ccode\u003eEngramGate\u003c/code\u003e and \u003ccode\u003eNGramHashMapping\u003c/code\u003e, and expanded kernel coverage for Qwen-3.5 operators (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32268\"\u003e#32268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/32106\"\u003e#32106\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/f2c39fe2f838cf35ce7da92824f5a5e3ee6e88a7\"\u003e\u003ccode\u003ef2c39fe\u003c/code\u003e\u003c/a\u003e [CUDA] Add INT4 paged KV cache with per-channel scales (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32515\"\u003e#32515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/5894ba8a53526b3aeb702bd86e6b117c9df8fa4f\"\u003e\u003ccode\u003e5894ba8\u003c/code\u003e\u003c/a\u003e Add portable random-access file reads to Env (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32503\"\u003e#32503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/a2ee3eb43052de307003e6256fc9258ce19d9c34\"\u003e\u003ccode\u003ea2ee3eb\u003c/code\u003e\u003c/a\u003e Fix CUDA plugin device discovery on WSL (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32517\"\u003e#32517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/b652e595b04d202b7f71af1d9105a183fac2b100\"\u003e\u003ccode\u003eb652e59\u003c/code\u003e\u003c/a\u003e [WebGPU] Prepack Conv weights for the im2col-matmul path (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32420\"\u003e#32420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/0f0f29f5015f16926912ae47061e6a3eedcfbe04\"\u003e\u003ccode\u003e0f0f29f\u003c/code\u003e\u003c/a\u003e Get rid of spurious warning about not being able to find spectre mitigation (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/23dd6510fd395b4556f474c1c0079be2a8b7a8c8\"\u003e\u003ccode\u003e23dd651\u003c/code\u003e\u003c/a\u003e Register ONNX schemas only when static registration is disabled (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32353\"\u003e#32353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/33af5d32801b2e631ebece4f382f4ba775f17d8c\"\u003e\u003ccode\u003e33af5d3\u003c/code\u003e\u003c/a\u003e Release external data loaders after graph initialization (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32502\"\u003e#32502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/2e3c24d5963d62d0bd7c9d306433b19b7304d5d2\"\u003e\u003ccode\u003e2e3c24d\u003c/code\u003e\u003c/a\u003e Clarify external initializer and EP context path interaction (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32442\"\u003e#32442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/e76036b8e49515ee7dd2dd0ac39c9d8b7533d38a\"\u003e\u003ccode\u003ee76036b\u003c/code\u003e\u003c/a\u003e [CUDA] Pin FP8 GEMV residency for grids just past two blocks per SM (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32433\"\u003e#32433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/82583c5b6398a9c37815f91e9cd1d7c165a132a7\"\u003e\u003ccode\u003e82583c5\u003c/code\u003e\u003c/a\u003e Add session option for a BNHS GroupQueryAttention Value cache layout (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/32139\"\u003e#32139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/onnxruntime/compare/v1.29.0...v1.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 3.3.1 to 3.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.14.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.14.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.13.0...v3.14.0\"\u003e3.14.0\u003c/a\u003e (2026-09-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e normalize errors raised while reading streams (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3827\"\u003e#3827\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d7c41efee1b0802b79f3f88a678ef2052b06e9ce\"\u003ed7c41ef\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebound vector store file polling (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3401\"\u003e#3401\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ae41bc46cdd53d17e948ac8a73e16bdbf34123a1\"\u003eae41bc4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexample:\u003c/strong\u003e refresh realtime push_to_talk_app session types (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2926\"\u003e#2926\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/0b7ad38292ef862f1dd07f71543b2f60eade8999\"\u003e0b7ad38\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efiles:\u003c/strong\u003e normalize PathLike upload tuples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3475\"\u003e#3475\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/90ac74ccfe7a966787d1f204755d4cd4cc4d406a\"\u003e90ac74c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einclude completion in content filter errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3094\"\u003e#3094\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e57a1b19fbcc32306a691e63334fd2dc4b1a804c\"\u003ee57a1b1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.14.0...v3.14.1\"\u003e3.14.1\u003c/a\u003e (2026-09-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003ef86c721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecorrect typo \u0026quot;th\u0026quot; to \u0026quot;the\u0026quot; in StreamAlreadyConsumed error message (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3022\"\u003e#3022\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/718620397c38a546d2cbbc964983c286db7abf97\"\u003e7186203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e correct Azure endpoint hostname (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3298\"\u003e#3298\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/543516c4223372a7fb830d560f26d8e6ad081d02\"\u003e543516c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e54f460e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003ed241ed6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e use uv in remaining Python launchers (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3821\"\u003e#3821\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8c76c4f5e6ee65c6393e80494d2bbbdc8607e983\"\u003e8c76c4f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elog only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003eccc10f5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresponses:\u003c/strong\u003e skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e6520df1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexamples:\u003c/strong\u003e bump module_client.py to gpt-5.6 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3211\"\u003e#3211\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/1493321affb1814fba7b669892e376a119d8d36f\"\u003e1493321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e9640f29\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003ea3d83b5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify filenames for in-memory file uploads (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3729\"\u003e#3729\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/cb27380d95f5e6995ea56dc588914454629cce0f\"\u003ecb27380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e correct retry jitter comment (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2252\"\u003e#2252\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/bdbbc16a3f289601cb7cbcec9e64c94e95753e94\"\u003ebdbbc16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e8cb9ded\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix reusing wording in Azure client docstrings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3061\"\u003e#3061\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/dc625f9533cb43e74aea53529c86d4848eed82ec\"\u003edc625f9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix streaming comment typo (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3005\"\u003e#3005\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09\"\u003ed421d7a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix vector store polling helper paths (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3101\"\u003e#3101\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2ef2de6bf1603b2df8cb28bcc604c79c6e7f773d\"\u003e2ef2de6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e correct SSE terminology (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2837\"\u003e#2837\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/caaa9b45a24c7698244824cda2c2d9ae16359354\"\u003ecaaa9b4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate Responses API reference link (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3279\"\u003e#3279\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/557bd06bce467e7f748b9c86bdde6427e85d28c7\"\u003e557bd06\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eutils:\u003c/strong\u003e correct query component RFC reference (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3300\"\u003e#3300\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/929a8a500a0e95df090ef53fe38890eba1e97660\"\u003e929a8a5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/openai/openai-python/compare/v3.13.0...v3.14.0\"\u003e3.14.0\u003c/a\u003e (2026-09-14)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003estreaming:\u003c/strong\u003e normalize errors raised while reading streams (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3827\"\u003e#3827\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d7c41efee1b0802b79f3f88a678ef2052b06e9ce\"\u003ed7c41ef\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebound vector store file polling (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3401\"\u003e#3401\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/ae41bc46cdd53d17e948ac8a73e16bdbf34123a1\"\u003eae41bc4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexample:\u003c/strong\u003e refresh realtime push_to_talk_app session types (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2926\"\u003e#2926\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/0b7ad38292ef862f1dd07f71543b2f60eade8999\"\u003e0b7ad38\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efiles:\u003c/strong\u003e normalize PathLike upload tuples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3475\"\u003e#3475\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/90ac74ccfe7a966787d1f204755d4cd4cc4d406a\"\u003e90ac74c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003einclude completion in content filter errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3094\"\u003e#3094\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/e57a1b19fbcc32306a691e63334fd2dc4b1a804c\"\u003ee57a1b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elogging:\u003c/strong\u003e support standard OPENAI_LOG levels (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3734\"\u003e#3734\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/44000e0fc5e11692663045d6183568ff3ec32736\"\u003e44000e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enormalize API error codes to strings (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3532\"\u003e#3532\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/233d9557be3e7ee186b5ac3f1ab634a257134ac1\"\u003e233d955\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3531\"\u003e#3531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/5bae14cb22724ef0a9db0d3a7fb7556d28b3fee3\"\u003e\u003ccode\u003e5bae14c\u003c/code\u003e\u003c/a\u003e release: 3.14.1 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3856\"\u003e#3856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f86c7214093038faa512bd4883558b093bdb8c9a\"\u003e\u003ccode\u003ef86c721\u003c/code\u003e\u003c/a\u003e fix(client): validate retry limits and preserve application errors (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3867\"\u003e#3867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/6520df1220a0030c7b45b00a6fa4bf2e9c7396ac\"\u003e\u003ccode\u003e6520df1\u003c/code\u003e\u003c/a\u003e fix(responses): skip structured parsing for commentary (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3861\"\u003e#3861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b3c04f4e701e07726f320295a38928421946e530\"\u003e\u003ccode\u003eb3c04f4\u003c/code\u003e\u003c/a\u003e fix(azure): preserve deployment routing across copy/with_options (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3593\"\u003e#3593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ccc10f595ff606cf007459aecae6ddc90d02794a\"\u003e\u003ccode\u003eccc10f5\u003c/code\u003e\u003c/a\u003e fix: log only metadata for Live WebSocket diagnostics (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3865\"\u003e#3865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/9640f2903d65c43f0e5aee58d60f46880ff0bd15\"\u003e\u003ccode\u003e9640f29\u003c/code\u003e\u003c/a\u003e chore: remove unused fine-tuning data validators (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3863\"\u003e#3863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/8cb9dedabd03297816749fcadfa12ef3ebcd3ed8\"\u003e\u003ccode\u003e8cb9ded\u003c/code\u003e\u003c/a\u003e docs: fix Realtime docstring wording (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3535\"\u003e#3535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a3d83b5af23e4057453aae83dcdb4e3cced1cdad\"\u003e\u003ccode\u003ea3d83b5\u003c/code\u003e\u003c/a\u003e docs: clarify async client cleanup (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2388\"\u003e#2388\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/54f460ef8c212a7849d10cef69853dffb48c4491\"\u003e\u003ccode\u003e54f460e\u003c/code\u003e\u003c/a\u003e fix(examples): refresh chat streaming examples (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d241ed65c122a964679ca9d102924761956aa71f\"\u003e\u003ccode\u003ed241ed6\u003c/code\u003e\u003c/a\u003e fix(examples): split push-to-talk shebang arguments (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3210\"\u003e#3210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v3.3.1...v3.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `piper-tts` from 1.4.2 to 1.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/OHF-voice/piper1-gpl/releases\"\u003epiper-tts's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Thai phonemizer using TLTK in the new \u003ccode\u003eth\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type thai\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;thai\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng's Thai voice is a placeholder: its \u003ccode\u003eth_dict\u003c/code\u003e holds no lexicon, so unspaced Thai is never segmented; the leading vowels เ แ โ ใ ไ are not reordered; and a tone mark deletes the syllable's vowel, collapsing ป่า/ป้า/ป๊า/ป๋า to the same phonemes\u003c/li\u003e\n\u003cli\u003eTLTK does dictionary-based word segmentation and emits a tone digit (1-5) per syllable, in the same style \u003ccode\u003ephonemize_chinese\u003c/code\u003e uses for Mandarin tones\u003c/li\u003e\n\u003cli\u003eThe whole inventory already has ids in the default IPA map, so Thai voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --th\u003c/code\u003e, and install the \u003ccode\u003eth\u003c/code\u003e extra in CI so the Thai tests run\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Japanese phonemizer using OpenJTalk (\u003ccode\u003epyopenjtalk-plus\u003c/code\u003e) in the new \u003ccode\u003eja\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type japanese\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;japanese\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng has no kanji coverage (it reads out Unicode character names) and no pitch accent\u003c/li\u003e\n\u003cli\u003eFull-context labels are parsed for pitch accent and mapped to IPA, so Japanese voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --ja\u003c/code\u003e, and install the \u003ccode\u003eja\u003c/code\u003e extra in CI so the Japanese tests run\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elibpiper\u003c/code\u003e: add \u003ccode\u003epiper_create_options\u003c/code\u003e and \u003ccode\u003epiper_create_with_options()\u003c/code\u003e, with \u003ccode\u003epiper_create()\u003c/code\u003e kept as a wrapper for ABI compatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRun the g2pW model through \u003ccode\u003epiper.g2pw_onnx\u003c/code\u003e instead of \u003ccode\u003eg2pw.api\u003c/code\u003e, dropping \u003ccode\u003etorch\u003c/code\u003e (~750 MB installed) and \u003ccode\u003erequests\u003c/code\u003e from the \u003ccode\u003ezh\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eg2pw.api\u003c/code\u003e imports torch only to build padded tensors and iterate batches; the model itself already ran under onnxruntime\u003c/li\u003e\n\u003cli\u003eAlso 1.5-2x faster, since it no longer forks DataLoader worker processes on every call\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eg2pW\u003c/code\u003e is still required, for its pinyin/bopomofo lookup tables\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hebrew phonemizer using Nakdimon\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003elibpiper\u003c/code\u003e C++ CLI executable ported from the legacy Piper repository, plus a C++ test suite\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elibpiper\u003c/code\u003e builds on Windows (MSVC, MSYS2-GCC) and Windows CI\u003c/li\u003e\n\u003cli\u003eBump embedded espeak-ng version\u003c/li\u003e\n\u003cli\u003eAdd default speaker id for multi-speaker voices\u003c/li\u003e\n\u003cli\u003eAdd vowel clustering support (\u003ccode\u003e--data.vowel_clusters\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd in-memory patching for alignments\u003c/li\u003e\n\u003cli\u003eTraining: add MRD (Multi-Resolution STFT) discriminator, loss/MOS tracking with UTMOS, silence-trim fixes, and dataloader performance improvements\u003c/li\u003e\n\u003cli\u003ePass custom phoneme id map when training\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/blob/main/CHANGELOG.md\"\u003epiper-tts's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Thai phonemizer using TLTK in the new \u003ccode\u003eth\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type thai\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;thai\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng's Thai voice is a placeholder: its \u003ccode\u003eth_dict\u003c/code\u003e holds no lexicon, so unspaced Thai is never segmented; the leading vowels เ แ โ ใ ไ are not reordered; and a tone mark deletes the syllable's vowel, collapsing ป่า/ป้า/ป๊า/ป๋า to the same phonemes\u003c/li\u003e\n\u003cli\u003eTLTK does dictionary-based word segmentation and emits a tone digit (1-5) per syllable, in the same style \u003ccode\u003ephonemize_chinese\u003c/code\u003e uses for Mandarin tones\u003c/li\u003e\n\u003cli\u003eThe whole inventory already has ids in the default IPA map, so Thai voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --th\u003c/code\u003e, and install the \u003ccode\u003eth\u003c/code\u003e extra in CI so the Thai tests run\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Japanese phonemizer using OpenJTalk (\u003ccode\u003epyopenjtalk-plus\u003c/code\u003e) in the new \u003ccode\u003eja\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--data.phoneme_type japanese\u003c/code\u003e for training; \u003ccode\u003e\u0026quot;phoneme_type\u0026quot;: \u0026quot;japanese\u0026quot;\u003c/code\u003e in a voice config for synthesis\u003c/li\u003e\n\u003cli\u003eespeak-ng has no kanji coverage (it reads out Unicode character names) and no pitch accent\u003c/li\u003e\n\u003cli\u003eFull-context labels are parsed for pitch accent and mapped to IPA, so Japanese voices stay compatible with the IPA-based (espeak) warmstart\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003escript/setup --ja\u003c/code\u003e, and install the \u003ccode\u003eja\u003c/code\u003e extra in CI so the Japanese tests run\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elibpiper\u003c/code\u003e: add \u003ccode\u003epiper_create_options\u003c/code\u003e and \u003ccode\u003epiper_create_with_options()\u003c/code\u003e, with \u003ccode\u003epiper_create()\u003c/code\u003e kept as a wrapper for ABI compatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRun the g2pW model through \u003ccode\u003epiper.g2pw_onnx\u003c/code\u003e instead of \u003ccode\u003eg2pw.api\u003c/code\u003e, dropping \u003ccode\u003etorch\u003c/code\u003e (~750 MB installed) and \u003ccode\u003erequests\u003c/code\u003e from the \u003ccode\u003ezh\u003c/code\u003e extra\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eg2pw.api\u003c/code\u003e imports torch only to build padded tensors and iterate batches; the model itself already ran under onnxruntime\u003c/li\u003e\n\u003cli\u003eAlso 1.5-2x faster, since it no longer forks DataLoader worker processes on every call\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eg2pW\u003c/code\u003e is still required, for its pinyin/bopomofo lookup tables\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hebrew phonemizer using Nakdimon\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003elibpiper\u003c/code\u003e C++ CLI executable ported from the legacy Piper repository, plus a C++ test suite\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elibpiper\u003c/code\u003e builds on Windows (MSVC, MSYS2-GCC) and Windows CI\u003c/li\u003e\n\u003cli\u003eBump embedded espeak-ng version\u003c/li\u003e\n\u003cli\u003eAdd default speaker id for multi-speaker voices\u003c/li\u003e\n\u003cli\u003eAdd vowel clustering support (\u003ccode\u003e--data.vowel_clusters\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd in-memory patching for alignments\u003c/li\u003e\n\u003cli\u003eTraining: add MRD (Multi-Resolution STFT) discriminator, loss/MOS tracking with UTMOS, silence-trim fixes, and dataloader performance improvements\u003c/li\u003e\n\u003cli\u003ePass custom phoneme id map when training\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/639388b6317fc4731e91d53da42aea68fd4166ff\"\u003e\u003ccode\u003e639388b\u003c/code\u003e\u003c/a\u003e Bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/46d794711decab265e7f04c8a9a2f03f5d40b244\"\u003e\u003ccode\u003e46d7947\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/OHF-voice/piper1-gpl/issues/293\"\u003e#293\u003c/a\u003e from OHF-Voice/claude/thai-piper-training-feasibility...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/9336d103bd2aa8f94d21c8b14c3e0d7727da292c\"\u003e\u003ccode\u003e9336d10\u003c/code\u003e\u003c/a\u003e Fix Thai test collection aborting CI on a broken optional dependency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/fb14e09b49725af3cd806d2aba6c9f33501546ce\"\u003e\u003ccode\u003efb14e09\u003c/code\u003e\u003c/a\u003e Add Thai phonemizer (TLTK segmentation + G2P -\u0026gt; IPA + tone digits)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/850c45a3d70b5981de4d908ba98caf39796e7201\"\u003e\u003ccode\u003e850c45a\u003c/code\u003e\u003c/a\u003e fix: Phase 1 relaxed poly fallback for mobile (\u003ca href=\"https://redirect.github.com/OHF-voice/piper1-gpl/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/b2758261878e4d832acb208e33915df8954ae2d4\"\u003e\u003ccode\u003eb275826\u003c/code\u003e\u003c/a\u003e Add Chinese pinyin support – Phase 1 (monophonic dict fallback, honest scopin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/7b8e8f7197a480047677715f00d3d78903b55a2a\"\u003e\u003ccode\u003e7b8e8f7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/OHF-voice/piper1-gpl/issues/275\"\u003e#275\u003c/a\u003e from OHF-Voice/claude/version-1-7-0-release-2b37ec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/222159fb3a25672b1a1a6c8f4d5f9351ed68ad3d\"\u003e\u003ccode\u003e222159f\u003c/code\u003e\u003c/a\u003e Silence pylint redefined-outer-name in the phonemizer tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/af4ff76238e6aee94f95555fbff87c001ecf94bc\"\u003e\u003ccode\u003eaf4ff76\u003c/code\u003e\u003c/a\u003e Make the mypy exclude for vendored VITS code actually work\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OHF-Voice/piper1-gpl/commit/c0f3289b64e2eb704ac115af61cac90228e2f7d2\"\u003e\u003ccode\u003ec0f3289\u003c/code\u003e\u003c/a\u003e Release 1.7.0: add --ja setup flag and test Japanese in CI\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/OHF-voice/piper1-gpl/compare/v1.4.2...v1.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `playwright` from 1.55.0 to 1.63.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/playwright-python/releases\"\u003eplaywright's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.63.0\u003c/h2\u003e\n\u003ch2\u003e🪟 Locate across frames\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://playwright.dev/python/docs/api/class-page#page-frame-locator\"\u003epage.frame_locator()\u003c/a\u003e and \u003ca href=\"https://playwright.dev/python/docs/api/class-frame#frame-frame-locator\"\u003eframe.frame_locator()\u003c/a\u003e called without a selector search in any frame of the\nsubtree, so you no longer need to locate the iframe first:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e# Finds the button in any frame on the page.\r\npage.frame_locator().get_by_role(\u0026quot;button\u0026quot;).click()\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe rest of the locator resolves inside a single frame, just like a regular locator, and an error is thrown when it\nmatches elements in several frames.\u003c/p\u003e\n\u003ch2\u003e👁️ Visible-only locators\u003c/h2\u003e\n\u003cp\u003eNew \u003ca href=\"https://playwright.dev/python/docs/api/class-locator#locator-visible\"\u003elocator.visible\u003c/a\u003e returns a locator that matches only visible elements. It is the recommended\nreplacement for the \u003ccode\u003e:visible\u003c/code\u003e CSS pseudo-class:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003epage.locator(\u0026quot;button\u0026quot;).visible.click()\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003e🖼️ Aria and screen snapshots in traces\u003c/h2\u003e\n\u003cp\u003eNew \u003ca href=\"https://playwright.dev/python/docs/api/class-tracing#tracing-start-option-aria-snapshots\"\u003e\u003ccode\u003earia_snapshots\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://playwright.dev/python/docs/api/class-tracing#tracing-start-option-screen-snapshots\"\u003e\u003ccode\u003escreen_snapshots\u003c/code\u003e\u003c/a\u003e options of\n\u003ca href=\"https://playwright.dev/python/docs/api/class-tracing#tracing-start\"\u003etracing.start()\u003c/a\u003e capture an aria snapshot and a screenshot of the page on every action:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003econtext.tracing.start(snapshots=True, aria_snapshots=True, screen_snapshots=True)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eWith aria and screen snapshots recorded, the new \u003cstrong\u003eDisplay Aria\u003c/strong\u003e mode in the trace viewer shows the action screenshot\nside by side with the aria snapshot, and hovering an aria node highlights it on the screenshot.\u003c/p\u003e\n\u003ch2\u003eNew APIs\u003c/h2\u003e\n\u003ch3\u003eBrowser and Context\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://playwright.dev/python/docs/api/class-browser#browser-new-context-option-http-credentials\"\u003e\u003ccode\u003ehttp_credentials\u003c/code\u003e\u003c/a\u003e now also accepts an array of credentials. The first entry matching the request origin is used, and entries without an origin match any request.\u003c/li\u003e\n\u003cli\u003eNew option \u003ca href=\"https://playwright.dev/python/docs/api/class-browsercontext#browser-context-storage-state-option-opfs\"\u003e\u003ccode\u003eopfs\u003c/code\u003e\u003c/a\u003e includes the \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system\"\u003eorigin private file system\u003c/a\u003e in the storage state, so it can be persisted and restored into later contexts.\u003c/li\u003e\n\u003cli\u003eNew events \u003ca href=\"https://playwright.dev/python/docs/api/class-page#page-event-dialog-closed\"\u003epage.on('dialogclosed')\u003c/a\u003e and \u003ca href=\"https://playwright.dev/python/docs/api/class-browsercontext#browser-context-event-dialog-closed\"\u003ebrowserContext.on('dialogclosed')\u003c/a\u003e are emitted when a JavaScript dialog is accepted, dismissed or closed by the user.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCommand line\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eplaywright install --no-remove\u003c/code\u003e keeps the browsers of other Playwright installations instead of removing them.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eplaywright codegen --http-credentials\u003c/code\u003e records against pages behind HTTP authentication.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAnnouncements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e⚠️ Ubuntu 20.04 is not supported anymore.\u003c/li\u003e\n\u003cli\u003e🐧 On Linux arm64, Playwright now downloads the \u003ca href=\"https://developer.chrome.com/blog/chrome-for-testing\"\u003eChrome for Testing\u003c/a\u003e build of Chromium, the same build used on all other platforms.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/8cb967b3e4199bef5ce38e1cf34df1bf79cb8a8d\"\u003e\u003ccode\u003e8cb967b\u003c/code\u003e\u003c/a\u003e cherry-pick(\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3200\"\u003e#3200\u003c/a\u003e): devops(docker): move docker publishing to Azure Pipelines\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/ab18c77c56f64b47e871bf4d8b08fd0675559377\"\u003e\u003ccode\u003eab18c77\u003c/code\u003e\u003c/a\u003e chore: roll Playwright to 1.63.0 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3198\"\u003e#3198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/0e66a0927e5431b0f659ff41b6544de96b0486f5\"\u003e\u003ccode\u003e0e66a09\u003c/code\u003e\u003c/a\u003e devops(pipeline): resolve pip and npm packages from DevDiv_PublicPackages fee...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/010a9cc73f8a90bc2d7b9e34591c4e2c4a4ea566\"\u003e\u003ccode\u003e010a9cc\u003c/code\u003e\u003c/a\u003e Pin GitHub Actions to full-length commit SHAs (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3176\"\u003e#3176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/154f67ced51ada646b0fcf8574897d96c9712aa3\"\u003e\u003ccode\u003e154f67c\u003c/code\u003e\u003c/a\u003e fix(sync): wait for initialize before leaving \u003cstrong\u003eenter\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3168\"\u003e#3168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/4af2fc65fb05eb04904b69b6206e9d07ca2b4cbc\"\u003e\u003ccode\u003e4af2fc6\u003c/code\u003e\u003c/a\u003e chore: roll Playwright to 1.62.1 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3169\"\u003e#3169\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/4d2e058f43f05448ad29b19e82919be5b86e8349\"\u003e\u003ccode\u003e4d2e058\u003c/code\u003e\u003c/a\u003e fix(connection): register protocol callback only after successful send (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3167\"\u003e#3167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/eab2bca195df8709bd32fc11129c268cf8963cd2\"\u003e\u003ccode\u003eeab2bca\u003c/code\u003e\u003c/a\u003e chore(deps): remove unused development dependencies (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3164\"\u003e#3164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/3b7c24c3e67dc84f7b0eddd0c5fd2ca685705021\"\u003e\u003ccode\u003e3b7c24c\u003c/code\u003e\u003c/a\u003e chore: roll Playwright to 1.62.0 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3161\"\u003e#3161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/playwright-python/commit/1db079f769ff42c60b7bde3498fb98f638131534\"\u003e\u003ccode\u003e1db079f\u003c/code\u003e\u003c/a\u003e build(deps): bump typing-extensions from 4.15.0 to 4.16.0 (\u003ca href=\"https://redirect.github.com/microsoft/playwright-python/issues/3162\"\u003e#3162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/playwright-python/compare/v1.55.0...v1.63.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `scipy` from 1.18.0 to 1.18.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/scipy/scipy/releases\"\u003escipy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eSciPy 1.18.1 Release Notes\u003c/h1\u003e\n\u003cp\u003eSciPy \u003ccode\u003e1.18.1\u003c/code\u003e is a bug-fix release with no new features\ncompared to \u003ccode\u003e1.18.0\u003c/code\u003e. This release includes binaries on\nPyPI for Python \u003ccode\u003e3.15\u003c/code\u003e, and the minimum required version\nof the GCC toolchain has been increased to \u003ccode\u003e10.3...\n\n_Description has been truncated_","html_url":"https://github.com/debpalash/friday/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/debpalash%2Ffriday/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-18T12:41:02.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5499672238","node_id":"PR_kwDOQgqbUs8AAAABEFKnmA","number":1014,"state":"open","title":"chore(deps): bump the python-minor-patch group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-18T12:41:02.000Z","updated_at":"2026-09-18T12:41:44.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":12,"packages":[{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"httpx2","old_version":"2.9.1","new_version":"2.13.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"msgpack","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"orjson","old_version":"3.11.9","new_version":"3.12.0","repository_url":"https://github.com/ijl/orjson"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.2","new_version":"2.15.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.69.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.51","new_version":"2.0.53","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"uvicorn","old_version":"0.52.1","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.9.1` | `2.13.0` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.1` | `1.2.2` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.9` | `3.12.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.2` | `2.15.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.69.1` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.51` | `2.0.53` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.1` | `0.53.0` |\n\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx2` from 2.9.1 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/releases\"\u003ehttpx2's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🔐 Reliable TLS verification controls\u003c/h3\u003e\n\u003cp\u003eThe CLI \u003ccode\u003e--no-verify\u003c/code\u003e flag now disables TLS certificate verification as intended, and \u003ccode\u003e--verify\u003c/code\u003e provides an explicit counterpart (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003epydantic/httpx2#1140\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003epydantic/httpx2#1186\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e🧹 Safer async stream cleanup\u003c/h3\u003e\n\u003cp\u003eStopping a streamed response early no longer risks a nested async generator finalization error (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003epydantic/httpx2#1179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake the \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag disable TLS certificate verification and add an explicit \u003ccode\u003e--verify\u003c/code\u003e counterpart in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003epydantic/httpx2#1140\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003epydantic/httpx2#1186\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ehttpcore2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Trio 0.34.0 or later for the \u003ccode\u003etrio\u003c/code\u003e extra in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003epydantic/httpx2#1179\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003epydantic/httpx2#1204\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.12.0...v2.13.0\"\u003ehttps://github.com/pydantic/httpx2/compare/v2.12.0...v2.13.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.12.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003e🛡️ Bounded response decompression\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ehttpx2\u003c/code\u003e now decodes \u003ccode\u003egzip\u003c/code\u003e, \u003ccode\u003edeflate\u003c/code\u003e, Brotli, and Zstandard responses incrementally. Each decode step emits at most 1 MiB, so streaming a highly compressed response no longer requires materializing an entire inflated network chunk in memory (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1126\"\u003epydantic/httpx2#1126\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003e📦 Shared Zstandard API\u003c/h3\u003e\n\u003cp\u003ePython 3.13 and earlier now use \u003ccode\u003ebackports.zstd\u003c/code\u003e, which provides the same bounded incremental decompression API as \u003ccode\u003ecompression.zstd\u003c/code\u003e on Python 3.14 and later (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1146\"\u003epydantic/httpx2#1146\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003ehttpx2\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebackports.zstd\u003c/code\u003e for Zstandard decoding on Python 3.13 and earlier by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1146\"\u003epydantic/httpx2#1146\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/httpx2/blob/main/src/httpx2/CHANGELOG.md\"\u003ehttpx2's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0 (September 14th, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ebrotlicffi\u003c/code\u003e 1.2.0.2 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra on non-CPython implementations.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake the \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag disable TLS certificate verification and add an explicit \u003ccode\u003e--verify\u003c/code\u003e counterpart.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1140\"\u003e#1140\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid nested async generator finalization errors when streamed responses are abandoned early.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1204\"\u003e#1204\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.12.0 (August 18th, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebackports.zstd\u003c/code\u003e for Zstandard decoding on Python 3.13 and earlier.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBound peak memory while streaming compressed responses and close response streams when decoding fails.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.11.0 (August 18th, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the public \u003ccode\u003eOrigin\u003c/code\u003e value object and \u003ccode\u003eURL.origin\u003c/code\u003e property for normalized,\nhashable origin comparisons. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1134\"\u003e#1134\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Brotli 1.2.0 or later for the \u003ccode\u003ebrotli\u003c/code\u003e extra. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1141\"\u003e#1141\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestore deprecated status code aliases. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1135\"\u003e#1135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExtract HTTP/2 release notes from changelog headings correctly. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1136\"\u003e#1136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect explicit \u003ccode\u003eTransfer-Encoding\u003c/code\u003e headers and expose buffered request body lengths to WSGI applications.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1137\"\u003e#1137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate multipart part header names and values before serialization.\n(\u003ca href=\"https://redirect.github.com/pydantic/httpx2/pull/1142\"\u003e#1142\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.10.0 (August 9th, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f2951854442e78cb8f6d2256b7c1d83bd2b77d0b\"\u003e\u003ccode\u003ef295185\u003c/code\u003e\u003c/a\u003e Prepare version 2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/8f215b5c9768ba8152c7aaf52fd85efb80ea992b\"\u003e\u003ccode\u003e8f215b5\u003c/code\u003e\u003c/a\u003e Use portable links in API docstrings (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1202\"\u003e#1202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/36d636a002a42f961d1da4233546fe2f2c83c9c1\"\u003e\u003ccode\u003e36d636a\u003c/code\u003e\u003c/a\u003e Group \u003ccode\u003ehttpx2.__all__\u003c/code\u003e exports by source module (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1188\"\u003e#1188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/f1064aaf67dab1598bb817fa0bff871f5bb2d7fa\"\u003e\u003ccode\u003ef1064aa\u003c/code\u003e\u003c/a\u003e Bump the python-packages group across 1 directory with 11 updates (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1179\"\u003e#1179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/bc27137977442cbfecb357046fd90f38c7f13108\"\u003e\u003ccode\u003ebc27137\u003c/code\u003e\u003c/a\u003e Update uv-dynamic-versioning requirement from \u0026gt;=0.14.0 to \u0026gt;=0.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/62e08275346151351af60632a2258dea47218b6c\"\u003e\u003ccode\u003e62e0827\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003e--no-verify\u003c/code\u003e CLI flag (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/c9b1d33ae220d8a7c50a0e4996cde1013081b198\"\u003e\u003ccode\u003ec9b1d33\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003e--no-verify\u003c/code\u003e flag with \u003ccode\u003e--verify\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1140\"\u003e#1140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/e3a87b1582c604b5aaf1d0f20b5def1ff9ece220\"\u003e\u003ccode\u003ee3a87b1\u003c/code\u003e\u003c/a\u003e Convert \u003ccode\u003eTimeout\u003c/code\u003e and \u003ccode\u003eLimits\u003c/code\u003e to dataclasses (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1167\"\u003e#1167\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/4c02c4beda777933ab7eb36836a66ca11d73dc03\"\u003e\u003ccode\u003e4c02c4b\u003c/code\u003e\u003c/a\u003e Fixed a grammatical mistake. (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1154\"\u003e#1154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/httpx2/commit/71ae23be5448f859c2b4e21d9972ddfa7b8d759d\"\u003e\u003ccode\u003e71ae23b\u003c/code\u003e\u003c/a\u003e Version 2.12.0 (\u003ca href=\"https://redirect.github.com/pydantic/httpx2/issues/1147\"\u003e#1147\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/httpx2/compare/v2.9.1...v2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix docstring for read_size by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/700\"\u003emsgpack/msgpack-python#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eunpacker: fix silent datetime truncation with datetime=3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/701\"\u003emsgpack/msgpack-python#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erun test with debug build by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/702\"\u003emsgpack/msgpack-python#702\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: add reentrant guard to Unpacker.feed() by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/704\"\u003emsgpack/msgpack-python#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 6.0.3 to 7.0.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/705\"\u003emsgpack/msgpack-python#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/707\"\u003emsgpack/msgpack-python#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_unpack.py: add tests for ExtraData by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/708\"\u003emsgpack/msgpack-python#708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/709\"\u003emsgpack/msgpack-python#709\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime() precision for far-future datetimes by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in test and docs by \u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/719\"\u003emsgpack/msgpack-python#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in unpackb() ExtraData path for non-contiguous input by \u003ca href=\"https://github.com/ThomasWaldmann\"\u003e\u003ccode\u003e@​ThomasWaldmann\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/722\"\u003emsgpack/msgpack-python#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/721\"\u003emsgpack/msgpack-python#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 4.1.1 to 4.2.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/724\"\u003emsgpack/msgpack-python#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert Packer's buf_size once by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: translate RecursionError to StackError in fallback Unpacker.skip() by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/727\"\u003emsgpack/msgpack-python#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate nanoseconds range when unpacking timestamps in the C extension by \u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid parallel execution of the recursion-limit nesting test on free-threaded builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/729\"\u003emsgpack/msgpack-python#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise OverflowError when use_single_float cannot represent a value by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.2 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/730\"\u003emsgpack/msgpack-python#730\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.2\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-08-27\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix the \u003ccode\u003eread_size\u003c/code\u003e documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silent truncation when unpacking an out-of-range timestamp with \u003ccode\u003etimestamp=3\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/701\"\u003e#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent reentrant calls to \u003ccode\u003eUnpacker.feed()\u003c/code\u003e while unpacking. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/704\"\u003e#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/707\"\u003e#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e precision for far-future datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/710\"\u003e#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in the documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/712\"\u003e#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate the nanoseconds range when unpacking timestamps in the C extension. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a use-after-free in the \u003ccode\u003eunpackb()\u003c/code\u003e \u003ccode\u003eExtraData\u003c/code\u003e path for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/722\"\u003e#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent a buffer overflow when converting \u003ccode\u003ePacker\u003c/code\u003e's \u003ccode\u003ebuf_size\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTranslate \u003ccode\u003eRecursionError\u003c/code\u003e to \u003ccode\u003eStackError\u003c/code\u003e in the fallback \u003ccode\u003eUnpacker.skip()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eOverflowError\u003c/code\u003e when \u003ccode\u003euse_single_float=True\u003c/code\u003e cannot represent a value. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/7381b318f51688f3f941df0b4c056d7a7a20c9d0\"\u003e\u003ccode\u003e7381b31\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ee1bd3c02d5494921653a0f7ffc264b8591de713\"\u003e\u003ccode\u003eee1bd3c\u003c/code\u003e\u003c/a\u003e release v1.2.2 (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/57d28a250c4904685f3a4f4135b301def517681e\"\u003e\u003ccode\u003e57d28a2\u003c/code\u003e\u003c/a\u003e Raise OverflowError when use_single_float cannot represent a value (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/d374a17e88f20c221760454e8829dc58ad5222a8\"\u003e\u003ccode\u003ed374a17\u003c/code\u003e\u003c/a\u003e Avoid parallel execution of the recursion-limit nesting test on free-threaded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/e94e1dc078547c58855c7cc60b6e54c44deb903d\"\u003e\u003ccode\u003ee94e1dc\u003c/code\u003e\u003c/a\u003e Validate nanoseconds range when unpacking timestamps in the C extension (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/2e4be090f6a42e1ad19526ca6f6ee67f3476389a\"\u003e\u003ccode\u003e2e4be09\u003c/code\u003e\u003c/a\u003e fix: translate RecursionError to StackError in fallback Unpacker.skip() (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/9f9bdae0773166e8ed50dfdd1ed13cc4296819ce\"\u003e\u003ccode\u003e9f9bdae\u003c/code\u003e\u003c/a\u003e Convert Packer's buf_size once (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/809bfcda6d7186fbb34f6ea1b984a61344ba55d2\"\u003e\u003ccode\u003e809bfcd\u003c/code\u003e\u003c/a\u003e remove unused variable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/186d4dbc126b659eff1509c850300e207d8aaad5\"\u003e\u003ccode\u003e186d4db\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 4.1.1 to 4.2.0(\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ea6b84f5ee6d97ae2089f1eb025034a6847d1ccb\"\u003e\u003ccode\u003eea6b84f\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencie...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.11.9 to 3.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/releases\"\u003eorjson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/blob/master/CHANGELOG.md\"\u003eorjson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.0 - 2026-08-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSerialization implementation substantially rewritten.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for Python 3.15. For Python 3.15 and later,\n\u003ccode\u003emanylinux_2_39\u003c/code\u003e (2024) is targeted instead of \u003ccode\u003emanylinux_2_17\u003c/code\u003e (2012).\u003c/li\u003e\n\u003cli\u003eNo longer publish PyPI wheels for ppc64le and s390x.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6737895a1a4e3e26df0569a40147893a786f9a58\"\u003e\u003ccode\u003e6737895\u003c/code\u003e\u003c/a\u003e 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/c2a6e8ff7b898635fb68a85bd5a62df1edf61cfc\"\u003e\u003ccode\u003ec2a6e8f\u003c/code\u003e\u003c/a\u003e JsonWriter, iterators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/6a2d7a7d66dc3c5698625a7b334c40db459e46ae\"\u003e\u003ccode\u003e6a2d7a7\u003c/code\u003e\u003c/a\u003e yyjson 1ea2fb0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/97bf170d9726e91c891f35eae4892801520b9dce\"\u003e\u003ccode\u003e97bf170\u003c/code\u003e\u003c/a\u003e build update\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/ijl/orjson/compare/3.11.9...3.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.12 to 2.9.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.13\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (:ticket:\u003ccode\u003e[#1848](https://github.com/psycopg/psycopg2/issues/1848)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed bytea input.\u003c/li\u003e\n\u003cli\u003eFix parsing of malformed int64 input in arrays (:ticket:\u003ccode\u003e[#1847](https://github.com/psycopg/psycopg2/issues/1847)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003epyproject.toml\u003c/code\u003e file to declare a PEP 517 build backend\n(:ticket:\u003ccode\u003e[#1788](https://github.com/psycopg/psycopg2/issues/1788)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f650e7afed0c94f596594e8328a0c7fa65a9d0e5\"\u003e\u003ccode\u003ef650e7a\u003c/code\u003e\u003c/a\u003e chore: bump to release 2.9.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/368c8a1ca6d80088703a693ce64b68ad7d346698\"\u003e\u003ccode\u003e368c8a1\u003c/code\u003e\u003c/a\u003e chore!: drop support for Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/9b39e65ab232f0a267a278cdaef1bd9975d88c65\"\u003e\u003ccode\u003e9b39e65\u003c/code\u003e\u003c/a\u003e chore: drop scaleway build support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/2ca70416be6d4d3d8170ec439876c0b3569af718\"\u003e\u003ccode\u003e2ca7041\u003c/code\u003e\u003c/a\u003e fix: fix handling of PostgreSQL 18 exceptions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/5385c027ef62ce14e57a7379e0375868507d6746\"\u003e\u003ccode\u003e5385c02\u003c/code\u003e\u003c/a\u003e Build CPython 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/1d32e1f6678ffa8ab8897ca81826bf4dde6354cd\"\u003e\u003ccode\u003e1d32e1f\u003c/code\u003e\u003c/a\u003e ci: only attempt triggering documentation refresh when pushing on main repo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/433e7b77a7b700fbb1cdc6e9dca6b5948d07fc23\"\u003e\u003ccode\u003e433e7b7\u003c/code\u003e\u003c/a\u003e chore: add pyproject.toml file to declare a PEP 517 build backend\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/8fb80bc3b2c358f4e3c54e33a37326d3f8b3ff6a\"\u003e\u003ccode\u003e8fb80bc\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed int64 input in arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f98014a46a1e34f024ebd6134d1d87b77490c500\"\u003e\u003ccode\u003ef98014a\u003c/code\u003e\u003c/a\u003e fix: fix parsing of malformed bytea input\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/822b79cfe12ca0a04482acd382cae669a16aa789\"\u003e\u003ccode\u003e822b79c\u003c/code\u003e\u003c/a\u003e chore: bump dependencies in binary package\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.12...2.9.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.4 to 2.13.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.5 (2026-08-28)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.5\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow reuse of validators when plugins are set by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13535\"\u003e#13535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal on some \u003ccode\u003epydantic-core\u003c/code\u003e struct fields by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13624\"\u003e#13624\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13629\"\u003e#13629\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCount validated model fields once in smart unions by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13731\"\u003e#13731\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46\"\u003e\u003ccode\u003e001dea0\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003epypa/gh-action-pypi-publish\u003c/code\u003e action to v1.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843\"\u003e\u003ccode\u003e558379f\u003c/code\u003e\u003c/a\u003e Bump twine to v7.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01\"\u003e\u003ccode\u003e2cfd5d3\u003c/code\u003e\u003c/a\u003e Do not check for docs build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac\"\u003e\u003ccode\u003ea735bee\u003c/code\u003e\u003c/a\u003e Fix more Clippy lints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64\"\u003e\u003ccode\u003e7eed4a1\u003c/code\u003e\u003c/a\u003e Fix Clippy 0.1.95 warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a\"\u003e\u003ccode\u003eb353bbb\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e\"\u003e\u003ccode\u003e63d2ccc\u003c/code\u003e\u003c/a\u003e Count validated model fields once in smart unions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4\"\u003e\u003ccode\u003ea53ec2e\u003c/code\u003e\u003c/a\u003e Speed up PyPy CI tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c\"\u003e\u003ccode\u003ed65e0f9\u003c/code\u003e\u003c/a\u003e Workaround circular import error in Mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72\"\u003e\u003ccode\u003e47a6dbf\u003c/code\u003e\u003c/a\u003e Fix missing GC traversal in \u003ccode\u003epydantic-core\u003c/code\u003e for \u003ccode\u003eGeneralFieldsSerializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.14.2 to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.15.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003ch3\u003eBehavior changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ecase_sensitive\u003c/code\u003e now applies to init kwargs and config-file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/900\"\u003e#900\u003c/a\u003e). \u003ccode\u003eInitSettingsSource\u003c/code\u003e and the JSON/TOML/YAML config sources previously ignored \u003ccode\u003ecase_sensitive\u003c/code\u003e. Since it defaults to \u003ccode\u003eFalse\u003c/code\u003e, \u003cstrong\u003ecase-insensitive matching is now the default\u003c/strong\u003e for these sources — e.g. \u003ccode\u003eSettings(TeSt=...)\u003c/code\u003e now populates a \u003ccode\u003etest\u003c/code\u003e field where it previously did not. Nested keys are still matched case-sensitively.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFields with unresolved forward references now emit a warning\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/901\"\u003e#901\u003c/a\u003e). Settings sources can silently fail to resolve such fields; they now raise \u003ccode\u003eIncompleteFieldDefinitionWarning\u003c/code\u003e telling you to call \u003ccode\u003emodel_rebuild()\u003c/code\u003e. If you have \u003ccode\u003efilterwarnings = error\u003c/code\u003e configured, this may surface as a new failure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNon-JSON env values for strict fields now raise \u003ccode\u003eValidationError\u003c/code\u003e\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/926\"\u003e#926\u003c/a\u003e) instead of a less specific error.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eShow environment variable names in CLI help\u003c/strong\u003e via \u003ccode\u003ecli_show_env_vars=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/860\"\u003e#860\u003c/a\u003e), so generated \u003ccode\u003e--help\u003c/code\u003e output doubles as configuration documentation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePYDANTIC_SETTINGS_DEBUG\u003c/code\u003e for debugging settings resolution\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/913\"\u003e#913\u003c/a\u003e). Set it to a truthy value with \u003ccode\u003eDEBUG\u003c/code\u003e logging enabled to see each source's contribution in priority order, which source won for each value, and which \u003ccode\u003eenv_file\u003c/code\u003e/secret files were probed, loaded, or skipped — the long-standing \u0026quot;why isn't my \u003ccode\u003e.env\u003c/code\u003e being picked up?\u0026quot; question.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003etoml_table_header\u003c/code\u003e for regular TOML files\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/882\"\u003e#882\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/887\"\u003e#887\u003c/a\u003e), letting you root settings at a nested table in any TOML file, not just \u003ccode\u003epyproject.toml\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eTraversable\u003c/code\u003e support for JSON/TOML/YAML file sources\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/902\"\u003e#902\u003c/a\u003e), so you can load config packaged inside a distribution — including files inside a zip or wheel — via \u003ccode\u003eimportlib.resources.files(...)\u003c/code\u003e without casting to \u003ccode\u003ePath\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGCP: \u003ccode\u003eproject_id\u003c/code\u003e can come from an earlier settings source\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003e#878\u003c/a\u003e), rather than only from the constructor or \u003ccode\u003eGOOGLE_CLOUD_PROJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix env vars not loading on Windows with \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/894\"\u003e#894\u003c/a\u003e). Windows upper-cases \u003ccode\u003eos.environ\u003c/code\u003e keys, so fields raised \u003ccode\u003eField required\u003c/code\u003e instead of picking up their values.\u003c/li\u003e\n\u003cli\u003eRead secret files as UTF-8 instead of the platform locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/917\"\u003e#917\u003c/a\u003e). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAliasPath\u003c/code\u003e on nested model fields not JSON-decoding env values (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/898\"\u003e#898\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix case-insensitive matching for \u003cstrong\u003eoptional\u003c/strong\u003e nested models (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/905\"\u003e#905\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix dotenv extras being wrongly claimed by a complex field sharing a name prefix (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/912\"\u003e#912\u003c/a\u003e) — e.g. \u003ccode\u003edbx_token\u003c/code\u003e being swallowed by a \u003ccode\u003edb: dict\u003c/code\u003e field.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enested_model_default_partial_update=True\u003c/code\u003e corrupting discriminated unions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/876\"\u003e#876\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eSecret\u003c/code\u003e subclasses crashing when loaded from the environment (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/920\"\u003e#920\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix enum names not parsing through nested annotations such as \u003ccode\u003eOptional[Annotated[MyEnum, ...]]\u003c/code\u003e with \u003ccode\u003eenv_parse_enums=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/910\"\u003e#910\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn empty \u003ccode\u003eyaml_config_section\u003c/code\u003e now falls back to defaults instead of raising \u003ccode\u003eAttributeError: 'NoneType' object has no attribute 'keys'\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/914\"\u003e#914\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e no longer follows symlinks pointing outside \u003ccode\u003esecrets_dir\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/889\"\u003e#889\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGCP: skip the \u003ccode\u003elist_secrets\u003c/code\u003e call when \u003ccode\u003ecase_sensitive=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003e#862\u003c/a\u003e), lowering the required IAM permissions to just \u003ccode\u003eroles/secretmanager.secretAccessor\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAWS: \u003ccode\u003etypes-boto3[secretsmanager]\u003c/code\u003e is no longer required at runtime (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/880\"\u003e#880\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument JSON parsing of complex env values, plus a comma-separated-values recipe (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/919\"\u003e#919\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRecommend an async settings loading pattern (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/908\"\u003e#908\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify behavior when an unprefixed value is present in a dotenv file (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/895\"\u003e#895\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eClarify environment variable helper descriptions (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003e#867\u003c/a\u003e) and fix assorted typos (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/904\"\u003e#904\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate documentation link for Pydantic settings by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/863\"\u003epydantic/pydantic-settings#863\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/865\"\u003epydantic/pydantic-settings#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify environment variable helper descriptions by \u003ca href=\"https://github.com/vip892766gma\"\u003e\u003ccode\u003e@​vip892766gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/867\"\u003epydantic/pydantic-settings#867\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/870\"\u003epydantic/pydantic-settings#870\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/875\"\u003epydantic/pydantic-settings#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip list_secrets call when case_sensitive=True by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/862\"\u003epydantic/pydantic-settings#862\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGoogleSecretManagerSettingsSource: read project_id from previous sources by \u003ca href=\"https://github.com/ecerulm\"\u003e\u003ccode\u003e@​ecerulm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/878\"\u003epydantic/pydantic-settings#878\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f725ca187bee4212e9ef799eefa3cb25be788462\"\u003e\u003ccode\u003ef725ca1\u003c/code\u003e\u003c/a\u003e Prepare release 2.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/28f35c25fac5d61210d532c31a300d49c0b684a4\"\u003e\u003ccode\u003e28f35c2\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/929\"\u003e#929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9056db049560897229f2603493753bae27b6479f\"\u003e\u003ccode\u003e9056db0\u003c/code\u003e\u003c/a\u003e test: move function-local imports to the top of test modules (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/f077e3ab3d9492838c7ef9275a88c95134688095\"\u003e\u003ccode\u003ef077e3a\u003c/code\u003e\u003c/a\u003e fix: raise ValidationError for non-JSON env values on strict fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/ae25d703c458b57f5a9a425f6ec9a28ad868f980\"\u003e\u003ccode\u003eae25d70\u003c/code\u003e\u003c/a\u003e fix: treat Secret subclasses as non-complex fields (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/716\"\u003e#716\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/920\"\u003e#920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/798dcea2a23b08a3e9b37994014e036224f6dd18\"\u003e\u003ccode\u003e798dcea\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/a190041d353bda2d432ea1908de4c499ae89ee0a\"\u003e\u003ccode\u003ea190041\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/925\"\u003e#925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/5d9333282b5c85d65a457c45e4476369b9949726\"\u003e\u003ccode\u003e5d93332\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/921\"\u003e#921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/d2fdeda91157140d2ff0c05404f32a9b1218115a\"\u003e\u003ccode\u003ed2fdeda\u003c/code\u003e\u003c/a\u003e fix: read secret files as UTF-8 instead of the locale encoding (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/917\"\u003e#917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2256a4e60f83f2da81e7654252562fc4841aa5d4\"\u003e\u003ccode\u003e2256a4e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/915\"\u003e#915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.13.0 to 2.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyJWT 2.14.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst\"\u003e2.14.0 changelog\u003c/a\u003e for the complete release details and related security advisories.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.14.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Harden HMAC key validation against public-key material supplied as JWK,\n  JWKS, array, encoded, BOM-prefixed, DER, or PEM input. See\n  `GHSA-r6x4-923q-g947 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-r6x4-923q-g947\u0026gt;`__,\n  `GHSA-ffc3-869f-jxw9 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9\u0026gt;`__,\n  `GHSA-p4g4-x82p-q773 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773\u0026gt;`__,\n  and `GHSA-w2cx-738m-mc7w \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w2cx-738m-mc7w\u0026gt;`__.\n- Reject automatic redirects when ``PyJWKClient`` fetches a JWKS, preventing\n  redirected destinations from being treated as trusted key sources. See\n  `GHSA-9v7f-9g4p-ffgj \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj\u0026gt;`__.\n- Limit repeated JWKS refreshes caused by unknown key IDs while preserving\n  normal key-rotation behavior. See\n  `GHSA-2gx3-rcp4-g85q \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q\u0026gt;`__.\n- Handle deeply nested and malformed JWS/JWK input without uncaught recursion\n  errors or whole-set parsing failures. See\n  `GHSA-8wjv-2p76-3863 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863\u0026gt;`__\n  and `GHSA-w6j9-cwv2-h6wq \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w6j9-cwv2-h6wq\u0026gt;`__.\n- Enforce compact JWS encoding rules during decoding. See\n  `GHSA-hxm8-2xgr-2p9m \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m\u0026gt;`__.\n- Reject detached-payload arguments for attached JWS inputs. Thanks to `@xclow3n\n  \u0026lt;https://github.com/xclow3n\u0026gt;`__ for reporting this behavior; fixed in commit\n  `37b54877 \u0026lt;https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Apply HMAC key validation consistently when keys are loaded through\n  ``PyJWK`` and ``PyJWKClient``. See\n  `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n- Reject empty HMAC keys when represented as JWKs.\n  See `GHSA-pxh4-856f-4h89 \u0026amp;lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89\u0026amp;gt;`__.\n\nFixed\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eRaise the documented \u003ccode\u003ePyJWTError\u003c/code\u003e subclass instead of leaking a\u003cbr /\u003e\n\u003ccode\u003eTypeError\u003c/code\u003e when the \u003ccode\u003eexp\u003c/code\u003e, \u003ccode\u003enbf\u003c/code\u003e, or \u003ccode\u003eiat\u003c/code\u003e claim decodes to a\u003cbr /\u003e\nnon-numeric, non-string value such as a list, dict, or \u003ccode\u003enull\u003c/code\u003e.\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/c6fe464b356ff4b1ebc9ba62172d331a40aa27df\"\u003e\u003ccode\u003ec6fe464\u003c/code\u003e\u003c/a\u003e release: prepare v2.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/f5413029ae7a2e31b1367b5303ea86a2f54ccf42\"\u003e\u003ccode\u003ef541302\u003c/code\u003e\u003c/a\u003e style: apply Ruff formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/801cd128528c62d9b23fcd161d1a2e1c17982f95\"\u003e\u003ccode\u003e801cd12\u003c/code\u003e\u003c/a\u003e fix: reject public JWK container HMAC keys\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/af8181ca0bec5e6b372fbba9afbe23702b787ceb\"\u003e\u003ccode\u003eaf8181c\u003c/code\u003e\u003c/a\u003e fix: reject empty HMAC keys from JWKs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/ba4853a75fb9676362da17f67d0f64bd18afd4e1\"\u003e\u003ccode\u003eba4853a\u003c/code\u003e\u003c/a\u003e Throttle repeated PyJWKClient refreshes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/2798504fa2663364573cf2d1043d8d7fef389499\"\u003e\u003ccode\u003e2798504\u003c/code\u003e\u003c/a\u003e fix: reject DER public keys as HMAC secrets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/8b4e233a22206b34ec1186e912e75c0b2396ac07\"\u003e\u003ccode\u003e8b4e233\u003c/code\u003e\u003c/a\u003e fix: reject loader-accepted PEM variants\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1f8180a211256dfe5cf32294b6753f554a5a4258\"\u003e\u003ccode\u003e1f8180a\u003c/code\u003e\u003c/a\u003e fix: format JWS tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/cff1ac55fe5f1096fd05295b269fce053ee290ab\"\u003e\u003ccode\u003ecff1ac5\u003c/code\u003e\u003c/a\u003e Fix redirect handler return annotation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56\"\u003e\u003ccode\u003e0a795b8\u003c/code\u003e\u003c/a\u003e Reject redirects in PyJWKClient fetches\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.2 to 1.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.3] - 2026-08-16\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStrip a leading UTF-8 BOM from \u003ccode\u003e.env\u003c/code\u003e file contents so the first variable is no longer silently lost when the file is saved with BOM (e.g. by some JetBrains IDEs on Windows) by [\u003ca href=\"https://github.com/h1whelan\"\u003e\u003ccode\u003e@​h1whelan\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/640\"\u003e#640\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eset_key\u003c/code\u003e now escapes backslashes, so values containing them (Windows paths, regular expressions) survive a write/read round-trip. Quoted values ending in an escaped backslash are no longer mis-parsed as an escaped quote, which used to swallow the following lines by [\u003ca href=\"https://github.com/dchaudhari7177\"\u003e\u003ccode\u003e@​dchaudhari7177\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edotenv run\u003c/code\u003e now prints a friendly error instead of a traceback when no command is given by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the parsed result for empty \u003ccode\u003e.env\u003c/code\u003e files so repeated \u003ccode\u003edotenv_values\u003c/code\u003e/\u003ccode\u003eload_dotenv\u003c/code\u003e calls no longer re-read the file by [\u003ca href=\"https://github.com/ReinerBRO\"\u003e\u003ccode\u003e@​ReinerBRO\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/49515afee2d50c33cad9419b3800b3a0dc93fc59\"\u003e\u003ccode\u003e49515af\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.2 → 1.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/8ac846ff2760b65470e769d7eed33e540f0934e1\"\u003e\u003ccode\u003e8ac846f\u003c/code\u003e\u003c/a\u003e chore: add release runbook (RELEASING.md) and make release target\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/bb31c944fb4b40e8dea59587f525840c38326166\"\u003e\u003ccode\u003ebb31c94\u003c/code\u003e\u003c/a\u003e docs: add 1.2.3 release notes (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/606\"\u003e#606\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/638\"\u003e#638\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f7b18d9c72d1abcc2ad4023424b84f5bee30d266\"\u003e\u003ccode\u003ef7b18d9\u003c/code\u003e\u003c/a\u003e fix: round-trip backslashes through set_key (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/751f8c148222e58aa173c83c4e5e6cfccb2cc124\"\u003e\u003ccode\u003e751f8c1\u003c/code\u003e\u003c/a\u003e ci(deps): bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions gro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/f1937b68f338d7ebd7754da377ca08b2f0df8dbb\"\u003e\u003ccode\u003ef1937b6\u003c/code\u003e\u003c/a\u003e chore(deps): update mkdocs-include-markdown-plugin requirement from \u0026gt;=6.0.0 t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/45b93720dd5e9e127d0be3971a04855d34e464d8\"\u003e\u003ccode\u003e45b9372\u003c/code\u003e\u003c/a\u003e chore(deps): update pytest requirement from \u0026gt;=3.9 to \u0026gt;=9.0.3 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72896e9244d2a1ff8d5e1934d3df8a35c813799a\"\u003e\u003ccode\u003e72896e9\u003c/code\u003e\u003c/a\u003e docs: fix broken mkdocs link in CONTRIBUTING.md (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/636\"\u003e#636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/72754a16a4743e4c92edf87ce59ba0e4ff78758d\"\u003e\u003ccode\u003e72754a1\u003c/code\u003e\u003c/a\u003e ci(deps): bump peaceiris/actions-gh-pages from 4.0.0 to 4.1.0 in the github-a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/078325e92558330e9addc661b789c7b6123fa73c\"\u003e\u003ccode\u003e078325e\u003c/code\u003e\u003c/a\u003e ci(security): harden CI/CD supply chain with SHA pinning and least-privilege ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.2...v1.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.69.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.69.1\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7428\"\u003e#7428\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Preserve SigV4-signed propagation headers by \u003ca href=\"https://github.com/Robinbinu\"\u003e\u003ccode\u003e@​Robinbinu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7427\"\u003e#7427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eMcp\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eParametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7424\"\u003e#7424\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove vacuous tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7420\"\u003e#7420\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(cohere) Parametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7419\"\u003e#7419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Parametrize tests on \u003ccode\u003estream_gen_ai_spans\u003c/code\u003e and the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7405\"\u003e#7405\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7341\"\u003e#7341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(bottle) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7343\"\u003e#7343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(clickhouse_driver) Set breadcrumbs in the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7325\"\u003e#7325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(docs) Add Plausible analytics to Sphinx docs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7319\"\u003e#7319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(falcon) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7340\"\u003e#7340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(fastapi) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7322\"\u003e#7322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(flask) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7344\"\u003e#7344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(pyramid) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7347\"\u003e#7347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(quart) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7348\"\u003e#7348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sqlalchemy) Add more db system names for span data by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7329\"\u003e#7329\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7338\"\u003e#7338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export SpanJSON type by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7331\"\u003e#7331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3.15 to test matrix by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7326\"\u003e#7326\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eMcp\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eNone\u003c/code\u003e arguments in tool and prompt handlers by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7387\"\u003e#7387\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't report stateless StreamableHTTP servers as stdio by \u003ca href=\"https://github.com/Snaylaker\"\u003e\u003ccode\u003e@​Snaylaker\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7224\"\u003e#7224\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOpenai\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRead \u003ccode\u003einput_text\u003c/code\u003e parts for the Responses API by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7333\"\u003e#7333\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.69.1\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7428\"\u003e#7428\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Preserve SigV4-signed propagation headers by \u003ca href=\"https://github.com/Robinbinu\"\u003e\u003ccode\u003e@​Robinbinu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7427\"\u003e#7427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003ch4\u003eMcp\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eParametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7424\"\u003e#7424\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove vacuous tests by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7420\"\u003e#7420\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(cohere) Parametrize tests on the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7419\"\u003e#7419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai-agents) Parametrize tests on \u003ccode\u003estream_gen_ai_spans\u003c/code\u003e and the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7405\"\u003e#7405\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(aiohttp) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7341\"\u003e#7341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(bottle) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7343\"\u003e#7343\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(clickhouse_driver) Set breadcrumbs in the streaming trace lifecycle by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7325\"\u003e#7325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(docs) Add Plausible analytics to Sphinx docs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7319\"\u003e#7319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(falcon) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7340\"\u003e#7340\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(fastapi) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7322\"\u003e#7322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(flask) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7344\"\u003e#7344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(pyramid) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7347\"\u003e#7347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(quart) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7348\"\u003e#7348\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(sqlalchemy) Add more db system names for span data by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7329\"\u003e#7329\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Add \u003ccode\u003ehttp.route\u003c/code\u003e attribute by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7338\"\u003e#7338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(types) Export SpanJSON type by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7331\"\u003e#7331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3....\n\n_Description has been truncated_\n\n\u003c!-- This is an auto-generated description by cubic. --\u003e\n---\n## Summary by cubic\nBumps 12 Python dependencies in the `python-minor-patch` group across `requirements.in` and `requirements.txt`, delivering security fixes and minor behavior changes in `pydantic-settings`, `httpx2`, and `psycopg2-binary`.\n\n**Dependencies**\n- `PyJWT` 2.14.0 hardens HMAC key validation and JWKS fetching against multiple advisories.\n- `pydantic-settings` 2.15.0 applies `case_sensitive` to init kwargs and config-file sources, making case-insensitive matching the default there.\n- `httpx2` 2.13.0 bounds decompression memory, fixes async stream cleanup, and restores real `--no-verify`/`--verify` CLI flags.\n- `psycopg2-binary` 2.9.13 drops Python 3.9 support.\n- `orjson` 3.12.0 stops publishing ppc64le and s390x wheels.\n- `python-dotenv` 1.2.3 strips UTF-8 BOMs when loading `.env` files and escapes backslashes in `set_key`.\n\n\u003csup\u003eWritten for commit 30003db9772cffd7a7e53c61e51da537adae5471. Summary will update on new commits.\u003c/sup\u003e\n\n\u003ca href=\"https://cubic.dev/pr/0xSoftBoi/suwappubot/pull/1014?utm_source=github\" target=\"_blank\" rel=\"noopener noreferrer\" data-no-image-dialog=\"true\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://www.cubic.dev/buttons/review-in-cubic-dark.svg\"\u003e\u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://www.cubic.dev/buttons/review-in-cubic-light.svg\"\u003e\u003cimg alt=\"Review in cubic\" src=\"https://www.cubic.dev/buttons/review-in-cubic-dark.svg\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n\u003c!-- End of auto-generated description by cubic. --\u003e\n\n","html_url":"https://github.com/0xSoftBoi/suwappubot/pull/1014","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSoftBoi%2Fsuwappubot/issues/1014","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1014/packages"}},{"old_version":"\u003c47,\u003e=42","new_version":"\u003e=50.0.1,\u003c51","update_type":null,"path":null,"pr_created_at":"2026-09-18T03:05:59.000Z","version_change":"\u003c47,\u003e=42 → \u003e=50.0.1,\u003c51","issue":{"uuid":"5495166961","node_id":"PR_kwDOUffR5c8AAAABEBjm3g","number":6,"state":"open","title":"Update cryptography requirement from \u003c47,\u003e=42 to \u003e=50.0.1,\u003c51","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-18T03:05:59.000Z","updated_at":"2026-09-18T03:06:00.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"cryptography","old_version":"\u003c47,\u003e=42","new_version":"\u003e=50.0.1,\u003c51","repository_url":"https://github.com/pyca/cryptography"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003c/p\u003e\n\u003cp\u003e50.0.0 - 2026-07-31\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e:\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der\u003c/code\u003e\nand its PEM and S/MIME variants no longer expose distinguishable errors or\ntiming when unwrapping a \u003ccode\u003eRecipientInfo\u003c/code\u003e's \u003ccode\u003eencryptedKey\u003c/code\u003e, which could\nact as a Bleichenbacher oracle for callers that decrypt untrusted messages.\nA random key is now substituted on failure, as described in :rfc:\u003ccode\u003e3218\u003c/code\u003e.\nCredit to \u003cstrong\u003e\u003ca href=\"https://github.com/X1AOxiang\"\u003e\u003ccode\u003e@​X1AOxiang\u003c/code\u003e\u003c/a\u003e\u003c/strong\u003e for reporting the issue. \u003cstrong\u003eCVE-2026-69247\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated Diffie-Hellman key exchange over finite fields (FFDH).\nEverything FFDH is deprecated, including the types in\n\u003ccode\u003ecryptography.hazmat.primitives.asymmetric.dh\u003c/code\u003e and loading FFDH keys or\nparameters with the key loading APIs. Users should migrate to a more\nmodern key exchange algorithm.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003exof()\u003c/code\u003e class methods to\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE128\u003c/code\u003e and\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.SHAKE256\u003c/code\u003e for constructing\nalgorithm instances configured for use with\n:class:\u003ccode\u003e~cryptography.hazmat.primitives.hashes.XOFHash\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe :mod:\u003ccode\u003eX.509 verification \u0026lt;cryptography.x509.verification\u0026gt;\u003c/code\u003e APIs are now\nconsidered stable and are subject to our API stability policy.\u003c/li\u003e\n\u003cli\u003eAdded the :doc:\u003ccode\u003e/cobblestone\u003c/code\u003e recipe, an implementation of the\nCobblestone-128 and Cobblestone-256 instantiations of the \u003ccode\u003eC2SP chunked-encryption specification \u0026lt;https://c2sp.org/chunked-encryption\u0026gt;\u003c/code\u003e_ for streaming authenticated\nencryption of large messages.\u003c/li\u003e\n\u003cli\u003eParsing a Signed Certificate Timestamp list now rejects encodings that\ncarry trailing bytes after the list or after an individual SCT, instead of\nsilently ignoring them.\u003c/li\u003e\n\u003cli\u003eAdded support for using :class:\u003ccode\u003e~cryptography.x509.Name\u003c/code\u003e as a field type in\nthe :doc:\u003ccode\u003e/hazmat/asn1/index\u003c/code\u003e module.\u003c/li\u003e\n\u003cli\u003eLoading a public key or an EC private key now rejects DER where the\n\u003ccode\u003esubjectPublicKey\u003c/code\u003e (or EC \u003ccode\u003epublicKey\u003c/code\u003e) \u003ccode\u003eBIT STRING\u003c/code\u003e declares a non-zero\nnumber of unused bits, instead of silently ignoring it.\u003c/li\u003e\n\u003cli\u003eParsing a CRL entry's \u003ccode\u003eInvalidityDate\u003c/code\u003e extension now rejects a\n\u003ccode\u003eGeneralizedTime\u003c/code\u003e that carries fractional seconds or another non-DER form,\nmatching the strict encoding already required for every other X.509 time\nfield.\u003c/li\u003e\n\u003cli\u003e:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_request\u003c/code\u003e and\n:func:\u003ccode\u003e~cryptography.x509.ocsp.load_der_ocsp_response\u003c/code\u003e now reject a request\nor response whose \u003ccode\u003eversion\u003c/code\u003e field is not \u003ccode\u003ev1\u003c/code\u003e, the only version defined\nby RFC 6960, matching the version validation already performed when loading\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/dcb7050b807b00392fa9fe2eac7cb362fcf355cc\"\u003e\u003ccode\u003edcb7050\u003c/code\u003e\u003c/a\u003e Prepare for 50.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15372\"\u003e#15372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f\"\u003e\u003ccode\u003e53fccd9\u003c/code\u003e\u003c/a\u003e Don't leak how PKCS#7 encryptedKey decryption failed (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15369\"\u003e#15369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/d472f978470fbefa521b86d98b2ecccbbb4d1dd8\"\u003e\u003ccode\u003ed472f97\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e to all src/ Python files (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15371\"\u003e#15371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/908773d53829fb1466c6db364b31321c3cd8eb9a\"\u003e\u003ccode\u003e908773d\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15368\"\u003e#15368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2cc07cc948948211899bcb0cddd1fddf86e95812\"\u003e\u003ccode\u003e2cc07cc\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15367\"\u003e#15367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/c94ede9f040fa44942f7139772603419000acf66\"\u003e\u003ccode\u003ec94ede9\u003c/code\u003e\u003c/a\u003e chore(deps): bump ruff from 0.16.0 to 0.16.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15366\"\u003e#15366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67a8308dc9ea4cce6056e0f1438f903c208c3f35\"\u003e\u003ccode\u003e67a8308\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.7.0 to 21.7.1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15365\"\u003e#15365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/95018ffcdbbc510fd92fc872e3a3e80aa6e58596\"\u003e\u003ccode\u003e95018ff\u003c/code\u003e\u003c/a\u003e Release the GIL in one-shot AEAD encrypt/decrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15361\"\u003e#15361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6954733eaf55a0074abf88f06f7242dfca3a5d02\"\u003e\u003ccode\u003e6954733\u003c/code\u003e\u003c/a\u003e Release the GIL during DH and DSA parameter generation (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15364\"\u003e#15364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/42.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\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 show \u003cdependency name\u003e 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\u003c/details\u003e","html_url":"https://github.com/blackmore-technology-group/ENTITY/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmore-technology-group%2FENTITY/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"50.0.0","new_version":"50.0.1","update_type":"patch","path":null,"pr_created_at":"2026-09-18T02:52:29.000Z","version_change":"50.0.0 → 50.0.1","issue":{"uuid":"5495089577","node_id":"PR_kwDORtTsIM8AAAABEBfu5g","number":2394,"state":"open","title":"chore(deps): bump the minor-and-patch group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-09-18T02:52:29.000Z","updated_at":"2026-09-18T02:55:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"minor-and-patch","update_count":20,"packages":[{"name":"alembic","old_version":"1.19.1","new_version":"1.20.0","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.14.2","new_version":"4.15.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.4.2","new_version":"8.5.0","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"50.0.0","new_version":"50.0.1","repository_url":"https://github.com/pyca/cryptography"},{"name":"filelock","old_version":"3.32.4","new_version":"3.32.6","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"greenlet","old_version":"3.5.5","new_version":"3.5.6","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"msgpack","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"pip-api","old_version":"0.0.34","new_version":"0.0.35","repository_url":"https://github.com/di/pip-api"},{"name":"platformdirs","old_version":"4.11.4","new_version":"4.11.8","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"psycopg2-binary","old_version":"2.9.12","new_version":"2.9.13","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pydantic","old_version":"2.13.4","new_version":"2.13.5","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyjwt","old_version":"2.13.0","new_version":"2.14.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"sentry-sdk","old_version":"2.68.1","new_version":"2.69.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.52","new_version":"2.0.53","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"uvicorn","old_version":"0.52.4","new_version":"0.53.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"websockets","old_version":"17.0.1","new_version":"17.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"wrapt","old_version":"2.3.0","new_version":"2.4.1","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"ruff","old_version":"0.16.4","new_version":"0.16.7","repository_url":"https://github.com/astral-sh/ruff"},{"name":"locust","old_version":"2.46.4","new_version":"2.46.5","repository_url":"https://github.com/locustio/locust"},{"name":"hypothesis","old_version":"6.165.10","new_version":"6.168.0","repository_url":"https://github.com/HypothesisWorks/hypothesis"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-and-patch group with 20 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.19.1` | `1.20.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.2` | `4.15.1` |\n| [click](https://github.com/pallets/click) | `8.4.2` | `8.5.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `50.0.0` | `50.0.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.32.4` | `3.32.6` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.5` | `3.5.6` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.1` | `1.2.2` |\n| [pip-api](https://github.com/di/pip-api) | `0.0.34` | `0.0.35` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.11.4` | `4.11.8` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.12` | `2.9.13` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.13.0` | `2.14.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.68.1` | `2.69.1` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.52` | `2.0.53` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.52.4` | `0.53.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `17.0.1` | `17.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.3.0` | `2.4.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.4` | `0.16.7` |\n| [locust](https://github.com/locustio/locust) | `2.46.4` | `2.46.5` |\n| [hypothesis](https://github.com/HypothesisWorks/hypothesis) | `6.165.10` | `6.168.0` |\n\n\nUpdates `alembic` from 1.19.1 to 1.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.20.0\u003c/h1\u003e\n\u003cp\u003eReleased: September 11, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [batch]\u003c/strong\u003e Added a warning for the case where an unnamed CHECK constraint on a\nreflected table is omitted from a batch \u0026quot;recreate\u0026quot; operation.  An unnamed\nCHECK constraint can't be reliably carried over in a batch recreate\nas it may refer to columns that are being dropped or changed.  This\nomission was previously a silent operation.   The presence of any\n\u003ccode\u003e~sqlalchemy.schema.CheckConstraint\u003c/code\u003e in\n\u003ccode\u003eOperations.batch_alter_table.table_args\u003c/code\u003e is taken to indicate\nthat the case has been accommodated, and no warning is emitted.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1846\"\u003e#1846\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [autogenerate]\u003c/strong\u003e Autogenerate now renders a warning comment above any rendered\n\u003ccode\u003eOperations.drop_constraint()\u003c/code\u003e directive for which the constraint name\nis \u003ccode\u003eNone\u003c/code\u003e, as is the case when a constraint that has no name in the model\nis dropped, most typically within the \u003ccode\u003edowngrade()\u003c/code\u003e function of a\nmigration that adds an unnamed constraint.  A warning is also emitted on\nthe console when the migration script is generated.   The directive\nrequires a non-None name in order to be able to emit a \u0026quot;DROP CONSTRAINT\u0026quot;\ncommand.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/916\"\u003e#916\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where adding a column with a type that generates\nits own CHECK constraint, such as \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or\n\u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e with\n\u003ccode\u003e~sqlalchemy.types.Boolean.create_constraint\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e,\nwould emit the constraint twice when the table was recreated, once under\nthe name generated by the naming convention in use and once under the\nname given to the type.  The constraint is now emitted once, using the\nsame name that would be used outside of batch mode.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1768\"\u003e#1768\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [batch]\u003c/strong\u003e Fixed bug in batch mode where a CHECK constraint generated by a type such\nas \u003ccode\u003e~sqlalchemy.types.Boolean\u003c/code\u003e or \u003ccode\u003e~sqlalchemy.types.Enum\u003c/code\u003e\nwould lose the name established for it by the naming convention in use\nwhen the table was recreated, as the constraint was regenerated against\nthe temporary table used for the recreate operation.  The naming\nconvention is now resolved against the name of the table being replaced.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.2 to 4.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplemented a compatibility fix for supporting direct access of \u003ccode\u003eanyio.*\u003c/code\u003e submodules from the main package even when those submodules were not directly imported first (\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311\"\u003e#1311\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1311%5C%3E\"\u003eagronholm/anyio#1311\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for the newer keyword-only arguments on \u003ccode\u003eanyio.Path\u003c/code\u003e methods to match the standard library \u003ccode\u003epathlib.Path\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eexists()\u003c/code\u003e (Python 3.12+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_dir()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eis_file()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003eowner()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efollow_symlinks\u003c/code\u003e on \u003ccode\u003egroup()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enewline\u003c/code\u003e on \u003ccode\u003eread_text()\u003c/code\u003e (Python 3.13+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1286\"\u003e#1286\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1293\"\u003e#1293\u003c/a\u003e; PR by \u003ca href=\"https://github.com/jaideeppyne\"\u003e\u003ccode\u003e@​jaideeppyne\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eamap\u003c/code\u003e, \u003ccode\u003egather\u003c/code\u003e, and \u003ccode\u003eas_completed\u003c/code\u003e utility functions to simplify common patterns (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1173\"\u003e#1173\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003e--anyio-mode\u003c/code\u003e command-line option as an alternative to the \u003ccode\u003eanyio_mode\u003c/code\u003e ini setting, and fix the pytest plugin's auto mode detection to recognize the mode when set via either mechanism(e.g: \u003ccode\u003epytest_asyncio\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1242\"\u003e#1242\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003eanyio.Future\u003c/code\u003e synchronization primitive which behaves similar to \u003ccode\u003easyncio.Future\u003c/code\u003e, allowing tasks to wait for a value (or exception) from another task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1146\"\u003e#1146\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded guidance for managing multiple memory object stream producers and consumers with cloned streams (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/330\"\u003e#330\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nightcityblade\"\u003e\u003ccode\u003e@​nightcityblade\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003eStapledObjectStream.send_nowait()\u003c/code\u003e that delegates to the underlying \u003ccode\u003eObjectSendStream\u003c/code\u003e, if it implements it (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1241\"\u003e#1241\u003c/a\u003e; PR by \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003emove_on_at()\u003c/code\u003e and \u003ccode\u003efail_at()\u003c/code\u003e functions to complement \u003ccode\u003emove_on_after()\u003c/code\u003e and \u003ccode\u003efail_after()\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the default name for a task spawned with \u003ccode\u003eTaskGroup.create_task(func())\u003c/code\u003e to match the default task name for the analogous task spawned with \u003ccode\u003eTaskGroup.start_soon(func)\u003c/code\u003e or \u003ccode\u003eTaskGroup.start(func)\u003c/code\u003e in more situations. Previously, the default name of a \u003ccode\u003eTaskGroup.create_task\u003c/code\u003e task never included the module name. (The default name for a task spawned with \u003ccode\u003eTaskGroup.start_soon\u003c/code\u003e or \u003ccode\u003eTaskGroup.start\u003c/code\u003e typically includes the module name.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1234\"\u003e#1234\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the \u003ccode\u003eanyio\u003c/code\u003e and \u003ccode\u003eanyio.abc\u003c/code\u003e modules to lazily (much like \u003ccode\u003e810\u003c/code\u003e) import the necessary submodules. This is done by parsing the AST of the module and building a lookup table from the \u003ccode\u003eif TYPE_CHECKING:\u003c/code\u003e block. A fallback mode has been provided for installations where the source code is unavailable (e.g. PyInstaller). (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1169\"\u003e#1169\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed free-threading compatibility issues arising from the fact that on Python 3.14 free-threading builds, newly created threads inherit the current context by default, causing AnyIO to behave erroneously in relation to \u003ccode\u003estart_blocking_portal()\u003c/code\u003e and \u003ccode\u003eanyio.to_thread.run_sync()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1224\"\u003e#1224\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eSpooledTemporaryFile.readinto()\u003c/code\u003e and \u003ccode\u003ereadinto1()\u003c/code\u003e reading twice before rollover, so the destination buffer was overwritten by the second read and the file position advanced twice, silently losing data (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1215\"\u003e#1215\u003c/a\u003e; PR by \u003ca href=\"https://github.com/c-tonneslan\"\u003e\u003ccode\u003e@​c-tonneslan\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003efail_after\u003c/code\u003e (and the new \u003ccode\u003efail_at\u003c/code\u003e) allowing for added exception context when raising \u003ccode\u003eTimeoutError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1227\"\u003e#1227\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the default \u003ccode\u003eTaskHandle.name\u003c/code\u003e missing part of the task name for tasks started with \u003ccode\u003eTaskGroup.start\u003c/code\u003e on Trio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1231\"\u003e#1231\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.run\u003c/code\u003e leaking, or at least, delaying collection of loop and root_task due to the root task being cached in a \u003ccode\u003eRunVar\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1203\"\u003e#1203\u003c/a\u003e; PR by \u003ca href=\"https://github.com/tapetersen\"\u003e\u003ccode\u003e@​tapetersen\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eanyio.Path.with_stem()\u003c/code\u003e silently producing a wrong path (e.g. \u003ccode\u003ePath(\u0026quot;.txt\u0026quot;)\u003c/code\u003e) instead of raising \u003ccode\u003eValueError\u003c/code\u003e when given an empty stem on a path with a non-empty suffix, unlike \u003ccode\u003epathlib.PurePath.with_stem\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1200\"\u003e#1200\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eUNIXSocketStream.aclose()\u003c/code\u003e raising \u003ccode\u003easyncio.InvalidStateError\u003c/code\u003e when a concurrent receive or send operation had just been cancelled on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1267\"\u003e#1267\u003c/a\u003e; PR by \u003ca href=\"https://github.com/alloutflo\"\u003e\u003ccode\u003e@​alloutflo\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the pytest plugin importing the deprecated \u003ccode\u003e_pytest.python.CallSpec2\u003c/code\u003e alias, which triggers \u003ccode\u003ePytestRemovedIn10Warning\u003c/code\u003e on \u003ccode\u003epytest\u0026gt;=9.2\u003c/code\u003e and crashes pytest at startup when \u003ccode\u003efilterwarnings = error\u003c/code\u003e is configured (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1271\"\u003e#1271\u003c/a\u003e; PR by \u003ca href=\"https://github.com/matthewfeickert\"\u003e\u003ccode\u003e@​matthewfeickert\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an asyncio worker thread race that could raise \u003ccode\u003eRuntimeError\u003c/code\u003e when the event loop closed between checking its state and scheduling the worker result (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1265\"\u003e#1265\u003c/a\u003e; PR by \u003ca href=\"https://github.com/hansu650\"\u003e\u003ccode\u003e@​hansu650\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens when \u003ccode\u003etotal_tokens\u003c/code\u003e was raised while the limiter was over-subscribed (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1223\"\u003e#1223\u003c/a\u003e; PR by \u003ca href=\"https://github.com/zelinewang\"\u003e\u003ccode\u003e@​zelinewang\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffcd1542cd6d127980205f90a0100078849dd703\"\u003e\u003ccode\u003effcd154\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/0ecf5ed98d294242509b043ebd1a0843e52d892f\"\u003e\u003ccode\u003e0ecf5ed\u003c/code\u003e\u003c/a\u003e Added a workaround for third party code accessing unimported submodules (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1309\"\u003e#1309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/928366259543412a2deb1e2ba09ea45ffa92ef4f\"\u003e\u003ccode\u003e9283662\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d137692a90f76e4f71605e32ea5ca94cab3a539d\"\u003e\u003ccode\u003ed137692\u003c/code\u003e\u003c/a\u003e Improved the instructions for AI agents\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/033fc52b8fa8e90c5d0ef24b10b3860e974a6265\"\u003e\u003ccode\u003e033fc52\u003c/code\u003e\u003c/a\u003e Shield TemporaryDirectory cleanup from cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1304\"\u003e#1304\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/942e9a6552cc10b5aaa779d84bfc8e2c3d5fcffc\"\u003e\u003ccode\u003e942e9a6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1305\"\u003e#1305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b825c3be7cb4ca1a8000b8065d4e147843deb704\"\u003e\u003ccode\u003eb825c3b\u003c/code\u003e\u003c/a\u003e Fixed pyproject.toml changes not triggering the test suite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9727dc504681e2986b5bc285de9571fb467539af\"\u003e\u003ccode\u003e9727dc5\u003c/code\u003e\u003c/a\u003e Fixed start inconsistencies between trio and asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b05fe6d160a640355c201363cab286a7d2581da8\"\u003e\u003ccode\u003eb05fe6d\u003c/code\u003e\u003c/a\u003e Fixed wrong type in move_on_after (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1297\"\u003e#1297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44d0c93cc20079acbf38ba4dbed5ab9df323f153\"\u003e\u003ccode\u003e44d0c93\u003c/code\u003e\u003c/a\u003e Fixed asyncio task group coroutine cleanup (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.2...4.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.2 to 8.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.5.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.5.0/\"\u003ehttps://pypi.org/project/click/8.5.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-5-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-5-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/33\"\u003ehttps://github.com/pallets/click/milestone/33\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2672\"\u003e#2672\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3637\"\u003e#3637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2986\"\u003e#2986\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3505\"\u003e#3505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2983\"\u003e#2983\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3473\"\u003e#3473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when \u003ca href=\"https://redirect.github.com/pallets/click/issues/2969\"\u003e#2969\u003c/a\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3572\"\u003e#3572\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3653\"\u003e#3653\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2877\"\u003e#2877\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3642\"\u003e#3642\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/3581\"\u003e#3581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3677\"\u003e#3677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2819\"\u003e#2819\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3678\"\u003e#3678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3681\"\u003e#3681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.5.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-08-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd built-in shell completion support for PowerShell (Windows PowerShell\n5.1+ and pwsh 7+) alongside the existing \u003ccode\u003ebash\u003c/code\u003e, \u003ccode\u003ezsh\u003c/code\u003e, and \u003ccode\u003efish\u003c/code\u003e\ncompleters. Use \u003ccode\u003e_FOO_BAR_COMPLETE=powershell_source foo-bar\u003c/code\u003e to generate\nthe completion script. {issue}\u003ccode\u003e2672\u003c/code\u003e {pr}\u003ccode\u003e3637\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupported versions of Windows enable ANSI terminal styles by default.\nColorama is no longer a dependency and is not used. {issue}\u003ccode\u003e2986\u003c/code\u003e {pr}\u003ccode\u003e3505\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003eArgument\u003c/code\u003e accepts a \u003ccode\u003ehelp\u003c/code\u003e parameter, and help output includes\na \u003ccode\u003ePositional arguments\u003c/code\u003e section when argument help is available. {issue}\u003ccode\u003e2983\u003c/code\u003e {pr}\u003ccode\u003e3473\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econfirm()\u003c/code\u003e and \u003ccode\u003eprompt()\u003c/code\u003e strip ANSI color and style codes from the\nprompt when the output stream does not support them, matching \u003ccode\u003eecho()\u003c/code\u003e.\nThis stripping was lost in \u003ccode\u003e8.4.0\u003c/code\u003e when {pr}\u003ccode\u003e2969\u003c/code\u003e began writing the\nprompt with \u003ccode\u003einput()\u003c/code\u003e directly. {issue}\u003ccode\u003e3572\u003c/code\u003e {pr}\u003ccode\u003e3653\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix test failures when using pytest \u0026gt;= 9.1. {pr}\u003ccode\u003e3656\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{class}\u003ccode\u003ePath\u003c/code\u003e with \u003ccode\u003eallow_dash=True\u003c/code\u003e no longer triggers a \u003ccode\u003eBytesWarning\u003c/code\u003e,\nan error under \u003ccode\u003epython -bb\u003c/code\u003e, when checking a value against the \u003ccode\u003e-\u003c/code\u003e\nconvention. {issue}\u003ccode\u003e2877\u003c/code\u003e {pr}\u003ccode\u003e3642\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd {func}\u003ccode\u003ecustom_version_option\u003c/code\u003e, a \u003ccode\u003e--version\u003c/code\u003e option whose output is\nproduced by a callback, covering cases {func}\u003ccode\u003eversion_option\u003c/code\u003e intentionally\ndoes not. The feature set of {func}\u003ccode\u003eversion_option\u003c/code\u003e is now frozen; see\n[discussion \u003ca href=\"https://redirect.github.com/pallets/click/issues/3527\"\u003e#3527\u003c/a\u003e](\u003ca href=\"https://github.com/pallets/click/discussions/3527\"\u003ehttps://github.com/pallets/click/discussions/3527\u003c/a\u003e). {pr}\u003ccode\u003e3581\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estyle()\u003c/code\u003e and \u003ccode\u003esecho()\u003c/code\u003e no longer silently drop the 256-color index \u003ccode\u003e0\u003c/code\u003e\n(black) passed as \u003ccode\u003efg\u003c/code\u003e or \u003ccode\u003ebg\u003c/code\u003e, and now validate color arguments. Invalid\ncolors raise a \u003ccode\u003eValueError\u003c/code\u003e instead of a \u003ccode\u003eTypeError\u003c/code\u003e. {pr}\u003ccode\u003e3677\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe automatic help option stores its value under the reserved name\n\u003ccode\u003e_click_default_help\u003c/code\u003e instead of \u003ccode\u003ehelp\u003c/code\u003e, so a parameter named \u003ccode\u003ehelp\u003c/code\u003e no\nlonger breaks parsing. The new name is visible in\n{meth}\u003ccode\u003eCommand.to_info_dict\u003c/code\u003e output. Parameters that overwrite each other's\nvalue trigger a warning: an argument sharing its name with another\nparameter, or any parameter claiming the reserved name. Options may still\nshare a name to compete for the same value (feature switches).\n{issue}\u003ccode\u003e2819\u003c/code\u003e {pr}\u003ccode\u003e3678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunstyle\u003c/code\u003e and the ANSI handling behind help-text wrapping now strip the full\nCSI escape-sequence grammar. {pr}\u003ccode\u003e3681\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStreamline \u003ccode\u003eOption\u003c/code\u003e flag handling: the flag-kind, type, lazy-default and\nvalidation steps in \u003ccode\u003eOption.__init__\u003c/code\u003e move into focused helpers, and\n\u003ccode\u003eflag_value\u003c/code\u003e and \u003ccode\u003edefault\u003c/code\u003e keep their unset sentinel at construction\n(resolved lazily on read) so \u003ccode\u003eis UNSET\u003c/code\u003e reliably tells a user-supplied value\nfrom an auto-derived one. Runtime behavior is unchanged, but\n{meth}\u003ccode\u003eParameter.to_info_dict\u003c/code\u003e now resolves \u003ccode\u003edefault=True\u003c/code\u003e on a feature\nswitch to its \u003ccode\u003eflag_value\u003c/code\u003e, matching what the function receives at call\ntime. {pr}\u003ccode\u003e3641\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eget_binary_stream\u003c/code\u003e and {func}\u003ccode\u003eget_text_stream\u003c/code\u003e are deprecated and\nwill be removed in Click 9.0. {issue}\u003ccode\u003e3481\u003c/code\u003e {pr}\u003ccode\u003e3695\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe following \u003ccode\u003eclick.utils\u003c/code\u003e names were never intentionally public and are\nnow private (\u003ccode\u003e_\u003c/code\u003e-prefixed). The old names remain available with a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e until Click 9.0: \u003ccode\u003eLazyFile\u003c/code\u003e, \u003ccode\u003eKeepOpenFile\u003c/code\u003e,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8b19813f2bfca99f1018a587a8cf54fc959f2e5d\"\u003e\u003ccode\u003e8b19813\u003c/code\u003e\u003c/a\u003e Release version 8.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2c8cd3ac958a7eb316d67f2d316c27086c4c0369\"\u003e\u003ccode\u003e2c8cd3a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3778\"\u003e#3778\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/131c86aadddfa5cb6dca8339c9d6294c4eacb8ac\"\u003e\u003ccode\u003e131c86a\u003c/code\u003e\u003c/a\u003e Add FAQ entry about \u003ccode\u003eUnicodeEncodeError\u003c/code\u003e on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e1fd5946ab26aaf372009eaff1acf947140b40fb\"\u003e\u003ccode\u003ee1fd594\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a1d87858abd77fa8e3ffc204670ccd75b96c4781\"\u003e\u003ccode\u003ea1d8785\u003c/code\u003e\u003c/a\u003e Add support of \u003ccode\u003epathlib.Path\u003c/code\u003e to \u003ccode\u003eedit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/2103e157683c5e4cadc8ee1838df526a54bde9a4\"\u003e\u003ccode\u003e2103e15\u003c/code\u003e\u003c/a\u003e Forward all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e and improve flag detection (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3777\"\u003e#3777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a6256bfb5971d5e58585fe7b6c656134e1ade5a4\"\u003e\u003ccode\u003ea6256bf\u003c/code\u003e\u003c/a\u003e Forwards all user's parameters set in \u003ccode\u003ePAGER\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/61b69e967e525bd502f5bf42def4d551e761fe0e\"\u003e\u003ccode\u003e61b69e9\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3776\"\u003e#3776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/9835b0f7612d1b1ea180a975fd6d24cf16791ba8\"\u003e\u003ccode\u003e9835b0f\u003c/code\u003e\u003c/a\u003e Resolve the pager command once, in \u003ccode\u003e_pager_contextmanager\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f36d58bbd7f188178de2d4fe1d0292c510375ca7\"\u003e\u003ccode\u003ef36d58b\u003c/code\u003e\u003c/a\u003e Refactor pager stream handling (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3767\"\u003e#3767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.2...8.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 50.0.0 to 50.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50.0.1 - 2026-08-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2.\n\u003cp\u003e.. _v50-0-0:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/ffde75a2b594822c740a2e4748b56c00548302bf\"\u003e\u003ccode\u003effde75a\u003c/code\u003e\u003c/a\u003e bump for 50.0.1 + changelog (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15520\"\u003e#15520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/50.0.0...50.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.32.4 to 3.32.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.32.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(lease): reject a duration no marker can carry by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/723\"\u003etox-dev/filelock#723\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft-rw): reject non-finite timing options by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/724\"\u003etox-dev/filelock#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve exception notes when copying and pickling by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(soft-rw): reuse existing test module by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/730\"\u003etox-dev/filelock#730\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: respect ACL write access when the owner write bit is absent by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/728\"\u003etox-dev/filelock#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix SoftReadWriteLock state lock timeout by \u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/729\"\u003etox-dev/filelock#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sohel2309\"\u003e\u003ccode\u003e@​Sohel2309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/726\"\u003etox-dev/filelock#726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.5...3.32.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.32.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(fork): report where a stalled fork stops by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/715\"\u003etox-dev/filelock#715\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs: say that mode is read-only in the thread-local section by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/716\"\u003etox-dev/filelock#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(lease): clear token after failed acquire by \u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lprnmns\"\u003e\u003ccode\u003e@​lprnmns\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/721\"\u003etox-dev/filelock#721\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\"\u003ehttps://github.com/tox-dev/filelock/compare/3.32.4...3.32.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.0.0 (2026-09-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eThe :class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e on-disk protocol is a generation log under \u003ccode\u003e\u0026lt;path\u0026gt;.rw\u003c/code\u003e, and a process\nrunning an earlier release does not see it: an old and a new participant on one lock path do not exclude each\nother. Stop every participant, upgrade them all, then restart them; the new code ignores leftover \u003ccode\u003e.state\u003c/code\u003e,\n\u003ccode\u003e.write\u003c/code\u003e and \u003ccode\u003e.readers/\u003c/code\u003e files, and you can delete them. The filesystem must provide no-replace hard links, as\nit must for :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e, so a runtime without \u003ccode\u003eos.link\u003c/code\u003e raises\n:class:\u003ccode\u003e~filelock.SoftFileLockProtocolError\u003c/code\u003e on acquire. Constructing a singleton again with a different\n\u003ccode\u003eon_compromise\u003c/code\u003e, or with \u003ccode\u003epoll_interval\u003c/code\u003e at or above \u003ccode\u003estale_threshold\u003c/code\u003e, now raises :class:\u003ccode\u003eValueError\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e exposes :attr:\u003ccode\u003e~filelock.SoftReadWriteLock.generation\u003c/code\u003e as a fencing token for\nthe protected resource and reports a lost hold through \u003ccode\u003eon_compromise\u003c/code\u003e and\n:attr:\u003ccode\u003e~filelock.SoftReadWriteLock.compromise\u003c/code\u003e. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003e~filelock.SoftReadWriteLock\u003c/code\u003e no longer deadlocks when a holder dies on another host mid-transition, and\n\u003ccode\u003erelease()\u003c/code\u003e no longer waits on a mutex a dead host left behind (:pr:\u003ccode\u003e725\u003c/code\u003e, :pr:\u003ccode\u003e735\u003c/code\u003e). The state mutex is gone.\nEach transition is one atomic snapshot commit, and liveness is a heartbeat nonce read on the observer's own clock\nrather than an \u003ccode\u003emtime\u003c/code\u003e read against another host's. :pr:\u003ccode\u003e735\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.7 (2026-09-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eValidate final-symlink refusal by error number so the test works across libc implementations. :pr:\u003ccode\u003e737\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocument that :meth:\u003ccode\u003e~filelock.BaseFileLock.acquire\u003c/code\u003e reads \u003ccode\u003eblocking=None\u003c/code\u003e as the lock's \u003ccode\u003eblocking\u003c/code\u003e attribute and\nraises :class:\u003ccode\u003e~filelock.Timeout\u003c/code\u003e after one attempt when \u003ccode\u003eblocking=False\u003c/code\u003e. :pr:\u003ccode\u003e733\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.6 (2026-09-08)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLease\u003c/code\u003e now reject a boolean or non-finite \u003ccode\u003elease_duration\u003c/code\u003e, which used to\npublish an owner record their own \u003ccode\u003eowner\u003c/code\u003e property reads back as malformed. :pr:\u003ccode\u003e723\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject non-finite heartbeat, stale, and polling intervals in \u003ccode\u003eSoftReadWriteLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftReadWriteLock\u003c/code\u003e,\nincluding cached singleton construction and overflow in the default stale threshold. :pr:\u003ccode\u003e724\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHonor acquisition timeouts and \u003ccode\u003eblocking=False\u003c/code\u003e during \u003ccode\u003eSoftReadWriteLock\u003c/code\u003e state-mutex contention, including\nfailed writer cleanup. Cross-host recovery of an abandoned \u003ccode\u003e.state\u003c/code\u003e marker remains unsupported. :pr:\u003ccode\u003e726\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow acquiring existing lock files that grant write access through group permissions or an ACL even when their\nowner-write mode bit is unset. :pr:\u003ccode\u003e728\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePreserve exception notes and custom attributes when copying or pickling \u003ccode\u003eTimeout\u003c/code\u003e and \u003ccode\u003eSoftFileLockProtocolError\u003c/code\u003e. :pr:\u003ccode\u003e729\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4efd93e0482e8095a0b6949fb337206e7f67495d\"\u003e\u003ccode\u003e4efd93e\u003c/code\u003e\u003c/a\u003e Release 3.32.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7b7b7a8b9b10acf826cca246441297468039b0c1\"\u003e\u003ccode\u003e7b7b7a8\u003c/code\u003e\u003c/a\u003e Fix SoftReadWriteLock state lock timeout (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2f7b8696426c518b6828ea10e755c0ba2a4ffe2\"\u003e\u003ccode\u003ef2f7b86\u003c/code\u003e\u003c/a\u003e fix: respect ACL write access when the owner write bit is absent (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/e947a694fb0da6676c4861c8bfef3650e5656153\"\u003e\u003ccode\u003ee947a69\u003c/code\u003e\u003c/a\u003e test(soft-rw): reuse existing test module (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da3ae2bca0035fb9e5269257e6f393360866cf88\"\u003e\u003ccode\u003eda3ae2b\u003c/code\u003e\u003c/a\u003e fix: preserve exception notes when copying and pickling (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ae9cb5b2d66d6a79edd76b292fa7320c11468812\"\u003e\u003ccode\u003eae9cb5b\u003c/code\u003e\u003c/a\u003e 🐛 fix(soft-rw): reject non-finite timing options (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d00f9bbd709fbe92a99a38cb1e32b6690813e5a8\"\u003e\u003ccode\u003ed00f9bb\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/82f66d7b0aaa83755f8d71d0b0da88408b58ec4a\"\u003e\u003ccode\u003e82f66d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(lease): reject a duration no marker can carry (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1d9e9e7e43a1089c57d7c6f20d6a2268235a4745\"\u003e\u003ccode\u003e1d9e9e7\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1585dfef9355a5c77d4a9498cc34d3a98056fdb9\"\u003e\u003ccode\u003e1585dfe\u003c/code\u003e\u003c/a\u003e Release 3.32.5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.32.4...3.32.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.5.5 to 3.5.6\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.5.6 (2026-09-14)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect a race condition that could lead to garbage collection\nunintentionally being disabled. See \u003ccode\u003ePR 529 \u0026lt;https://github.com/python-greenlet/greenlet/pull/529\u0026gt;\u003c/code\u003e_ by Yurii.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/abfe740315a9926ff180c622cf02f122c07f9126\"\u003e\u003ccode\u003eabfe740\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e23e3e47df21bbc7a83219621ce4966d349f7d2b\"\u003e\u003ccode\u003ee23e3e4\u003c/code\u003e\u003c/a\u003e Change note for \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/8de830f6df6fefd533fedbe4bb0a2028bcf77372\"\u003e\u003ccode\u003e8de830f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/529\"\u003e#529\u003c/a\u003e from Georggi/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/72d7cacf4cf667f92786db306be095b6041bca5a\"\u003e\u003ccode\u003e72d7cac\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/530\"\u003e#530\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ac01b7d1a6b3a4d2477c17a1047af6d0056d69a7\"\u003e\u003ccode\u003eac01b7d\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/e18f5a6d2696c031d34cf4933dcdd6a8e37f6f85\"\u003e\u003ccode\u003ee18f5a6\u003c/code\u003e\u003c/a\u003e Simplify GCDisabledGuard constructor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6aaf3af698aa7789075a904e5bbb70e24df06553\"\u003e\u003ccode\u003e6aaf3af\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.6\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.5...3.5.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix docstring for read_size by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/700\"\u003emsgpack/msgpack-python#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eunpacker: fix silent datetime truncation with datetime=3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/701\"\u003emsgpack/msgpack-python#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erun test with debug build by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/702\"\u003emsgpack/msgpack-python#702\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: add reentrant guard to Unpacker.feed() by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/704\"\u003emsgpack/msgpack-python#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 6.0.3 to 7.0.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/705\"\u003emsgpack/msgpack-python#705\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/707\"\u003emsgpack/msgpack-python#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_unpack.py: add tests for ExtraData by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/708\"\u003emsgpack/msgpack-python#708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/709\"\u003emsgpack/msgpack-python#709\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime() precision for far-future datetimes by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in test and docs by \u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/719\"\u003emsgpack/msgpack-python#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in unpackb() ExtraData path for non-contiguous input by \u003ca href=\"https://github.com/ThomasWaldmann\"\u003e\u003ccode\u003e@​ThomasWaldmann\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/722\"\u003emsgpack/msgpack-python#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/721\"\u003emsgpack/msgpack-python#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 4.1.1 to 4.2.0 in the all-dependencies group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/724\"\u003emsgpack/msgpack-python#724\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert Packer's buf_size once by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: translate RecursionError to StackError in fallback Unpacker.skip() by \u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/727\"\u003emsgpack/msgpack-python#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate nanoseconds range when unpacking timestamps in the C extension by \u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid parallel execution of the recursion-limit nesting test on free-threaded builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/729\"\u003emsgpack/msgpack-python#729\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise OverflowError when use_single_float cannot represent a value by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.2 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/730\"\u003emsgpack/msgpack-python#730\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/710\"\u003emsgpack/msgpack-python#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/maxtaran2010\"\u003e\u003ccode\u003e@​maxtaran2010\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/712\"\u003emsgpack/msgpack-python#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hdimer\"\u003e\u003ccode\u003e@​hdimer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/726\"\u003emsgpack/msgpack-python#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chuenchen309\"\u003e\u003ccode\u003e@​chuenchen309\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/716\"\u003emsgpack/msgpack-python#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/728\"\u003emsgpack/msgpack-python#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.2\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-08-27\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix the \u003ccode\u003eread_size\u003c/code\u003e documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/700\"\u003e#700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silent truncation when unpacking an out-of-range timestamp with \u003ccode\u003etimestamp=3\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/701\"\u003e#701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent reentrant calls to \u003ccode\u003eUnpacker.feed()\u003c/code\u003e while unpacking. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/704\"\u003e#704\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove error handling and reporting in unpacking functions. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/707\"\u003e#707\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e precision for far-future datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/710\"\u003e#710\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typos in the documentation. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/712\"\u003e#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate the nanoseconds range when unpacking timestamps in the C extension. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a use-after-free in the \u003ccode\u003eunpackb()\u003c/code\u003e \u003ccode\u003eExtraData\u003c/code\u003e path for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/722\"\u003e#722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent a buffer overflow when converting \u003ccode\u003ePacker\u003c/code\u003e's \u003ccode\u003ebuf_size\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTranslate \u003ccode\u003eRecursionError\u003c/code\u003e to \u003ccode\u003eStackError\u003c/code\u003e in the fallback \u003ccode\u003eUnpacker.skip()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eOverflowError\u003c/code\u003e when \u003ccode\u003euse_single_float=True\u003c/code\u003e cannot represent a value. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/7381b318f51688f3f941df0b4c056d7a7a20c9d0\"\u003e\u003ccode\u003e7381b31\u003c/code\u003e\u003c/a\u003e release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ee1bd3c02d5494921653a0f7ffc264b8591de713\"\u003e\u003ccode\u003eee1bd3c\u003c/code\u003e\u003c/a\u003e release v1.2.2 (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/57d28a250c4904685f3a4f4135b301def517681e\"\u003e\u003ccode\u003e57d28a2\u003c/code\u003e\u003c/a\u003e Raise OverflowError when use_single_float cannot represent a value (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/d374a17e88f20c221760454e8829dc58ad5222a8\"\u003e\u003ccode\u003ed374a17\u003c/code\u003e\u003c/a\u003e Avoid parallel execution of the recursion-limit nesting test on free-threaded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/e94e1dc078547c58855c7cc60b6e54c44deb903d\"\u003e\u003ccode\u003ee94e1dc\u003c/code\u003e\u003c/a\u003e Validate nanoseconds range when unpacking timestamps in the C extension (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/2e4be090f6a42e1ad19526ca6f6ee67f3476389a\"\u003e\u003ccode\u003e2e4be09\u003c/code\u003e\u003c/a\u003e fix: translate RecursionError to StackError in fallback Unpacker.skip() (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/9f9bdae0773166e8ed50dfdd1ed13cc4296819ce\"\u003e\u003ccode\u003e9f9bdae\u003c/code\u003e\u003c/a\u003e Convert Packer's buf_size once (\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/809bfcda6d7186fbb34f6ea1b984a61344ba55d2\"\u003e\u003ccode\u003e809bfcd\u003c/code\u003e\u003c/a\u003e remove unused variable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/186d4dbc126b659eff1509c850300e207d8aaad5\"\u003e\u003ccode\u003e186d4db\u003c/code\u003e\u003c/a\u003e Bump pypa/cibuildwheel from 4.1.1 to 4.2.0(\u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/msgpack/msgpack-python/commit/ea6b84f5ee6d97ae2089f1eb025034a6847d1ccb\"\u003e\u003ccode\u003eea6b84f\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the all-dependencie...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.2.1...v1.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-api` from 0.0.34 to 0.0.35\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/di/pip-api/releases\"\u003epip-api's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.35\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTest against pip 24.2, 24.3, 24.3.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 25.0, 25.0.1, 25.1, 25.2, 25.3 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/237\"\u003e#237\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/242\"\u003e#242\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/244\"\u003e#244\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/250\"\u003e#250\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 26.0, 26.0.1, 26.1, 26.1.1, 26.1.2, 26.2, 26.2.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/261\"\u003e#261\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/265\"\u003e#265\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/282\"\u003e#282\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/284\"\u003e#284\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/289\"\u003e#289\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.14 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.15 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/di/pip-api/compare/0.0.34...0.0.35\"\u003ehttps://github.com/di/pip-api/compare/0.0.34...0.0.35\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/di/pip-api/blob/master/CHANGELOG\"\u003epip-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.35\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTest against pip 24.2, 24.3, 24.3.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 25.0, 25.0.1, 25.1, 25.2, 25.3 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/237\"\u003e#237\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/242\"\u003e#242\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/244\"\u003e#244\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/250\"\u003e#250\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTest against pip 26.0, 26.0.1, 26.1, 26.1.1, 26.1.2, 26.2, 26.2.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/261\"\u003e#261\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/265\"\u003e#265\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/282\"\u003e#282\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/284\"\u003e#284\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/289\"\u003e#289\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/di/pip-api/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.14 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.15 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/539f428087b9c43480c2ace803e0dd9467174928\"\u003e\u003ccode\u003e539f428\u003c/code\u003e\u003c/a\u003e Update CHANGELOG (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/8582df714ccb6182b1c79698bbace03971b22aee\"\u003e\u003ccode\u003e8582df7\u003c/code\u003e\u003c/a\u003e Prepare 0.0.35 release metadata (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/51d317bd761e687b17c6077f0d7f03db6387889d\"\u003e\u003ccode\u003e51d317b\u003c/code\u003e\u003c/a\u003e Add Python 3.15 prerelease support (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/1361fa5545660ecfd72d77471aacdeffa2c8a0eb\"\u003e\u003ccode\u003e1361fa5\u003c/code\u003e\u003c/a\u003e Add tox factor support for pip 26.2.1 (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/dce99b7d2ba199d75149a02fdd83c337f87d8e27\"\u003e\u003ccode\u003edce99b7\u003c/code\u003e\u003c/a\u003e Bump sigstore/gh-action-sigstore-python from 3.4.0 to 3.5.0 in the actions gr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/ba40af7696f69ddc378bdfe1ef2a4e9573bf99a5\"\u003e\u003ccode\u003eba40af7\u003c/code\u003e\u003c/a\u003e Add pip 26.2 to tox env matrix and move \u003ccode\u003elatest\u003c/code\u003e label (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/209ad72def160c3ce0ea70e4f1ffef89f155d6e9\"\u003e\u003ccode\u003e209ad72\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6 to 7 in the actions group (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/4684261ea5aeb4eb9553ac105db5b04e3fca6d8c\"\u003e\u003ccode\u003e4684261\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the actions group (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/286\"\u003e#286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/adcdf82fd1aa1456d35863ba890eae0e260ed6a0\"\u003e\u003ccode\u003eadcdf82\u003c/code\u003e\u003c/a\u003e Bump sigstore/gh-action-sigstore-python from 3.3.0 to 3.4.0 in the actions gr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/di/pip-api/commit/d2439839465f15cc61889b66e2505fdbe7ff559f\"\u003e\u003ccode\u003ed243983\u003c/code\u003e\u003c/a\u003e Add pip 26.1.2 to the tox/CI compatibility matrix (\u003ca href=\"https://redirect.github.com/di/pip-api/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/di/pip-api/compare/0.0.34...0.0.35\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `platformdirs` from 4.11.4 to 4.11.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/releases\"\u003eplatformdirs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.11.8\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: ignore relative XDG base directory paths by \u003ca href=\"https://github.com/lakshayxi\"\u003e\u003ccode\u003e@​lakshayxi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/540\"\u003etox-dev/platformdirs#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: return one user path for root under multipath by \u003ca href=\"https://github.com/darrenhuai\"\u003e\u003ccode\u003e@​darrenhuai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/538\"\u003etox-dev/platformdirs#538\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve literal percent signs in user-dirs paths by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/542\"\u003etox-dev/platformdirs#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: retain Homebrew site directories inside virtual environments by \u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/543\"\u003etox-dev/platformdirs#543\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lakshayxi\"\u003e\u003ccode\u003e@​lakshayxi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/540\"\u003etox-dev/platformdirs#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jackwalkerlabs\"\u003e\u003ccode\u003e@​jackwalkerlabs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/542\"\u003etox-dev/platformdirs#542\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.7...4.11.8\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.7...4.11.8\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e4.11.7\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.6...4.11.7\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.6...4.11.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e4.11.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: accept use_site_for_root in the bin functions by \u003ca href=\"https://github.com/darrenhuai\"\u003e\u003ccode\u003e@​darrenhuai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/537\"\u003etox-dev/platformdirs#537\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.5...4.11.6\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.5...4.11.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e4.11.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: fix the iterator order claim in api.rst by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/533\"\u003etox-dev/platformdirs#533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: return one site applications path for multipath by \u003ca href=\"https://github.com/tunglambk\"\u003e\u003ccode\u003e@​tunglambk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/532\"\u003etox-dev/platformdirs#532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: accept app arguments in the applications functions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/534\"\u003etox-dev/platformdirs#534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: keyword-only booleans on the applications functions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/535\"\u003etox-dev/platformdirs#535\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: accept app arguments in user_preference_dir by \u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/531\"\u003etox-dev/platformdirs#531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tunglambk\"\u003e\u003ccode\u003e@​tunglambk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/532\"\u003etox-dev/platformdirs#532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/platformdirs/pull/531\"\u003etox-dev/platformdirs#531\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/platformdirs/compare/4.11.4...4.11.5\"\u003ehttps://github.com/tox-dev/platformdirs/compare/4.11.4...4.11.5\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst\"\u003eplatformdirs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e4.11.10 (2026-09-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eWith \u003ccode\u003eensure_exists\u003c/code\u003e, the \u003ccode\u003esite_*_dir\u003c/code\u003e and \u003ccode\u003esite_*_path\u003c/code\u003e properties and the \u003ccode\u003eiter_*_dirs\u003c/code\u003e iterators only\ncreate the site directories they return or yield, instead of every entry in the site list - by :user:\u003ccode\u003edarrenhuai\u003c/code\u003e.\n:pr:\u003ccode\u003e550\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.11.9 (2026-09-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAccept \u003ccode\u003emultipath\u003c/code\u003e in :func:\u003ccode\u003e~platformdirs.site_cache_dir\u003c/code\u003e and :func:\u003ccode\u003e~platformdirs.site_cache_path\u003c/code\u003e. Without it,\nthe function API could not return the Homebrew cache prefix that :attr:\u003ccode\u003e~platformdirs.macos.MacOS.site_cache_dir\u003c/code\u003e adds\nunder \u003ccode\u003emultipath\u003c/code\u003e - by :user:\u003ccode\u003edarrenhuai\u003c/code\u003e. :pr:\u003ccode\u003e544\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eParse Unix \u003ccode\u003euser-dirs.dirs\u003c/code\u003e line by line like \u003ccode\u003exdg-user-dir\u003c/code\u003e. The INI parser raised on a repeated key or a line\nwithout \u003ccode\u003e=\u003c/code\u003e, and returned trailing comments and backslash escapes inside :func:\u003ccode\u003e~platformdirs.user_documents_dir\u003c/code\u003e\nand the other media directories. The last valid assignment now wins, and platformdirs unescapes the quoted value and\nignores text after the closing quote - by :user:\u003ccode\u003edarrenhuai\u003c/code\u003e. :pr:\u003ccode\u003e545\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRead \u003ccode\u003ePUBLIC\u003c/code\u003e before the home directory in :func:\u003ccode\u003e~platformdirs.user_publicshare_dir\u003c/code\u003e on Windows, so it no longer\nraises \u003ccode\u003eRuntimeError\u003c/code\u003e when \u003ccode\u003ePUBLIC\u003c/code\u003e is set and the home directory cannot be determined - by :user:\u003ccode\u003eemme1t\u003c/code\u003e.\n:pr:\u003ccode\u003e546\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eRuntimeError\u003c/code\u003e from :class:\u003ccode\u003e~platformdirs.android.Android\u003c/code\u003e directories when the app folder cannot be found,\ninstead of \u003ccode\u003eTypeError: expected str, bytes or os.PathLike object, not NoneType\u003c/code\u003e - by :user:\u003ccode\u003eStr0k\u003c/code\u003e. :pr:\u003ccode\u003e547\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e4.11.8 (2026-09-08)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eMake :func:\u003ccode\u003e~platformdirs.user_data_path\u003c/code\u003e, :func:\u003ccode\u003e~platformdirs.user_config_path\u003c/code\u003e,\n:func:\u003ccode\u003e~platformdirs.user_preference_path\u003c/code\u003e and :func:\u003ccode\u003e~platformdirs.user_applications_path\u003c/code\u003e return the first site\nentry when root is redirected by \u003ccode\u003euse_site_for_root\u003c/code\u003e under \u003ccode\u003emultipath\u003c/code\u003e, matching their \u003ccode\u003esite_*_path\u003c/code\u003e twins. They\npassed the whole joined list to :class:\u003ccode\u003e~pathlib.Path\u003c/code\u003e, giving one unusable path such as \u003ccode\u003e/xdg/a/foo:/xdg/b/foo\u003c/code\u003e -\nby :user:\u003ccode\u003edarrenhuai\u003c/code\u003e. :pr:\u003ccode\u003e538\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eIgnore relative paths in XDG Base Directory environment variables and use the existing platform fallback. Relative\nentries in \u003ccode\u003e$XDG_DATA_DIRS\u003c/code\u003e and \u003ccode\u003e$XDG_CONFIG_DIRS\u003c/code\u003e are skipped. :pr:\u003ccode\u003e540\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePreserve literal percent signs in Unix \u003ccode\u003euser-dirs.dirs\u003c/code\u003e paths, including \u003ccode\u003e100% complete\u003c/code\u003e, \u003ccode\u003e100%%\u003c/code\u003e and\n\u003ccode\u003e%(XDG_DESKTOP_DIR)s\u003c/...\n\n_Description has been truncated_","html_url":"https://github.com/wcmchenry3-stack/BC-Arcade/pull/2394","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wcmchenry3-stack%2FBC-Arcade/issues/2394","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2394/packages"}}]}