{"id":4304,"name":"google-cloud-datastore","ecosystem":"pip","repository_url":"https://github.com/googleapis/python-datastore","issues_count":29,"created_at":"2025-06-06T16:30:25.380Z","updated_at":"2025-06-06T16:30:25.380Z","purl":"pkg:pypi/google-cloud-datastore","metadata":{"id":2750774,"name":"google-cloud-datastore","ecosystem":"pypi","description":"Google Cloud Datastore API client library","homepage":"https://github.com/googleapis/python-datastore","licenses":"Apache 2.0","normalized_licenses":["Apache-2.0"],"repository_url":"https://github.com/googleapis/python-datastore","keywords_array":[],"namespace":null,"versions_count":80,"first_release_published_at":"2023-08-17T20:56:39.636Z","latest_release_published_at":"2025-04-15T01:05:19.000Z","latest_release_number":"2.21.0","last_synced_at":"2025-05-22T10:02:40.228Z","created_at":"2022-04-10T11:10:13.537Z","updated_at":"2025-05-22T10:08:28.556Z","registry_url":"https://pypi.org/project/google-cloud-datastore/","install_command":"pip install google-cloud-datastore --index-url https://pypi.org/simple","documentation_url":"https://google-cloud-datastore.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: Apache Software License","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Topic :: Internet","Topic :: Software Development :: Libraries :: Python Modules"],"normalized_name":"google-cloud-datastore"},"repo_metadata":{"id":37792148,"uuid":"238778459","full_name":"googleapis/python-datastore","owner":"googleapis","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-07T20:03:44.000Z","size":3187,"stargazers_count":85,"open_issues_count":13,"forks_count":44,"subscribers_count":53,"default_branch":"main","last_synced_at":"2025-05-15T09:07:19.456Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/googleapis.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-02-06T20:29:52.000Z","updated_at":"2025-04-15T00:59:13.000Z","dependencies_parsed_at":"2023-10-10T16:53:06.506Z","dependency_job_id":"2b5382af-06da-41e0-9e37-eab32ac585f2","html_url":"https://github.com/googleapis/python-datastore","commit_stats":{"total_commits":515,"total_committers":50,"mean_commits":10.3,"dds":0.7844660194174757,"last_synced_commit":"59ff85422ce9d0b3069557c0caf8d848e39123ae"},"previous_names":[],"tags_count":75,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googleapis","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":255684827,"owners_count":22270374,"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":"googleapis","name":"Google APIs","uuid":"16785467","kind":"organization","description":"Clients for Google APIs and tools that help produce them.","email":null,"website":"https://googleapis.github.io","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/16785467?v=4","repositories_count":781,"last_synced_at":"2023-04-09T04:55:29.167Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/googleapis","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-02T16:20:18.651Z","updated_at":"2023-04-09T04:55:29.452Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googleapis","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googleapis/repositories"},"tags":[{"name":"v2.21.0","sha":"1dafc68d897ec771fc3921124e1619c4fb6b34bf","kind":"commit","published_at":"2025-04-15T00:59:08.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.21.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.21.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.21.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.21.0/manifests"},{"name":"v2.20.2","sha":"337011ee1a6d4712160d25c35a061bef041fb94c","kind":"commit","published_at":"2024-12-12T18:48:37.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.20.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.20.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.20.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.20.2/manifests"},{"name":"v2.20.1","sha":"fe5e38c632c9c722443820560b14c39300001b12","kind":"commit","published_at":"2024-08-14T17:23:04.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.20.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.20.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.20.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.20.1/manifests"},{"name":"v2.20.0","sha":"66c5958a19c7ecb74378b118ee89e61c60f217ae","kind":"commit","published_at":"2024-08-07T21:46:19.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.20.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.20.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.20.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.20.0/manifests"},{"name":"v2.19.0","sha":"2740b68c88b1a58b569dbc2b118ec9a4a9f41000","kind":"commit","published_at":"2023-12-12T20:34:21.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.19.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.19.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.19.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.19.0/manifests"},{"name":"v2.18.0","sha":"997a434d33c07882d1cd598f518346ac0ec210b0","kind":"commit","published_at":"2023-09-06T00:07:06.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.18.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.18.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.18.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.18.0/manifests"},{"name":"v2.17.0","sha":"96ecddaf303c6d3841e6fe085a9e0018576ca3fe","kind":"commit","published_at":"2023-08-09T13:27:53.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.17.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.17.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.17.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.17.0/manifests"},{"name":"v2.16.1","sha":"c39eb2679e573eff672fdd7b234e663d6392588b","kind":"commit","published_at":"2023-07-05T14:56:33.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.16.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.16.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.16.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.16.1/manifests"},{"name":"v2.16.0","sha":"2bfb909651d95a836bfc8effb7e5ea9e30002099","kind":"commit","published_at":"2023-06-21T17:53:28.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.16.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.16.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.16.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.16.0/manifests"},{"name":"v2.15.2","sha":"df632088a53b0c6cb94dc35f3dff3cbdb89442b2","kind":"commit","published_at":"2023-05-09T16:48:16.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.15.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.15.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.15.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.15.2/manifests"},{"name":"v2.15.1","sha":"8036071069087d4938ab8998e450657b7e11b9a2","kind":"commit","published_at":"2023-03-27T14:47:44.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.15.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.15.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.15.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.15.1/manifests"},{"name":"v2.15.0","sha":"08fa0fc1f10a683067d2c0ffa08af2b3bfb15d58","kind":"commit","published_at":"2023-03-09T17:00:13.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.15.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.15.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.15.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.15.0/manifests"},{"name":"v2.14.0","sha":"47139485aec32f8465c63f64cb5791f0c1fb375e","kind":"commit","published_at":"2023-02-28T23:44:50.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.14.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.14.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.14.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.14.0/manifests"},{"name":"v2.13.2","sha":"828712a1ee43025926530796e8100deba4b4aa96","kind":"commit","published_at":"2023-01-23T20:37:38.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.13.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.13.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.13.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.13.2/manifests"},{"name":"v2.13.1","sha":"719a6c37a429b081789a254662d19ebf66e415bd","kind":"commit","published_at":"2023-01-23T15:38:03.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.13.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.13.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.13.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.13.1/manifests"},{"name":"v2.13.0","sha":"71637b64328548fe98ea218bf21c2143bf68c0e3","kind":"commit","published_at":"2023-01-18T00:22:20.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.13.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.13.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.13.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.13.0/manifests"},{"name":"v2.12.0","sha":"20024f7a183733ef63beaf831a625ab2323fe6a8","kind":"commit","published_at":"2023-01-10T17:18:46.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.12.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.12.0/manifests"},{"name":"v2.11.1","sha":"51147dd038abdecbd7000b7460594c15f483fff1","kind":"commit","published_at":"2023-01-04T21:22:42.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.11.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.11.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.11.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.11.1/manifests"},{"name":"v2.11.0","sha":"7f699c28ce291b9b13b1c1df675fa1ec2121f7fb","kind":"commit","published_at":"2022-12-01T00:49:30.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.11.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.11.0/manifests"},{"name":"v2.10.0","sha":"49f1376f64984605e14083e19ab3ddefa57ad999","kind":"commit","published_at":"2022-11-01T19:22:42.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.10.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.10.0/manifests"},{"name":"v2.9.0","sha":"d0373132623e135870508b07ddbd305977ddc9da","kind":"commit","published_at":"2022-10-18T20:52:06.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.9.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.9.0/manifests"},{"name":"v2.8.3","sha":"5566ac35bc9bfcb581fd771148a25001d10f5063","kind":"commit","published_at":"2022-10-11T16:26:47.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.8.3","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.8.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.3/manifests"},{"name":"v2.8.2","sha":"3e1df4905ab1bea62d4102b65c1fdcb66a78de2f","kind":"commit","published_at":"2022-10-04T01:11:31.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.8.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.2/manifests"},{"name":"v2.8.1","sha":"3c73cf9ad24a9a9df759c072262112cfea83d2b2","kind":"commit","published_at":"2022-08-16T18:08:11.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.8.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.1/manifests"},{"name":"v2.8.0","sha":"488cea06dc6c5fa3419ec660ed2ee852265fb523","kind":"commit","published_at":"2022-07-15T19:46:40.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.8.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.8.0/manifests"},{"name":"v2.7.2","sha":"38d3025565ce27c716531e7ba026746f70f37156","kind":"commit","published_at":"2022-07-10T17:21:08.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.7.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.7.2/manifests"},{"name":"v2.7.1","sha":"5958cac5bde91914a4eda5ab64b57c71cb23ec99","kind":"commit","published_at":"2022-06-16T19:42:32.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.7.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.7.1/manifests"},{"name":"v2.7.0","sha":"ff2094308066c7669d5694890f19ef772dfc8778","kind":"commit","published_at":"2022-06-09T18:05:05.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.7.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.7.0/manifests"},{"name":"v1.15.5","sha":"8faf309ee44f9a756a69471dbe0a6c9489577d12","kind":"commit","published_at":"2022-06-09T16:27:24.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.15.5","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.15.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.5/manifests"},{"name":"v2.6.2","sha":"db044b1dd42ec2ce36a204377a96f85cc8bbd8e4","kind":"commit","published_at":"2022-06-07T11:15:20.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.6.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.6.2/manifests"},{"name":"v2.6.1","sha":"d32480ef00ca6be6e84ec2f3a2f74e3dd5979eef","kind":"commit","published_at":"2022-05-27T16:26:46.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.6.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.6.1/manifests"},{"name":"v2.6.0","sha":"b9e9cec93b5da9e1f09f6223e7a46b4042316347","kind":"commit","published_at":"2022-05-19T12:51:28.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.6.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.6.0/manifests"},{"name":"v1.15.4","sha":"c915ed69aec2b55efa261cacfd43551785f78138","kind":"commit","published_at":"2022-04-04T19:45:09.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.15.4","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.15.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.4/manifests"},{"name":"v2.5.1","sha":"a52f30cef85aa11131f633bcf0c20d967ce6bb46","kind":"commit","published_at":"2022-03-07T16:14:00.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.5.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.5.1/manifests"},{"name":"v2.5.0","sha":"53a214ea7f221d34d008f67a3d1b19395dcdcf6c","kind":"commit","published_at":"2022-02-28T22:28:18.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.5.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.5.0/manifests"},{"name":"v2.4.0","sha":"6a7c857a363b42f23b8dea37b351d6263b32412c","kind":"commit","published_at":"2021-11-09T16:05:21.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.4.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.4.0/manifests"},{"name":"v2.3.0","sha":"7a0070a53b29dc07f61ed76c926cd518fb79685e","kind":"commit","published_at":"2021-10-18T19:19:43.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.3.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.3.0/manifests"},{"name":"v2.2.0","sha":"31c354dcd3a0a48be1ffa2596fee45ff3fcc81d4","kind":"commit","published_at":"2021-10-08T16:18:14.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.2.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.2.0/manifests"},{"name":"v2.1.6","sha":"b077f49ed9b8e4d7326a881eaef9a548c0dcd9c5","kind":"commit","published_at":"2021-07-27T16:16:24.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.6","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.6/manifests"},{"name":"v2.1.5","sha":"b62354ea892d91be19bad4cdba8f6e96993c7b03","kind":"commit","published_at":"2021-07-21T22:41:17.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.5","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.5/manifests"},{"name":"v2.1.4","sha":"30008c9cbc6053cc408e56ca3a771f8a6dbab6fd","kind":"commit","published_at":"2021-07-09T18:46:23.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.4","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.4/manifests"},{"name":"v2.1.3","sha":"4f7bee21c2505b9e6b133546e79ead0b6aa4286d","kind":"commit","published_at":"2021-05-25T17:08:10.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.3","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.3/manifests"},{"name":"v2.1.2","sha":"155fb72b5d1f5d097053151a878eb9e5163d57f4","kind":"commit","published_at":"2021-05-03T16:40:06.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.2/manifests"},{"name":"v2.1.1","sha":"b841b2afbe8b351b926dedaa75ec78fca31250e0","kind":"commit","published_at":"2021-04-20T21:14:42.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.1/manifests"},{"name":"v2.1.0","sha":"200d8921d2f670c6581ae42dce715f12573d16d9","kind":"commit","published_at":"2020-12-05T00:07:08.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.1.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.1.0/manifests"},{"name":"v2.0.1","sha":"eedf1231b1685808b9d8f8bf4733889cc724506c","kind":"commit","published_at":"2020-11-16T18:22:56.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.0.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.0.1/manifests"},{"name":"v2.0.0","sha":"556c8f02b9a222b37c49344f9a6fb9fc26b63bb0","kind":"commit","published_at":"2020-11-10T18:33:30.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.0.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.0.0/manifests"},{"name":"v2.0.0-dev1","sha":"dd6c0ee43fe6763528374a3494de0124de0ee652","kind":"commit","published_at":"2020-10-30T22:57:42.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v2.0.0-dev1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v2.0.0-dev1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.0.0-dev1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v2.0.0-dev1/manifests"},{"name":"v1.15.3","sha":"b6bc2f7998dc52618a82c86782a709fcbb67a8cf","kind":"commit","published_at":"2020-10-07T21:25:00.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.15.3","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.15.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.3/manifests"},{"name":"v1.15.2","sha":"1b1690748e270229636b167698d1cbffb1729f49","kind":"commit","published_at":"2020-10-06T19:25:53.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.15.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.15.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.2/manifests"},{"name":"v1.15.1","sha":"ddbbb03fc42bf53e698b3869a660a9938b3339e8","kind":"commit","published_at":"2020-09-23T15:27:21.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.15.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.15.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.1/manifests"},{"name":"v1.15.0","sha":"c947ad76d6619ae31767a64cb01b66073708d5db","kind":"commit","published_at":"2020-08-14T18:16:07.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.15.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.15.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.15.0/manifests"},{"name":"v1.14.0","sha":"f6290c02c46c83616a26aaa9babc43c3c6bed2f2","kind":"commit","published_at":"2020-08-05T21:05:13.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.14.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.14.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.14.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.14.0/manifests"},{"name":"v1.13.2","sha":"677bb7bc9d4e9157266c35db5194422138970dfe","kind":"commit","published_at":"2020-07-17T22:24:40.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.13.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.13.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.13.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.13.2/manifests"},{"name":"v1.13.1","sha":"592c7aa636990533a9c02f73a413de44b71dcc98","kind":"commit","published_at":"2020-07-14T00:44:59.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.13.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.13.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.13.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.13.1/manifests"},{"name":"v1.13.0","sha":"0a5e07c0394709a4a4e79d937a281bec824415c3","kind":"commit","published_at":"2020-07-09T20:55:14.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.13.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.13.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.13.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.13.0/manifests"},{"name":"v1.12.0","sha":"9a3d3148581fede2e4cc341ff09ee327248df0e7","kind":"commit","published_at":"2020-04-07T21:27:08.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.12.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.12.0/manifests"},{"name":"v1.11.0","sha":"96fd5b812c856b5d0d71d5cfe8e72a6e8795858c","kind":"commit","published_at":"2020-02-27T22:08:07.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.11.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.11.0/manifests"},{"name":"v1.10.0","sha":"f66a961b1599a8bbbf1716810c2d14e6a43591e8","kind":"commit","published_at":"2019-10-15T17:37:40.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.10.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.10.0/manifests"},{"name":"v1.9.0","sha":"baa4d68111abf9d817d989adc1aeb347a928202d","kind":"commit","published_at":"2019-07-26T17:17:15.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.9.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.9.0/manifests"},{"name":"v1.8.0","sha":"8254abef895159513c7e9e7087c6f49b56261bba","kind":"commit","published_at":"2019-05-17T16:59:14.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.8.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.8.0/manifests"},{"name":"v1.7.3","sha":"5dea117547df1b9abc914f356aecbc8aa3239d30","kind":"commit","published_at":"2018-12-18T20:54:20.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.7.3","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.7.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.3/manifests"},{"name":"v1.7.2","sha":"0901a9ae5507c6b23737d3c7bbcec8993ac78402","kind":"commit","published_at":"2018-12-10T21:47:45.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.7.2","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.2/manifests"},{"name":"v1.7.1","sha":"6c38a4b8b92895908ffddcc90d3337ea6ade7757","kind":"commit","published_at":"2018-10-29T18:21:19.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.7.1","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.1/manifests"},{"name":"v1.7.0","sha":"265d19d2c75d51a2feb5a9e14e91e5548d1f572f","kind":"tag","published_at":"2018-07-26T18:18:11.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.7.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.7.0/manifests"},{"name":"v1.6.0","sha":"2b7d459445b40e6c51bd2ecd23e1f01e4c3263a2","kind":"commit","published_at":"2018-02-28T17:03:26.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.6.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.6.0/manifests"},{"name":"v1.5.0","sha":"26df9cd22bfa832ffb73c81f6b10ec5033bcd710","kind":"commit","published_at":"2018-02-14T22:51:00.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.5.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.5.0/manifests"},{"name":"v1.4.0","sha":"cdf3bbaffecae52c1a2450d1007e93674d6f9cd3","kind":"commit","published_at":"2017-10-31T21:28:55.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.4.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.4.0/manifests"},{"name":"v1.3.0","sha":"239f23c13779a5adb1493afc3217df797de2dd7d","kind":"commit","published_at":"2017-08-24T21:28:31.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.3.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"625a66b5e44f5099a72c1de9ca7df8e0ceef638d","kind":"commit","published_at":"2017-08-04T23:45:43.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.2.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.2.0/manifests"},{"name":"v1.1.0","sha":"5c668be3a8dcc4caf759df49a9e6ae664558c1f1","kind":"tag","published_at":"2017-06-26T22:33:57.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.1.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.1.0/manifests"},{"name":"v1.0.0","sha":"5f26fb5870560b34c87ef04868b72c58e3ba2fdd","kind":"commit","published_at":"2017-03-30T21:45:10.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v1.0.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v1.0.0/manifests"},{"name":"v0.23.0","sha":"79b3b541a331c04bfc89a49d3f3cd2040b34d833","kind":"commit","published_at":"2017-02-24T22:45:56.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v0.23.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v0.23.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v0.23.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v0.23.0/manifests"},{"name":"v0.22.0","sha":"dfda43276d69f05bd54003a725e80ed55044f8b8","kind":"commit","published_at":"2016-12-10T17:26:47.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v0.22.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v0.22.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v0.22.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v0.22.0/manifests"},{"name":"v0.21.0","sha":"f583388bae8a085de8f2ffa9064000c2012aa888","kind":"commit","published_at":"2016-11-14T22:35:45.000Z","download_url":"https://codeload.github.com/googleapis/python-datastore/tar.gz/v0.21.0","html_url":"https://github.com/googleapis/python-datastore/releases/tag/v0.21.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v0.21.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Fpython-datastore/tags/v0.21.0/manifests"}]},"repo_metadata_updated_at":"2025-05-22T10:08:28.555Z","dependent_packages_count":36,"downloads":7289183,"downloads_period":"last-month","dependent_repos_count":2610,"rankings":{"downloads":0.17106973955777707,"dependent_repos_count":0.20772754089158646,"dependent_packages_count":0.4595984862082266,"stargazers_count":8.223988207529157,"forks_count":6.216612138331986,"docker_downloads_count":0.7079537882591935,"average":2.6644916501296545},"purl":"pkg:pypi/google-cloud-datastore","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/google-cloud-datastore","docker_dependents_count":119,"docker_downloads_count":2554707,"usage_url":"https://repos.ecosyste.ms/usage/pypi/google-cloud-datastore","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/google-cloud-datastore/dependencies","status":null,"funding_links":[],"critical":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/google-cloud-datastore/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/google-cloud-datastore/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/google-cloud-datastore/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/google-cloud-datastore/related_packages","maintainers":[{"uuid":"gcloudpypi","login":"gcloudpypi","name":null,"email":null,"url":null,"packages_count":352,"html_url":"https://pypi.org/user/gcloudpypi/","role":null,"created_at":"2022-12-01T01:16:18.211Z","updated_at":"2022-12-01T01:16:18.211Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/gcloudpypi/packages"},{"uuid":"google_opensource","login":"google_opensource","name":null,"email":null,"url":null,"packages_count":434,"html_url":"https://pypi.org/user/google_opensource/","role":null,"created_at":"2022-12-01T01:16:18.222Z","updated_at":"2022-12-01T01:16:18.222Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/google_opensource/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690329,"maintainers_count":292761,"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":15,"unique_repositories_count_past_30_days":1,"recent_issues":[{"uuid":"4475721777","node_id":"PR_kwDOSbTTLM7c-24h","number":6,"state":"open","title":"Bump the production-dependencies group with 22 updates","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-05-19T08:28:06.000Z","updated_at":"2026-05-19T08:28:07.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":22,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.80.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"23.0.0","new_version":"26.0.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"pika","old_version":"1.3.2","new_version":"1.4.0","repository_url":"https://github.com/pika/pika"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"marshmallow","old_version":"3.26.2","new_version":"4.3.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"redis","old_version":"7.1.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.24","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.38.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.22.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"6.2.2","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 22 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [google-cloud-datastore](https://github.com/googleapis/google-cloud-python) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.80.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `23.0.0` | `26.0.0` |\n| [pika](https://github.com/pika/pika) | `1.3.2` | `1.4.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.2` | `4.3.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.10.1` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [redis](https://github.com/redis/redis-py) | `7.1.0` | `7.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.24` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/google-cloud-python) | `2.29.0` | `2.38.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.22.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `4.1.1` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.2` | `7.1.3` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n\nUpdates `flask` from 3.1.1 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\u003c/code\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/pallets-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-os-login: v2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-os-login-v2.20.0...google-cloud-os-login-v2.21.0\"\u003ev2.21.0\u003c/a\u003e (2026-05-06)\u003c/h2\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/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-documentai-v2.21.0\"\u003e2.21.0\u003c/a\u003e (2023-12-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for python 3.12 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce compatibility with native namespace packages (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire proto-plus \u0026gt;= 1.22.3 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eretry_async\u003c/code\u003e instead of \u003ccode\u003eretry\u003c/code\u003e in async client (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\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/googleapis/google-cloud-python/commit/c60ded47847b04b2536f19c1610b5592b7952d6a\"\u003e\u003ccode\u003ec60ded4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T181058Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15005\"\u003e#15005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c0e3e9d221c3b8cd6d99503fadbb8e643db1e325\"\u003e\u003ccode\u003ec0e3e9d\u003c/code\u003e\u003c/a\u003e chore: disable treat warnings as errors (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15008\"\u003e#15008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45d4cee9e0e48a209b2d9292be29a15125548458\"\u003e\u003ccode\u003e45d4cee\u003c/code\u003e\u003c/a\u003e docs(samples): Update BigQuery Storage Arrow samples batching logic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14961\"\u003e#14961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45149baca6064be265db1b653abb405c298a2b41\"\u003e\u003ccode\u003e45149ba\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T162506Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15001\"\u003e#15001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d58a9ba338df3df1afca11e155fe449c32631179\"\u003e\u003ccode\u003ed58a9ba\u003c/code\u003e\u003c/a\u003e test: Add 'cryptography' 'cachetools' to test deps for bigquery-storage (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14999\"\u003e#14999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/10289465a87988b9bf35a85893f26ea372ad717b\"\u003e\u003ccode\u003e1028946\u003c/code\u003e\u003c/a\u003e feat: add v1 api for google-cloud-maintenance-api (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14998\"\u003e#14998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/b3cb4de3ce50c3ec55af2b132d756252a32641f3\"\u003e\u003ccode\u003eb3cb4de\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20260107T084051Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14995\"\u003e#14995\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17cc12897e6afdf3f3131531c50a8226a3f57c0f\"\u003e\u003ccode\u003e17cc128\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20251231T091651Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14991\"\u003e#14991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c353aa5bcc937ef9399c8efc90492dadbcf01aa2\"\u003e\u003ccode\u003ec353aa5\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251219T024955Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14985\"\u003e#14985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f38453832a2bb0226c389c30df13d072d1642377\"\u003e\u003ccode\u003ef384538\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251217T215552Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14980\"\u003e#14980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-iam-v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.80.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.80.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.80.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglimmering\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[ssl] Implement TLS private key signer in Python. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41701\"\u003e#41701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Private Key Offload Implementation. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41606\"\u003e#41606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix max sockaddr struct size on OpenBSD. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40454\"\u003e#40454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41432\"\u003e#41432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41484\"\u003e#41484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41324\"\u003e#41324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41502\"\u003e#41502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RR and WRR] enable change to connect from a random index. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41472\"\u003e#41472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement gRFC A101. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41051\"\u003e#41051\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C++] Add SNI override option to C++ channel credentials options API. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41460\"\u003e#41460\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C# tools] Option to append Async to server side method names \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39010\"\u003e#39010\u003c/a\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39797\"\u003e#39797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41357\"\u003e#41357\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Disable php infinite recursion check for callback from Core to PHP. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41835\"\u003e#41835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40337\"\u003e#40337\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Fix \u003ccode\u003eGRPC_TRACE\u003c/code\u003e not working when absl log initialized in cython. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41455\"\u003e#41455\u003c/a\u003e)\u0026quot;. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41769\"\u003e#41769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41532\"\u003e#41532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Docs: correct \u003ccode\u003egrpc.Compression\u003c/code\u003e references. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41705\"\u003e#41705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40226\"\u003e#40226\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/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1\"\u003e\u003ccode\u003ef5e2d6e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41857\"\u003e#41857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b\"\u003e\u003ccode\u003e938cfec\u003c/code\u003e\u003c/a\u003e [subchannel connection scaling] fix when we reset backoff (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41935\"\u003e#41935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c\"\u003e\u003ccode\u003e91778be\u003c/code\u003e\u003c/a\u003e [Backport][v1.80.x][Python] New \u003ccode\u003e_create\u003c/code\u003e method for aio.Metadata (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41888\"\u003e#41888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0\"\u003e\u003ccode\u003ef10b9f2\u003c/code\u003e\u003c/a\u003e [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656\"\u003e\u003ccode\u003ebe4c1c5\u003c/code\u003e\u003c/a\u003e [subchannel] fix crash in connection scaling code (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41853\"\u003e#41853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427\"\u003e\u003ccode\u003ea71df73\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41844\"\u003e#41844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a\"\u003e\u003ccode\u003e3ca09e4\u003c/code\u003e\u003c/a\u003e [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d\"\u003e\u003ccode\u003e260c6fd\u003c/code\u003e\u003c/a\u003e [PHP] Disable php infinite recursion check for callback from Core to PHP (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41\"\u003e#41\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b\"\u003e\u003ccode\u003e50957c5\u003c/code\u003e\u003c/a\u003e [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999\"\u003e\u003ccode\u003ee1e1d0a\u003c/code\u003e\u003c/a\u003e [Bzlmod] Turn off bzlmod for PSM python tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41810\"\u003e#41810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.80.0\"\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.0.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\u003e26.0.0\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEventlet worker removed\u003c/strong\u003e: The \u003ccode\u003eeventlet\u003c/code\u003e worker class has been dropped. Migrate to \u003ccode\u003egevent\u003c/code\u003e, \u003ccode\u003egthread\u003c/code\u003e, or \u003ccode\u003etornado\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Compatibility Suite\u003c/strong\u003e: New end-to-end compatibility test harness covering Starlette, FastAPI, Litestar, Quart, Sanic, and BlackSheep. Current grid passes 438/444 tests (98%).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Test Suite Expansion\u003c/strong\u003e: 134 additional ASGI unit tests covering protocol semantics, lifespan, websockets, and chunked framing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 Request-Target Validation\u003c/strong\u003e (RFC 9112 sections 3.2.3, 3.2.4):\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003eauthority-form\u003c/code\u003e request-target outside \u003ccode\u003eCONNECT\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003easterisk-form\u003c/code\u003e request-target outside \u003ccode\u003eOPTIONS\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003erelative-reference\u003c/code\u003e request-targets\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHeader Field Hardening\u003c/strong\u003e (RFC 9110):\n\u003cul\u003e\n\u003cli\u003eReject control characters in header field-value (section 5.5)\u003c/li\u003e\n\u003cli\u003eReject forbidden trailer field-names (section 6.5.1)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eContent-Length\u003c/code\u003e list form (RFC 9112 section 6.3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRequest Smuggling Hardening\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eTighten keepalive gate and scope \u003ccode\u003efinish_body\u003c/code\u003e byte cap\u003c/li\u003e\n\u003cli\u003eKeep \u003ccode\u003e_body_receiver\u003c/code\u003e alive across the keepalive smuggling gate so pipelined requests cannot re-enter a closed body\u003c/li\u003e\n\u003cli\u003eAddress parser/protocol findings from a six-point WSGI/ASGI audit\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePROXY Protocol (ASGI)\u003c/strong\u003e: Enforce \u003ccode\u003eproxy_allow_ips\u003c/code\u003e and tighten v1/v2 parsing in the ASGI callback parser.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConnection Draining\u003c/strong\u003e: Drain the connection on close per RFC 9112 section 9.6 to prevent reset-on-close truncation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBody Framing on HEAD/204/304\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eKeep \u003ccode\u003eContent-Length\u003c/code\u003e on HEAD and 304 responses (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop body framing on HEAD/204/304 even when the framework set it\u003c/li\u003e\n\u003cli\u003eWarn once when an ASGI app emits a body for a no-body response\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 ASGI\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e_handle_stream_ended\u003c/code\u003e to set \u003ccode\u003e_body_complete\u003c/code\u003e in the async HTTP/2 handler so request bodies finalize correctly on stream end\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInvalidChunkExtension\u003c/code\u003e mapping and fast-parser support in ASGI tests (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3565\"\u003e#3565\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 100-Continue\u003c/strong\u003e: Stop adding \u003ccode\u003eTransfer-Encoding: chunked\u003c/code\u003e to 100-Continue interim responses.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebSocket Close Handshake\u003c/strong\u003e (RFC 6455):\n\u003cul\u003e\n\u003cli\u003eComply with the close handshake state machine\u003c/li\u003e\n\u003cli\u003eClose the transport after the close handshake completes\u003c/li\u003e\n\u003cli\u003eFix binary send when the \u003ccode\u003etext\u003c/code\u003e key is \u003ccode\u003eNone\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEarly Hints\u003c/strong\u003e: Validate headers in the \u003ccode\u003eearly_hints\u003c/code\u003e callback to match \u003ccode\u003eprocess_headers\u003c/code\u003e; pass only the header name to \u003ccode\u003eInvalidHeader\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3588\"\u003e#3588\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Fixes\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix ASGI disconnect handling for Django-style apps\u003c/li\u003e\n\u003cli\u003eFix Litestar request handling (use raw ASGI receive for body/headers)\u003c/li\u003e\n\u003cli\u003eFix Litestar HTTP endpoints for compatibility tests\u003c/li\u003e\n\u003cli\u003eFix Quart headers endpoint to normalize keys to lowercase\u003c/li\u003e\n\u003cli\u003eFix Quart WebSocket close test app (missing \u003ccode\u003eaccept()\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix duplicate \u003ccode\u003eTransfer-Encoding\u003c/code\u003e header for BlackSheep streaming\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/benoitc/gunicorn/commit/5d819cf36040f6cc6175fcc804d703fb899509dd\"\u003e\u003ccode\u003e5d819cf\u003c/code\u003e\u003c/a\u003e release: 26.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/b45c70df105f7d5dcbc5abfb732804d6464edc21\"\u003e\u003ccode\u003eb45c70d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3611\"\u003e#3611\u003c/a\u003e from zc-mattcen/docs-typo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/99c8d48acf453deb5c49fe12e195dbc00d888d1e\"\u003e\u003ccode\u003e99c8d48\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3623\"\u003e#3623\u003c/a\u003e from benoitc/chore/drop-eventlet-add-h2-uvloop-test-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5a655af50f20e005dd9e32e6078dc82fa45f3d4b\"\u003e\u003ccode\u003e5a655af\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3622\"\u003e#3622\u003c/a\u003e from benoitc/test/docker-port-and-ipv4-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/201df19a8011c0a1d6a0e75ebe22e89d48eb935e\"\u003e\u003ccode\u003e201df19\u003c/code\u003e\u003c/a\u003e chore: remove eventlet worker; add h2 and uvloop to test deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/f4ac8e1f1bf1d365e77f41915da55bec31873f84\"\u003e\u003ccode\u003ef4ac8e1\u003c/code\u003e\u003c/a\u003e test: pass action name to dirty client and stabilize after TTOU spam\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/54d38afddf1f0db0c15b5f4ff63f3c7bfad96961\"\u003e\u003ccode\u003e54d38af\u003c/code\u003e\u003c/a\u003e test: unblock docker fixtures on macOS hosts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/68843c8893dd938456f0a2da62085ab5776f8871\"\u003e\u003ccode\u003e68843c8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e from benoitc/fix/asgi-preserve-content-length-on-hea...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/31f2618f733cc0c78690df63f4e344aaf3f56b20\"\u003e\u003ccode\u003e31f2618\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3620\"\u003e#3620\u003c/a\u003e from benoitc/fix/asgi-proxy-protocol-trust-and-parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/41ec7527dbd8a9e52728477700707ad40e41d9dc\"\u003e\u003ccode\u003e41ec752\u003c/code\u003e\u003c/a\u003e fix: keep Content-Length on HEAD and 304 responses\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...26.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pika` from 1.3.2 to 1.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pika/pika/releases\"\u003epika's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/pika/1.4.0/\"\u003ehttps://pypi.org/project/pika/1.4.0/\u003c/a\u003e | \u003ca href=\"https://github.com/pika/pika/milestone/23?closed=1\"\u003eGitHub milestone\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add python3.10 support and make code python3.7+ by \u003ca href=\"https://github.com/vinitkumar\"\u003e\u003ccode\u003e@​vinitkumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1351\"\u003epika/pika#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in example docstring by \u003ca href=\"https://github.com/kinoute\"\u003e\u003ccode\u003e@​kinoute\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1396\"\u003epika/pika#1396\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing pika v1.0.0 breaking change (order of parameters) for the `cha… by \u003ca href=\"https://github.com/mprinc\"\u003e\u003ccode\u003e@​mprinc\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1393\"\u003epika/pika#1393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3.11 to various places by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1399\"\u003epika/pika#1399\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation improvements by \u003ca href=\"https://github.com/hcmturner\"\u003e\u003ccode\u003e@​hcmturner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1403\"\u003epika/pika#1403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/khadkarajesh\"\u003e\u003ccode\u003e@​khadkarajesh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1404\"\u003epika/pika#1404\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate example to use python3 syntax by \u003ca href=\"https://github.com/AleksaC\"\u003e\u003ccode\u003e@​AleksaC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1408\"\u003epika/pika#1408\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix exchange type enum type by \u003ca href=\"https://github.com/liortct\"\u003e\u003ccode\u003e@​liortct\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1410\"\u003epika/pika#1410\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd more connections to the adapters by \u003ca href=\"https://github.com/dgoeries\"\u003e\u003ccode\u003e@​dgoeries\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1405\"\u003epika/pika#1405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/uwe\"\u003e\u003ccode\u003e@​uwe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1414\"\u003epika/pika#1414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFeature \u003ca href=\"https://redirect.github.com/pika/pika/issues/1363\"\u003e#1363\u003c/a\u003e -- Bump examples python version to 3 by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1416\"\u003epika/pika#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAttempt to re-enable GeventConnection on Windows by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1417\"\u003epika/pika#1417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd examples of using client_properties to URLParameters and ConnectionParameters by \u003ca href=\"https://github.com/johanrhodin\"\u003e\u003ccode\u003e@​johanrhodin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1436\"\u003epika/pika#1436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMisc Windows CI updates by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1438\"\u003epika/pika#1438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse sys.platform instead of platform.system() by \u003ca href=\"https://github.com/cvijdea-bd\"\u003e\u003ccode\u003e@​cvijdea-bd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1467\"\u003epika/pika#1467\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eList Python 3.12 as supported by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1474\"\u003epika/pika#1474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShrink the compatibility module and remove Python \u0026lt;3.7 support by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1441\"\u003epika/pika#1441\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eexample: Remove unnecessary guard by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1435\"\u003epika/pika#1435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDifferentiate release types by \u003ccode\u003egithub.event.release.prerelease\u003c/code\u003e by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1477\"\u003epika/pika#1477\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebasic_consumer_threaded\u003c/code\u003e example by \u003ca href=\"https://github.com/leogallot\"\u003e\u003ccode\u003e@​leogallot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1507\"\u003epika/pika#1507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd description for the example blocking_consume_recover_multiple_hosts by \u003ca href=\"https://github.com/federicsp\"\u003e\u003ccode\u003e@​federicsp\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1512\"\u003epika/pika#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix tests with Python 3.14, except RuntimeError from asyncio.get_event_loop by \u003ca href=\"https://github.com/hroncok\"\u003e\u003ccode\u003e@​hroncok\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1524\"\u003epika/pika#1524\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ConnectionParameters doc by \u003ca href=\"https://github.com/ryoung9550\"\u003e\u003ccode\u003e@​ryoung9550\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1494\"\u003epika/pika#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate versions by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1514\"\u003epika/pika#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003especify your own consumer_tag when using consume() method of BlockingChannel by \u003ca href=\"https://github.com/ivan-eguidazu\"\u003e\u003ccode\u003e@​ivan-eguidazu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1485\"\u003epika/pika#1485\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremoval of pika.compat.dictkeys() by \u003ca href=\"https://github.com/a-detiste\"\u003e\u003ccode\u003e@​a-detiste\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1492\"\u003epika/pika#1492\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd all public APIs to \u003ccode\u003e__all__\u003c/code\u003e by \u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1476\"\u003epika/pika#1476\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert utcnow() and utcfromtimestamp() by \u003ca href=\"https://github.com/mh21\"\u003e\u003ccode\u003e@​mh21\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1484\"\u003epika/pika#1484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Issue # 1530: advertise exchange_exchange_bindings  by \u003ca href=\"https://github.com/kenliao94\"\u003e\u003ccode\u003e@​kenliao94\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1540\"\u003epika/pika#1540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eJpaluska/add threadsafe publisher example by \u003ca href=\"https://github.com/jpaluska\"\u003e\u003ccode\u003e@​jpaluska\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1546\"\u003epika/pika#1546\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd python 3.14 to CI and drop 3.9 by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1549\"\u003epika/pika#1549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception by \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1545\"\u003epika/pika#1545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1552\"\u003epika/pika#1552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eruff\u003c/code\u003e lint check to CI (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003eGH-1371\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1551\"\u003epika/pika#1551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003epika/pika#1553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) by \u003ca href=\"https://github.com/suchitd\"\u003e\u003ccode\u003e@​suchitd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003epika/pika#1555\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003epika/pika#1554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement tests compatibility patch for RabbitMQ 4.3  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1548\"\u003epika/pika#1548\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1557\"\u003epika/pika#1557\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to pytest by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1550\"\u003epika/pika#1550\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix asyncio.get_event_loop() deprecation in _AsyncioIOServicesAdapter by \u003ca href=\"https://github.com/geomarceau\"\u003e\u003ccode\u003e@​geomarceau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1544\"\u003epika/pika#1544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003epika/pika#1561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003epika/pika#1556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLegacy file fixes by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003epika/pika#1562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003epika/pika#1560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003epika/pika#1566\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/pika/pika/blob/main/CHANGELOG.md\"\u003epika's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/pika/pika/tree/1.4.0\"\u003e1.4.0\u003c/a\u003e (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pika/pika/compare/1.4.0b0...1.4.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImplemented enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce yapf/google formatting in CI \u003ca href=\"https://redirect.github.com/pika/pika/issues/1558\"\u003e#1558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Hatch dev environment and scripts \u003ca href=\"https://redirect.github.com/pika/pika/pull/1579\"\u003e#1579\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003e#1561\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eClosed issues:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hatch scripts to standardize developer commands \u003ca href=\"https://redirect.github.com/pika/pika/issues/1578\"\u003e#1578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix outdated and broken documentation across the project \u003ca href=\"https://redirect.github.com/pika/pika/issues/1568\"\u003e#1568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate Codecov default branch and badge \u003ca href=\"https://redirect.github.com/pika/pika/issues/1563\"\u003e#1563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub actions workflows and test code need updates for RabbitMQ 4.3 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1547\"\u003e#1547\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edatetime.datetime.utcfromtimestamp() is deprecated \u003ca href=\"https://redirect.github.com/pika/pika/issues/1539\"\u003e#1539\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eURLParameters这个类有bug \u003ca href=\"https://redirect.github.com/pika/pika/issues/1533\"\u003e#1533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCustom transport \u003ca href=\"https://redirect.github.com/pika/pika/issues/1532\"\u003e#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ex-delay value is being returned in the header as a UINT64 and not a SINT16 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1531\"\u003e#1531\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePika should advertise the \u003ccode\u003eexchange_exchange_bindings\u003c/code\u003e client capability \u003ca href=\"https://redirect.github.com/pika/pika/issues/1530\"\u003e#1530\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMissing type annotations \u003ca href=\"https://redirect.github.com/pika/pika/issues/1523\"\u003e#1523\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no info about return type of queue_declare() method of pika.channel \u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGetting the user who sent the message \u003ca href=\"https://redirect.github.com/pika/pika/issues/1510\"\u003e#1510\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhere is examples/consume_recover_retry.py ? \u003ca href=\"https://redirect.github.com/pika/pika/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType Hint Issue with arguments parameter in queue_declare method of BlockingChannel Class - (expected \u0026quot;DeclareOk | None\u0026quot;  [arg-type]) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1482\"\u003e#1482\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003equeue_declare does not receive the callback at random times \u003ca href=\"https://redirect.github.com/pika/pika/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no current event loop in thread \u003ca href=\"https://redirect.github.com/pika/pika/issues/1479\"\u003e#1479\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCannot find reference 'exceptions' in '__init__.pyi'  \u003ca href=\"https://redirect.github.com/pika/pika/issues/1473\"\u003e#1473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert to \u003ccode\u003epytest\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pika/pika/issues/1469\"\u003e#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a CI lint check using \u003ccode\u003eruff\u003c/code\u003e and fix all findings \u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003e#1371\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for proxy configuration (Socks5) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1359\"\u003e#1359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlockingIOError: [WinError 10035] A non-blocking socket operation could not be completed immediately \u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003e#1314\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMerged pull requests:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate outdated documentation across the pika project \u003ca href=\"https://redirect.github.com/pika/pika/pull/1577\"\u003e#1577\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix TypeError in select_connection \u003ca href=\"https://redirect.github.com/pika/pika/pull/1575\"\u003e#1575\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.7+ in CI and fix \u003ccode\u003etyping_extensions\u003c/code\u003e import \u003ca href=\"https://redirect.github.com/pika/pika/pull/1574\"\u003e#1574\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyapf\u003c/code\u003e formatter enforcement \u003ca href=\"https://redirect.github.com/pika/pika/pull/1573\"\u003e#1573\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ePIKA_TEST_TLS\u003c/code\u003e env with pytest flag \u003ca href=\"https://redirect.github.com/pika/pika/pull/1572\"\u003e#1572\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003e#1566\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLegacy file fixes \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003e#1562\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003e#1560\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 2 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1557\"\u003e#1557\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003e#1556\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003e#1555\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003e#1554\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003e#1553\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 4 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1552\"\u003e#1552\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\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/pika/pika/commit/305fbe60088790a2648580078b4808f138e325d7\"\u003e\u003ccode\u003e305fbe6\u003c/code\u003e\u003c/a\u003e pika 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/9a3a6e51d17b2b87b29fb8dc48256e79bfdfea58\"\u003e\u003ccode\u003e9a3a6e5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1577\"\u003e#1577\u003c/a\u003e from pika/doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f750ce3a60d7a0cb5cf0fcf68ddb68190935b720\"\u003e\u003ccode\u003ef750ce3\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/ccfe924f5e15b5b1c88384135a64d0f9a6254685\"\u003e\u003ccode\u003eccfe924\u003c/code\u003e\u003c/a\u003e Ensure that pip is run the same way in each workflow.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/47129ca63f282a6b2e8335645236a0fa0b27c0ae\"\u003e\u003ccode\u003e47129ca\u003c/code\u003e\u003c/a\u003e Caching pip artifacts actually does not accomplish anything.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/0a721f75c7eda0923a4390e544341a737d6a7815\"\u003e\u003ccode\u003e0a721f7\u003c/code\u003e\u003c/a\u003e Fix copyright year and document \u003ccode\u003elegacy-python.yaml\u003c/code\u003e workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f7f51dbd069201a0ff07140cbd3511a36555e398\"\u003e\u003ccode\u003ef7f51db\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/6e6283352e302c8e25dd5151e1a0164901ff8902\"\u003e\u003ccode\u003e6e62833\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1579\"\u003e#1579\u003c/a\u003e from pika/feature/gh-1578-hatch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/3d038ad4cf36708a0e19547e5eaccfdd776ef024\"\u003e\u003ccode\u003e3d038ad\u003c/code\u003e\u003c/a\u003e Remove test-requirements.txt and all references to it, since it is superseded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/540db57e418fa58927cff1a3dd4b8aad123dc4c2\"\u003e\u003ccode\u003e540db57\u003c/code\u003e\u003c/a\u003e Fix formatting issue in legacy-python CI workflow for virtualenv installation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pika/pika/compare/1.3.2...1.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.0 to 2.34.2\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.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\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#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\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/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\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#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\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\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\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\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\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/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://gi...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/census31-eq-questionnaire-runner/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Fcensus31-eq-questionnaire-runner/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4237330891","node_id":"PR_kwDODRkoPc7RX1lV","number":1867,"state":"open","title":"Bump the production-dependencies group across 1 directory with 23 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-04-10T07:17:18.000Z","updated_at":"2026-04-24T09:00:30.347Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":23,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.80.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"23.0.0","new_version":"25.3.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.33.0","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"ua-parser","old_version":"1.0.1","new_version":"1.0.2","repository_url":"https://github.com/ua-parser/uap-python"},{"name":"boto3","old_version":"1.37.23","new_version":"1.42.87","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.15.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.2","new_version":"4.3.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"redis","old_version":"7.1.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.24","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.37.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.22.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"6.2.2","new_version":"7.0.5","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 23 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.3` |\n| [google-cloud-datastore](https://github.com/googleapis/google-cloud-python) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.80.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `23.0.0` | `25.3.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.33.1` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [ua-parser](https://github.com/ua-parser/uap-python) | `1.0.1` | `1.0.2` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.42.87` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.15.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.2` | `4.3.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.10.1` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [redis](https://github.com/redis/redis-py) | `7.1.0` | `7.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.24` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/google-cloud-python) | `2.29.0` | `2.37.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.22.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.2` | `7.0.5` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n\n\nUpdates `flask` from 3.1.1 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-documentai-v2.21.0\"\u003e2.21.0\u003c/a\u003e (2023-12-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for python 3.12 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce compatibility with native namespace packages (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire proto-plus \u0026gt;= 1.22.3 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eretry_async\u003c/code\u003e instead of \u003ccode\u003eretry\u003c/code\u003e in async client (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\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/googleapis/google-cloud-python/commit/c60ded47847b04b2536f19c1610b5592b7952d6a\"\u003e\u003ccode\u003ec60ded4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T181058Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15005\"\u003e#15005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c0e3e9d221c3b8cd6d99503fadbb8e643db1e325\"\u003e\u003ccode\u003ec0e3e9d\u003c/code\u003e\u003c/a\u003e chore: disable treat warnings as errors (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15008\"\u003e#15008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45d4cee9e0e48a209b2d9292be29a15125548458\"\u003e\u003ccode\u003e45d4cee\u003c/code\u003e\u003c/a\u003e docs(samples): Update BigQuery Storage Arrow samples batching logic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14961\"\u003e#14961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45149baca6064be265db1b653abb405c298a2b41\"\u003e\u003ccode\u003e45149ba\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T162506Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15001\"\u003e#15001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d58a9ba338df3df1afca11e155fe449c32631179\"\u003e\u003ccode\u003ed58a9ba\u003c/code\u003e\u003c/a\u003e test: Add 'cryptography' 'cachetools' to test deps for bigquery-storage (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14999\"\u003e#14999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/10289465a87988b9bf35a85893f26ea372ad717b\"\u003e\u003ccode\u003e1028946\u003c/code\u003e\u003c/a\u003e feat: add v1 api for google-cloud-maintenance-api (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14998\"\u003e#14998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/b3cb4de3ce50c3ec55af2b132d756252a32641f3\"\u003e\u003ccode\u003eb3cb4de\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20260107T084051Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14995\"\u003e#14995\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17cc12897e6afdf3f3131531c50a8226a3f57c0f\"\u003e\u003ccode\u003e17cc128\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20251231T091651Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14991\"\u003e#14991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c353aa5bcc937ef9399c8efc90492dadbcf01aa2\"\u003e\u003ccode\u003ec353aa5\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251219T024955Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14985\"\u003e#14985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f38453832a2bb0226c389c30df13d072d1642377\"\u003e\u003ccode\u003ef384538\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251217T215552Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14980\"\u003e#14980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-iam-v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.80.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.80.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.80.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglimmering\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[ssl] Implement TLS private key signer in Python. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41701\"\u003e#41701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Private Key Offload Implementation. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41606\"\u003e#41606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix max sockaddr struct size on OpenBSD. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40454\"\u003e#40454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41432\"\u003e#41432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41484\"\u003e#41484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41324\"\u003e#41324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41502\"\u003e#41502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RR and WRR] enable change to connect from a random index. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41472\"\u003e#41472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement gRFC A101. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41051\"\u003e#41051\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C++] Add SNI override option to C++ channel credentials options API. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41460\"\u003e#41460\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C# tools] Option to append Async to server side method names \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39010\"\u003e#39010\u003c/a\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39797\"\u003e#39797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41357\"\u003e#41357\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Disable php infinite recursion check for callback from Core to PHP. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41835\"\u003e#41835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40337\"\u003e#40337\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Fix \u003ccode\u003eGRPC_TRACE\u003c/code\u003e not working when absl log initialized in cython. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41455\"\u003e#41455\u003c/a\u003e)\u0026quot;. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41769\"\u003e#41769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41532\"\u003e#41532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Docs: correct \u003ccode\u003egrpc.Compression\u003c/code\u003e references. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41705\"\u003e#41705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40226\"\u003e#40226\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/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1\"\u003e\u003ccode\u003ef5e2d6e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41857\"\u003e#41857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b\"\u003e\u003ccode\u003e938cfec\u003c/code\u003e\u003c/a\u003e [subchannel connection scaling] fix when we reset backoff (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41935\"\u003e#41935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c\"\u003e\u003ccode\u003e91778be\u003c/code\u003e\u003c/a\u003e [Backport][v1.80.x][Python] New \u003ccode\u003e_create\u003c/code\u003e method for aio.Metadata (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41888\"\u003e#41888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0\"\u003e\u003ccode\u003ef10b9f2\u003c/code\u003e\u003c/a\u003e [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656\"\u003e\u003ccode\u003ebe4c1c5\u003c/code\u003e\u003c/a\u003e [subchannel] fix crash in connection scaling code (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41853\"\u003e#41853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427\"\u003e\u003ccode\u003ea71df73\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41844\"\u003e#41844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a\"\u003e\u003ccode\u003e3ca09e4\u003c/code\u003e\u003c/a\u003e [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d\"\u003e\u003ccode\u003e260c6fd\u003c/code\u003e\u003c/a\u003e [PHP] Disable php infinite recursion check for callback from Core to PHP (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41\"\u003e#41\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b\"\u003e\u003ccode\u003e50957c5\u003c/code\u003e\u003c/a\u003e [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999\"\u003e\u003ccode\u003ee1e1d0a\u003c/code\u003e\u003c/a\u003e [Bzlmod] Turn off bzlmod for PSM python tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41810\"\u003e#41810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.80.0\"\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 25.3.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 25.3.0\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eHTTP/2 ASGI Body Duplication\u003c/strong\u003e: Fix request body being received twice in HTTP/2\nASGI requests, causing JSON parsing errors with \u0026quot;Extra data\u0026quot; messages\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3558\"\u003e#3558\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eASGI Chunked EOF Handling\u003c/strong\u003e: Add \u003ccode\u003efinish()\u003c/code\u003e method to callback parser to handle\nchunked encoding edge case where connection closes before final CRLF after zero-chunk\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eHTTP/2 Documentation\u003c/strong\u003e: Fix \u003ccode\u003ehttp_protocols\u003c/code\u003e examples to use comma-separated string\ninstead of list syntax (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3561\"\u003e#3561\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eChunked Encoding\u003c/strong\u003e: Reject chunk extensions containing bare CR bytes per RFC 9112\n(\u003ca href=\"https://github.com/benoitc/gunicorn/discussions/3556\"\u003e#3556\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRequest Line Limit\u003c/strong\u003e: Fix \u003ccode\u003e--limit-request-line 0\u003c/code\u003e to mean unlimited as documented,\ninstead of using default maximum. Works with both Python and fast C parser.\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3563\"\u003e#3563\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Parser Header Validation\u003c/strong\u003e: Add security checks per RFC 9110/9112:\n\u003cul\u003e\n\u003cli\u003eReject duplicate Content-Length headers\u003c/li\u003e\n\u003cli\u003eReject requests with both Content-Length and Transfer-Encoding\u003c/li\u003e\n\u003cli\u003eReject chunked transfer encoding in HTTP/1.0\u003c/li\u003e\n\u003cli\u003eReject stacked chunked encoding\u003c/li\u003e\n\u003cli\u003eValidate Transfer-Encoding values\u003c/li\u003e\n\u003cli\u003eStrict chunk size validation\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eFast HTTP Parser\u003c/strong\u003e: Update to gunicorn_h1c \u0026gt;= 0.6.3 for \u003ccode\u003easgi_headers\u003c/code\u003e property\nand \u003ccode\u003eInvalidChunkExtension\u003c/code\u003e validation for bare CR rejection\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eASGI PROXY Protocol\u003c/strong\u003e: Add PROXY protocol v1/v2 support to callback parser\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eDocker Images\u003c/strong\u003e: Update to Python 3.14\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eGunicorn 25.2.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFast HTTP Parser (gunicorn_h1c 0.4.1)\u003c/strong\u003e: Integrate new exception types and limit parameters from gunicorn_h1c 0.4.1 for both WSGI and ASGI workers\n\u003cul\u003e\n\u003cli\u003eRequires gunicorn_h1c \u0026gt;= 0.4.1 for \u003ccode\u003ehttp_parser='fast'\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFalls back to Python parser in \u003ccode\u003eauto\u003c/code\u003e mode if version not met\u003c/li\u003e\n\u003cli\u003eProper HTTP status codes for limit errors (414, 431)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003euWSGI Async Workers\u003c/strong\u003e: Fix \u003ccode\u003eInvalidUWSGIHeader: incomplete header\u003c/code\u003e error when using gevent or gthread workers with uwsgi protocol behind nginx. (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3552\"\u003e#3552\u003c/a\u003e, [PR \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3554\"\u003e#3554\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3554\"\u003ebenoitc/gunicorn#3554\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/benoitc/gunicorn/commit/9bce72cfc3985aba7e0c47bf3c00fa681b2847e4\"\u003e\u003ccode\u003e9bce72c\u003c/code\u003e\u003c/a\u003e Update changelog with missing 25.3.0 changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/2a15fdb93ab136e5776692d620852f481c89d610\"\u003e\u003ccode\u003e2a15fdb\u003c/code\u003e\u003c/a\u003e Fix pylint isinstance-second-argument-not-valid-type warning\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/8d08aaa2cbd38fdfa2ca6fb94094c47b9c16730a\"\u003e\u003ccode\u003e8d08aaa\u003c/code\u003e\u003c/a\u003e Fix --limit-request-line 0 to mean unlimited\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/d40a37454736e40916eb51e35895f1c22c0cd34a\"\u003e\u003ccode\u003ed40a374\u003c/code\u003e\u003c/a\u003e Fix pytest-asyncio configuration and treq_asgi hex escapes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/da8bd4850ac0f2d0df215390dad88392eb538d74\"\u003e\u003ccode\u003eda8bd48\u003c/code\u003e\u003c/a\u003e Remove unused AsyncRequest class\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/b00f125755ec3f509a3e82dc5568d9f2d8bddba7\"\u003e\u003ccode\u003eb00f125\u003c/code\u003e\u003c/a\u003e Integrate gunicorn_h1c 0.6.3 with InvalidChunkExtension support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/bdb2ebd5a4913fff1e92800f3763e4a879526d3e\"\u003e\u003ccode\u003ebdb2ebd\u003c/code\u003e\u003c/a\u003e Reject chunk extensions with bare CR bytes (RFC 9112)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7057fc9f89f0ce4d9ac01a12ea2f39768fb32be6\"\u003e\u003ccode\u003e7057fc9\u003c/code\u003e\u003c/a\u003e Fix http_protocols documentation to use string syntax\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/d43acb8fe0910b6669c163e2f4a439e464eab012\"\u003e\u003ccode\u003ed43acb8\u003c/code\u003e\u003c/a\u003e Update to gunicorn_h1c \u0026gt;= 0.6.2 for asgi_headers support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbd27e82a238cb1326336c6aa4b8ae058e2c9ff9\"\u003e\u003ccode\u003ecbd27e8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3559\"\u003e#3559\u003c/a\u003e from benleembruggen/fix/http2-asgi-body-duplication\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...25.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.0 to 2.33.1\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.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\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#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\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.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.33.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eLambdaTest\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e), and Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument. \u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\r\ncr.exception_formatter = structlog.dev.plain_traceback\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.4.0...25.5.0\"\u003e25.5.0\u003c/a\u003e - 2025-10-27\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument.\n\u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\ncr.exception_formatter = structlog.dev.plain_traceback\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.RichTracebackFormatter\u003c/code\u003e now exposes the upstream \u003cem\u003ecode_width\u003c/em\u003e parameter.\nDefault \u003cem\u003ewidth\u003c/em\u003e is now \u003ccode\u003eNone\u003c/code\u003e for full terminal width.\nFull terminal width is now handled by Rich itself, bringing support for reflow and \u003ccode\u003eCOLUMN\u003c/code\u003e environment variable.\nPassing \u003ccode\u003e-1\u003c/code\u003e for \u003cem\u003ewidth\u003c/em\u003e is now deprecated and automatically replaced by \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/717\"\u003e#717\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNative loggers now allow the passing of a dictionary for dictionary-based interpolation \u003ccode\u003elog.info(\u0026quot;hello %(name)s!\u0026quot;, {\u0026quot;name\u0026quot;: \u0026quot;world\u0026quot;})\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/748\"\u003e#748\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOn Python 3.11+, \u003ccode\u003estructlog.processors.CallsiteParameterAdder\u003c/code\u003e now supports \u003ccode\u003eCallsiteParameter.QUAL_NAME\u003c/code\u003e that adds the qualified name of the callsite, including scope and class names.\nThis is only available for \u003cem\u003estructlog\u003c/em\u003e-originated events since the standard library has no equivalent.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.stdlib.LoggerFactory\u003c/code\u003e now supports the \u003cem\u003estacklevel\u003c/em\u003e parameter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/763\"\u003e#763\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/hynek/structlog/commit/c0ef9e09e7a536cae65e33c1ac1c8b4e6a6f7511\"\u003e\u003ccode\u003ec0ef9e0\u003c/code\u003e\u003c/a\u003e Prepare 25.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/9cb662fe32046f92f08346c58089a2dcba7cb4bf\"\u003e\u003ccode\u003e9cb662f\u003c/code\u003e\u003c/a\u003e docs: nit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5400612735ad07bbe8ee9f2279f3040aa2e69ca4\"\u003e\u003ccode\u003e5400612\u003c/code\u003e\u003c/a\u003e docs/stdlib: add warning about ProcessorFormatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/1c2c19aa19c8f30330b76465b7a0d9993b9e8360\"\u003e\u003ccode\u003e1c2c19a\u003c/code\u003e\u003c/a\u003e Try validating pyproject.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/aca10f23dd12bd9e14cfe712f1ce66c9cb5f4400\"\u003e\u003ccode\u003eaca10f2\u003c/code\u003e\u003c/a\u003e Drop pretend dependency (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/3800d401db2c682c7c83b2d3eec38d81c9791f4d\"\u003e\u003ccode\u003e3800d40\u003c/code\u003e\u003c/a\u003e docs: use native\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ecaa15ac6b166ebca9f2b4f5cfdb4c4ec138a602\"\u003e\u003ccode\u003eecaa15a\u003c/code\u003e\u003c/a\u003e stdlib: add support for stacklevel (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/763\"\u003e#763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/7f7a221aed6bbff3c13cefd7effe14cc4f0cfc24\"\u003e\u003ccode\u003e7f7a221\u003c/code\u003e\u003c/a\u003e update dev (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5acfc85e3c3fa821dc65b55a226900d40dc0831c\"\u003e\u003ccode\u003e5acfc85\u003c/code\u003e\u003c/a\u003e docs: 5% bigger still\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/c102862e3f30de84c898c4501418dede15056c6d\"\u003e\u003ccode\u003ec102862\u003c/code\u003e\u003c/a\u003e docs: bigger font\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ua-parser` from 1.0.1 to 1.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ua-parser/uap-python/releases\"\u003eua-parser's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eua-parser 1.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed bug in yaml and json loaders, mostly (but not exclusively) affecting windows (non-ascii regex files would fail to parse)\u003c/li\u003e\n\u003cli\u003eAdded caching by default to the regex and re2 resolvers.\u003c/li\u003e\n\u003cli\u003eDropped Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.13, 3.14, 3.14t, graal25\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/ua-parser/uap-python/commit/2179269a30d695cda0c9d59067d64fa47171a187\"\u003e\u003ccode\u003e2179269\u003c/code\u003e\u003c/a\u003e Fix release job's condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/f7aa24d80f9d5f8eed1e08ca5a264af5c61a3681\"\u003e\u003ccode\u003ef7aa24d\u003c/code\u003e\u003c/a\u003e Bump versions in preparation for new releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/f5ba8dbe8f997f3180bd5ec0cca3e38ea113b2ba\"\u003e\u003ccode\u003ef5ba8db\u003c/code\u003e\u003c/a\u003e Update docs for \u003ca href=\"https://redirect.github.com/ua-parser/uap-python/issues/302\"\u003e#302\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/c85e4e3d4cdf54200bb8eca5c14c682e052650f8\"\u003e\u003ccode\u003ec85e4e3\u003c/code\u003e\u003c/a\u003e Always cache resolvers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/fa30fada2f63685082b24ab25acc19f82f8b6ed1\"\u003e\u003ccode\u003efa30fad\u003c/code\u003e\u003c/a\u003e Improve caching\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/39531862fe74f53e2b14a94056bacf6a227e16b7\"\u003e\u003ccode\u003e3953186\u003c/code\u003e\u003c/a\u003e Modernize dataclasses use\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/0188997e9eaacfea9982e29e604e3e4ba4da1cce\"\u003e\u003ccode\u003e0188997\u003c/code\u003e\u003c/a\u003e Fix readme (3.9 support was dropped by \u003ca href=\"https://redirect.github.com/ua-parser/uap-python/issues/285\"\u003e#285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/891837c725d47a1e7913513eb410f9e58befdabc\"\u003e\u003ccode\u003e891837c\u003c/code\u003e\u003c/a\u003e Remove setuptools-scm from build requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/84206d860c09c73e9617f876ed4913cd2bfff4a6\"\u003e\u003ccode\u003e84206d8\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eproject.license\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/6d891a6f8f8bc4f419220fb56b12b1fc15ae4349\"\u003e\u003ccode\u003e6d891a6\u003c/code\u003e\u003c/a\u003e Remove license classifier\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ua-parser/uap-python/compare/1.0.1...1.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.37.23 to 1.42.87\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8d65320e4df23b56f3dc5b09ad75d95bcc85382b\"\u003e\u003ccode\u003e8d65320\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.87'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/aff7ae57451834a94a1ba027b3bce741612e3d09\"\u003e\u003ccode\u003eaff7ae5\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.87\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a58071d342a6c659814e6baca5d353d0c311a5e5\"\u003e\u003ccode\u003ea58071d\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/bf26a45aa2447dfee29ab904b99eeda523c20874\"\u003e\u003ccode\u003ebf26a45\u003c/code\u003e\u003c/a\u003e Add boto3 version clarification for login with console credentials (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4758\"\u003e#4758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a4315bc80b83e8cf59e8582eef0e75f79fc01e4a\"\u003e\u003ccode\u003ea4315bc\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.86'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8f0be8d174a0523018093fde6cbe236f5889cc37\"\u003e\u003ccode\u003e8f0be8d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.86' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/f78bb8a98d3ae1f449505f99dd050932db96da66\"\u003e\u003ccode\u003ef78bb8a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.86\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/db209b52a0591d13c55127c374c24c42aa558cee\"\u003e\u003ccode\u003edb209b5\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/499ee750eb6d5bd5ea8ecb9ce5081db5b84f2e93\"\u003e\u003ccode\u003e499ee75\u003c/code\u003e\u003c/a\u003e Allow SSEC bucket decryption in s3 integ tests (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4759\"\u003e#4759\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c24d93e592ef5b06d9943253aea3a2e94d762f88\"\u003e\u003ccode\u003ec24d93e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.85'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.42.87\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd locale support for decimal separator in \u003ccode\u003eintword\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/287\"\u003e#287\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/275\"\u003e#275\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/276\"\u003e#276\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003enaturaldelta\u003c/code\u003e: round the value to nearest unit that makes sense (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/272\"\u003e#272\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix plural form for \u003ccode\u003eintword\u003c/code\u003e and improve performance (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/273\"\u003e#273\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eException\u003c/code\u003e with more specific \u003ccode\u003eFileNotFoundError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/286\"\u003e#286\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Uzbek language (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/264\"\u003e#264\u003c/a\u003e) \u003ca href=\"https://github.com/sSimuSs\"\u003e\u003ccode\u003e@​sSimuSs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/268\"\u003e#268\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/2ddb5903cdc1c7e6eb6b083f4f99f73db50aecd9\"\u003e\u003ccode\u003e2ddb590\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eException\u003c/code\u003e with more specific \u003ccode\u003eFileNotFoundError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/286\"\u003e#286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/e87f2e25660d3af2ea553ea8dc63bff99652bc94\"\u003e\u003ccode\u003ee87f2e2\u003c/code\u003e\u003c/a\u003e Add locale support for decimal separator in \u003ccode\u003eintword\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/717518400d6709cf7e9bebe4a9424eb3b1ebd60d\"\u003e\u003ccode\u003e7175184\u003c/code\u003e\u003c/a\u003e Add locale support for decimal separator in intword\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/25269993e7ef021edaba620c96827ca21cc13d7e\"\u003e\u003ccode\u003e2526999\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/285\"\u003e#285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/ba532d9ae45d1da89f3687259324365dc187ebca\"\u003e\u003ccode\u003eba532d9\u003c/code\u003e\u003c/a\u003e Replace Exception with more specific FileNotFoundError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bdc49ea831cb3a79ba0155a57f27259cabb8cafd\"\u003e\u003ccode\u003ebdc49ea\u003c/code\u003e\u003c/a\u003e Don't ignore UP038, it's been removed from Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/86f116bda6698c3e03e0db5f7fcfd929a4ba9ad4\"\u003e\u003ccode\u003e86f116b\u003c/code\u003e\u003c/a\u003e Add seven-day cooldown to Renovate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/e3f7116924dad455a87e85a5d7b8b7a07460fd57\"\u003e\u003ccode\u003ee3f7116\u003c/code\u003e\u003c/a\u003e No need for setup-python with prek-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3dca143f7884b928632f68449423d914531ca267\"\u003e\u003ccode\u003e3dca143\u003c/code\u003e\u003c/a\u003e \u003ccode\u003enaturaldelta\u003c/code\u003e: round the value to nearest unit that makes sense (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bac6f269d7f51adcd62840db969c0a40fec8fd70\"\u003e\u003ccode\u003ebac6f26\u003c/code\u003e\u003c/a\u003e Apply suggestion from \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.2 to 4.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.3.0 (2026-04-03)\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre_load\u003c/code\u003e and \u003ccode\u003epost_load\u003c/code\u003e parameters to \u003ccode\u003emarshmallow.fields.Field\u003c/code\u003e for\nfield-level pre- and post-processing (:issue:\u003ccode\u003e2787\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eTyping: improvements to \u003ccode\u003emarshmallow.validate\u003c/code\u003e (:pr:\u003ccode\u003e2940\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.4 (2026-04-02)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.validate.URL\u003c/code\u003e and \u003ccode\u003emarshmallow.validate.Email\u003c/code\u003e accept Internationalized Domain Names (IDNs) (:issue:\u003ccode\u003e2821\u003c/code\u003e, :issue:\u003ccode\u003e2936\u003c/code\u003e).\n\u003ccode\u003emarshmallow.validate.Email\u003c/code\u003e also correctly rejects IDN domains with leading/trailing hyphens.\nThanks :user:\u003ccode\u003etouhidurrr\u003c/code\u003e for the report.\u003c/li\u003e\n\u003cli\u003eTyping: Fix typing of \u003ccode\u003enested\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Nested\u003c/code\u003e (:pr:\u003ccode\u003e2935\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.3 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003emarshmallow.fields.Number\u003c/code\u003e and \u003ccode\u003emarshmallow.fields.Mapping\u003c/code\u003e abstract base classes to\nprevent using them within Schemas (:issue:\u003ccode\u003e2924\u003c/code\u003e). Thanks :user:\u003ccode\u003eMartingaleCoda\u003c/code\u003e for reporting.\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003erequired\u003c/code\u003e to be set on \u003ccode\u003emarshmallow.fields.Contant\u003c/code\u003e (:issue:\u003ccode\u003e2900\u003c/code\u003e).\nThanks :user:\u003ccode\u003enosnickid\u003c/code\u003e for the report and :user:\u003ccode\u003eworksbyfriday\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emarshmallow.validate.OneOf\u003c/code\u003e emitting extra pairs when labels outnumber choices (:issue:\u003ccode\u003e2869\u003c/code\u003e).\nThanks: user:\u003ccode\u003eT90REAL\u003c/code\u003e for the report and :user:\u003ccode\u003erstar327\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix behavior when passing a dot-delimited attribute name to \u003ccode\u003epartial\u003c/code\u003e for a key with \u003ccode\u003edata_key\u003c/code\u003e set (:pr:\u003ccode\u003e2903\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebysiber\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix Enum field by-name lookup to only return actual members (:pr:\u003ccode\u003e2902\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebysiber\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.fields.DateTime\u003c/code\u003e with \u003ccode\u003eformat=\u0026quot;timestamp_ms\u0026quot;\u003c/code\u003e properly\nrejects bool values (:pr:\u003ccode\u003e2904\u003c/code\u003e). Thanks :user:\u003ccode\u003ebysiber\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix typing of \u003ccode\u003eerror_messages\u003c/code\u003e argument to \u003ccode\u003emarshmallow.fields.Field\u003c/code\u003e (:pr:\u003ccode\u003e1636\u003c/code\u003e).\nThanks :user:\u003ccode\u003erepole\u003c/code\u003e for reporting and :user:\u003ccode\u003edhruvildarji\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eipaddress.*\u003c/code\u003e to \u003ccode\u003emarshmallow.Schema.TYPE_MAPPING\u003c/code\u003e (:issue:\u003ccode\u003e1695\u003c/code\u003e).\nThanks :user:\u003ccode\u003eliberforce\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edhruvildarji\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.2 (2026-02-04)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix behavior of \u003ccode\u003efields.Contant(None)\u003c/code\u003e (:issue:\u003ccode\u003e2868\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/marshmallow-code/marshmallow/commit/b596fdb0d1bda68ae400ab29e1f1bde2f06900b3\"\u003e\u003ccode\u003eb596fdb\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/256f0aabbc18232219e33854999372cfe1643f52\"\u003e\u003ccode\u003e256f0aa\u003c/code\u003e\u003c/a\u003e Add pre/post_load parameters to Field (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2799\"\u003e#2799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/c847ad47a3f1235021bd2624b10c255a936ed107\"\u003e\u003ccode\u003ec847ad4\u003c/code\u003e\u003c/a\u003e Typing improvements to marshmallow.validate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/eb863228f5273244c19388fb6161ffdb90cb04d1\"\u003e\u003ccode\u003eeb86322\u003c/code\u003e\u003c/a\u003e Remove redundant docs job (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2939\"\u003e#2939\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/a44ad62a876d2e9330d0e370b438bafb058676d4\"\u003e\u003ccode\u003ea44ad62\u003c/code\u003e\u003c/a\u003e Avoid infinite recursion in nesting docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2938\"\u003e#2938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/3360e34a2da480eba03ae07bd4b15f0859027bf8\"\u003e\u003ccode\u003e3360e34\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7b9ce45ac906c2597ac0acb7416e01e80218b546\"\u003e\u003ccode\u003e7b9ce45\u003c/code\u003e\u003c/a\u003e Fix changelog typos and update releasing docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/f07eadc87dfac25ed505d5cd9d186920f2682733\"\u003e\u003ccode\u003ef07eadc\u003c/code\u003e\u003c/a\u003e Fix validate.Email to accept IDNs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2937\"\u003e#2937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/4acb783c73130f762aa5b0df6b65ff7685d5ff2c\"\u003e\u003ccode\u003e4acb783\u003c/code\u003e\u003c/a\u003e Fix Unreachable Warning (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2935\"\u003e#2935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/3492fae7b31d310814ad16fcddad5c7717d54949\"\u003e\u003ccode\u003e3492fae\u003c/code\u003e\u003c/a\u003e Remove redundant python-version (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2932\"\u003e#2932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.2...4.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-storage: v3.10.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.10.0...v3.10.1\"\u003e3.10.1\u003c/a\u003e (2026-03-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eraise ValueError if api_endpoint is unset when using AnonymousCredentials in AsyncGrpcClient.  (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1778\"\u003e#1778\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/17828ea3\"\u003e17828ea3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-storage: v3.10.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.9.0...v3.10.0\"\u003e3.10.0\u003c/a\u003e (2026-03-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Bucket Encryption Enforcement] add support for bucket encryption enforcement config (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1742\"\u003e#1742\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a6e8b00e4e6ff57460373f8e628fd363be47811\"\u003e2a6e8b00e4e6ff57460373f8e628fd363be47811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerf Improvments\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Rapid Buckets Reads] Use raw proto access for read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1764\"\u003e#1764\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/14cfd61ce35365a409650981239ef742cdf375fb\"\u003e14cfd61ce35365a409650981239ef742cdf375fb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Benchmarks] init mp pool \u0026amp; grpc client once, use os.sched_setaffinity (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1751\"\u003e#1751\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\"\u003ea9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Writes] don't flush at every append, results in bad perf (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1746\"\u003e#1746\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ab62d728ac7d7be3c4fe9a99d72e35ead310805a\"\u003eab62d728ac7d7be3c4fe9a99d72e35ead310805a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Windows] skip downloading blobs whose name contain \u003ccode\u003e\u0026quot;:\u0026quot; \u003c/code\u003e eg: \u003ccode\u003eC:\u003c/code\u003e \u003ccode\u003eD:\u003c/code\u003e etc when application runs in Windows. (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1774\"\u003e#1774\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/558198823ed51918db9c0137715d1e7f5b593975\"\u003e558198823ed51918db9c0137715d1e7f5b593975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Path Traversal] Prevent path traversal in \u003ccode\u003edownload_many_to_path\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1768\"\u003e#1768\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\"\u003e700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets] pass token correctly, '\u0026amp;' instead of ',' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1756\"\u003e#1756\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d8dd1e074d2431de9b45e0103181dce749a447a0\"\u003ed8dd1e074d2431de9b45e0103181dce749a447a0\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-storage 3.9.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.8.0...v3.9.0\"\u003e3.9.0\u003c/a\u003e (2026-02-02)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eupdate generation for MRD (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1730\"\u003e#1730\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/08bc7082\"\u003e08bc7082\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd get_object method for async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1735\"\u003e#1735\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0e5ec29b\"\u003e0e5ec29b\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd micro-benchmarks for reads comparing standard (regional) vs rapid (zonal) buckets. (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1697\"\u003e#1697\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/1917649f\"\u003e1917649f\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for opening via \u003ccode\u003ewrite_handle\u003c/code\u003e and fix \u003ccode\u003ewrite_handle\u003c/code\u003e type (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1715\"\u003e#1715\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2bc15fa5\"\u003e2bc15fa5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd samples for appendable objects writes and reads (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2e1a1eb5\"\u003e2e1a1eb5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd samples for appendable objects writes and reads (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1705\"\u003e#1705\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2e1a1eb5\"\u003e2e1a1eb5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd context manager to mrd (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1724\"\u003e#1724\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ac2808a\"\u003e5ac2808a\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove Zonal Buckets features of \u003ccode\u003e_experimental\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1728\"\u003e#1728\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/74c9ecc5\"\u003e74c9ecc5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd default user agent for grpc (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1726\"\u003e#1726\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7b319469\"\u003e7b319469\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.10.0...v3.10.1\"\u003e3.10.1\u003c/a\u003e (2026-03-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eraise ValueError if api_endpoint is unset when using AnonymousCredentials in AsyncGrpcClient.  (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1778\"\u003e#1778\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/17828ea316872938a98a6360b10a2495c54bbbcb\"\u003e17828ea316872938a98a6360b10a2495c54bbbcb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.9.0...v3.10.0\"\u003e3.10.0\u003c/a\u003e (2026-03-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Bucket Encryption Enforcement] add support for bucket encryption enforcement config (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1742\"\u003e#1742\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a6e8b00e4e6ff57460373f8e628fd363be47811\"\u003e2a6e8b00e4e6ff57460373f8e628fd363be47811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerf Improvments\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Rapid Buckets Reads] Use raw proto access for read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1764\"\u003e#1764\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/14cfd61ce35365a409650981239ef742cdf375fb\"\u003e14cfd61ce35365a409650981239ef742cdf375fb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Benchmarks] init mp pool \u0026amp; grpc client once, use os.sched_setaffinity (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1751\"\u003e#1751\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\"\u003ea9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Writes] don't flush at every append, results in bad perf (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1746\"\u003e#1746\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ab62d728ac7d7be3c4fe9a99d72e35ead310805a\"\u003eab62d728ac7d7be3c4fe9a99d72e35ead310805a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Windows] skip downloading blobs whose name contain \u003ccode\u003e\u0026quot;:\u0026quot; \u003c/code\u003e eg: \u003ccode\u003eC:\u003c/code\u003e \u003ccode\u003eD:\u003c/code\u003e etc when application runs in Windows. (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1774\"\u003e#1774\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/558198823ed51918db9c0137715d1e7f5b593975\"\u003e558198823ed51918db9c0137715d1e7f5b593975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Path Traversal] Prevent path traversal in \u003ccode\u003edownload_many_to_path\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1768\"\u003e#1768\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\"\u003e700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets] pass token correctly, '\u0026amp;' instead of ',' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1756\"\u003e#1756\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d8dd1e074d2431de9b45e0103181dce749a447a0\"\u003ed8dd1e074d2431de9b45e0103181dce749a447a0\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.8.0...v3.9.0\"\u003e3.9.0\u003c/a\u003e (2026-02-02)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd get_object method for async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1735\"\u003e#1735\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0e5ec29bc6a31b77bcfba4254cef5bffb199095c\"\u003e0e5ec29bc6a31b77bcfba4254cef5bffb199095c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eexpose \u003ccode\u003eDELETE_OBJECT\u003c/code\u003e   in \u003ccode\u003eAsyncGrpcClient\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1718\"\u003e#1718\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c8dd7a0b124c395b7b60189ee78f47aba8d51f7d\"\u003ec8dd7a0b124c395b7b60189ee78f47aba8d51f7d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate generation for MRD (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1730\"\u003e#1730\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/08bc7082db7392f13bc8...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1867","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1867","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1867/packages"},{"uuid":"3752100019","node_id":"PR_kwDODMT4Ms66DZxN","number":130,"state":"closed","title":"chore(deps): Bump the pip group across 1 directory with 4 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-27T16:44:44.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-22T03:07:17.000Z","updated_at":"2025-12-27T16:44:51.000Z","time_to_close":481047,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"pip","update_count":4,"packages":[{"name":"google-api-python-client","old_version":"2.184.0","new_version":"2.187.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth","old_version":"2.41.1","new_version":"2.45.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"google-cloud-datastore","old_version":"2.21.0","new_version":"2.23.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"google-cloud-firestore","old_version":"2.21.0","new_version":"2.22.0","repository_url":"https://github.com/googleapis/python-firestore"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 4 updates in the / directory: [google-api-python-client](https://github.com/googleapis/google-api-python-client), [google-auth](https://github.com/googleapis/google-auth-library-python), [google-cloud-datastore](https://github.com/googleapis/python-datastore) and [google-cloud-firestore](https://github.com/googleapis/python-firestore).\n\nUpdates `google-api-python-client` from 2.184.0 to 2.187.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-api-python-client/releases\"\u003egoogle-api-python-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.187.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/compare/v2.186.0...v2.187.0\"\u003e2.187.0\u003c/a\u003e (2025-11-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eadmin:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/4ae6f5bc3f1a35cd69cb589c432c299df559dacf\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/4ae6f5bc3f1a35cd69cb589c432c299df559dacf\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eaiplatform:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/131f59d6003dfbce3abfa00730dba9f90b9ca2ab\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/131f59d6003dfbce3abfa00730dba9f90b9ca2ab\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealloydb:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/8c341070f77639ef47f010d9410a814d65f0ed1e\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/8c341070f77639ef47f010d9410a814d65f0ed1e\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eanalyticshub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/9ba4beb4e61873283345d197c2909259948c5488\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/9ba4beb4e61873283345d197c2909259948c5488\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eandroidpublisher:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/3db77266c2abb44ab149d0f83f58f87727280274\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/3db77266c2abb44ab149d0f83f58f87727280274\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapigee:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/a0411b6f5cc087f24e7ffb2c3e55b75e68f7d3c7\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/a0411b6f5cc087f24e7ffb2c3e55b75e68f7d3c7\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapihub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/f820a3b6cd6fdcb90a02f0635cc53b231fd340f3\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/f820a3b6cd6fdcb90a02f0635cc53b231fd340f3\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapphub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0cde10dd690e2ca303b8dddd26baee762b12e103\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0cde10dd690e2ca303b8dddd26baee762b12e103\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eartifactregistry:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c5e5cbd48fac599f541b4bb0671f73504bd95331\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c5e5cbd48fac599f541b4bb0671f73504bd95331\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eauthorizedbuyersmarketplace:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/4b1a58e965c744981d87598ff4d1d9caeb5ad442\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/4b1a58e965c744981d87598ff4d1d9caeb5ad442\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebackupdr:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/9ea2eb7f2c1bea7de204c1641ad2b2fa232cfad8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/9ea2eb7f2c1bea7de204c1641ad2b2fa232cfad8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebiglake:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/f598d38025c1515b5e615f8437a64cbd43fed135\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/f598d38025c1515b5e615f8437a64cbd43fed135\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquerydatatransfer:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/8dd81b0b258535afa8a6da984cd62f53892f7754\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/8dd81b0b258535afa8a6da984cd62f53892f7754\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquery:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/cee5b00a8ea42682301ccd82abb987ca985520b1\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/cee5b00a8ea42682301ccd82abb987ca985520b1\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003echat:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c0b2205c2dbc816c783d5d9da64aa8f01ac64976\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c0b2205c2dbc816c783d5d9da64aa8f01ac64976\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudfunctions:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c40d929e0a719ba2f756c5e076edaafe97f0ade8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c40d929e0a719ba2f756c5e076edaafe97f0ade8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudidentity:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d55d33d3d82ed3045a20a6372368c06060aa7afe\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d55d33d3d82ed3045a20a6372368c06060aa7afe\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudkms:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/aa4d8af269309a77657799795233644c83f41156\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/aa4d8af269309a77657799795233644c83f41156\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudscheduler:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/68574b08de677e92f6b4ef73c9aa8981480fd244\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/68574b08de677e92f6b4ef73c9aa8981480fd244\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecompute:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/385aad3a9db1c1e964dfabe2aec63510e495f929\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/385aad3a9db1c1e964dfabe2aec63510e495f929\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003econtactcenterinsights:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/abf00d5720427fc630a1b261b37bddf881d4aed8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/abf00d5720427fc630a1b261b37bddf881d4aed8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003econtainer:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/1fa286c4cf3c068ad7389a9f0c9d2672023d0a9a\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/1fa286c4cf3c068ad7389a9f0c9d2672023d0a9a\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edataplex:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/b082bcdea218f8eda4e3167f0d91086067f54326\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/b082bcdea218f8eda4e3167f0d91086067f54326\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edataproc:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/46ecc1b97aee590e952a455f36a17ee57edc4878\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/46ecc1b97aee590e952a455f36a17ee57edc4878\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edatastream:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/94712425b6c1a43eac2f609efa2bbe0130c1d157\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/94712425b6c1a43eac2f609efa2bbe0130c1d157\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeveloperconnect:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/b5dbb37c9de1093601e5258e3390dbcba29090ab\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/b5dbb37c9de1093601e5258e3390dbcba29090ab\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edfareporting:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/eb29fdfc7d374ca0fa8a4521dfd03adf5f9d2aaa\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/eb29fdfc7d374ca0fa8a4521dfd03adf5f9d2aaa\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edialogflow:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0d073639ba2dd3cf64711a0b2e765c69cf40f301\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0d073639ba2dd3cf64711a0b2e765c69cf40f301\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ediscoveryengine:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0a0ffefd477c00e649e2449de4e978e97c7cb77e\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0a0ffefd477c00e649e2449de4e978e97c7cb77e\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edisplayvideo:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/b952757151bf40ee3e8a29b4ba97723e839d564f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/b952757151bf40ee3e8a29b4ba97723e839d564f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edlp:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c44af38454081885ad41f8e11e39e6d2b8be9250\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c44af38454081885ad41f8e11e39e6d2b8be9250\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocumentai:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/892d8591315553114022645b20b312d8f0b0e142\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/892d8591315553114022645b20b312d8f0b0e142\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edrive:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d0d23365f047c5bc095d500fbfb6364fea5b829f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d0d23365f047c5bc095d500fbfb6364fea5b829f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efile:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/33cc60f6da2e139c26e4037a0b2bd26a688b956f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/33cc60f6da2e139c26e4037a0b2bd26a688b956f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efirebaseappdistribution:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d228cb515590e17fdbb2732f667db09940ff65f0\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d228cb515590e17fdbb2732f667db09940ff65f0\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efirebaseapphosting:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/62fab0552fa333a8a79c0c433c515b029d743e3f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/62fab0552fa333a8a79c0c433c515b029d743e3f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efirebasedataconnect:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/5fc2c543b13bc466fccd2e89fef36fd6da5a905c\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/5fc2c543b13bc466fccd2e89fef36fd6da5a905c\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egkeonprem:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/aacb9659d60bed0a38c05936c788d6c96eb30599\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/aacb9659d60bed0a38c05936c788d6c96eb30599\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehealthcare:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/ac074ed9332b6ebaa776c9ef7123d708fea89b8b\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/ac074ed9332b6ebaa776c9ef7123d708fea89b8b\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eiamcredentials:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/a668b6ab59c1c913ed455c94e722cd0747850c9f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/a668b6ab59c1c913ed455c94e722cd0747850c9f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eids:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/e03595989016a96400343dbaa03371a049656d50\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/e03595989016a96400343dbaa03371a049656d50\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elogging:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/652fd598fcd529c3da0563990bf7f4941b172f55\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/652fd598fcd529c3da0563990bf7f4941b172f55\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elooker:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/483cba2bbcd375f8c6808e6ad386f8279b622fb6\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/483cba2bbcd375f8c6808e6ad386f8279b622fb6\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emanagedkafka:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/94e3bc173770528969b1abd935ac393934f6fda4\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/94e3bc173770528969b1abd935ac393934f6fda4\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\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/googleapis/google-api-python-client/commit/623c34ff35b2a4b44bbc0e013073199d5aea4f5a\"\u003e\u003ccode\u003e623c34f\u003c/code\u003e\u003c/a\u003e chore(main): release 2.187.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2682\"\u003e#2682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e\u003ccode\u003e8edf6d6\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2681\"\u003e#2681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/98ba848a8b8dc3baac562122fc5fd115ee0cea1e\"\u003e\u003ccode\u003e98ba848\u003c/code\u003e\u003c/a\u003e chore(main): release 2.186.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2679\"\u003e#2679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/86cb1335984094dad37bbf5e2148ef9b44dee5d9\"\u003e\u003ccode\u003e86cb133\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2678\"\u003e#2678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/33aee305b094e501517847552292a0f7e1ba8898\"\u003e\u003ccode\u003e33aee30\u003c/code\u003e\u003c/a\u003e chore(main): release 2.185.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2667\"\u003e#2667\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8ee51c47a47db8e09997502f482e990b291cbb98\"\u003e\u003ccode\u003e8ee51c4\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2672\"\u003e#2672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/bde091934f8392d920e9f96f44bc0af078fc6124\"\u003e\u003ccode\u003ebde0919\u003c/code\u003e\u003c/a\u003e chore(python): Add Python 3.14 to python post processor image (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2669\"\u003e#2669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/f32e6fa89eebee9b57d2fdd11c2e732a75bb7ffc\"\u003e\u003ccode\u003ef32e6fa\u003c/code\u003e\u003c/a\u003e chore: add googleapis/python-core-client-libraries as codeowner (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2670\"\u003e#2670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/0fb1cf3a3d292281a9ba0d378e3bc7c0a75ecc9c\"\u003e\u003ccode\u003e0fb1cf3\u003c/code\u003e\u003c/a\u003e feat: add support for 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2668\"\u003e#2668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/3850298de90deca18c5aac04f120fc15843fdc54\"\u003e\u003ccode\u003e3850298\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2666\"\u003e#2666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/google-api-python-client/compare/v2.184.0...v2.187.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.41.1 to 2.45.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth 2.45.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.44.0...v2.45.0\"\u003e2.45.0\u003c/a\u003e (2025-12-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding Agent Identity bound token support and handling certificate mismatches with retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1890\"\u003e#1890\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b32c934e\"\u003eb32c934e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth 2.44.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.43.0...v2.44.0\"\u003e2.44.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMDS connections use mTLS (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1856\"\u003e#1856\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0387bb95\"\u003e0387bb95\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003esupport Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1822\"\u003e#1822\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0f7097e7\"\u003e0f7097e7\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd ecdsa p-384 support (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1872\"\u003e#1872\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/39c381a5\"\u003e39c381a5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd shlex to correctly parse executable commands with spaces (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1855\"\u003e#1855\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/cf6fc3cc\"\u003ecf6fc3cc\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement token revocation in STS client and add revoke() metho… (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1849\"\u003e#1849\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/d5638986\"\u003ed5638986\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd temporary patch to workload cert logic to accomodate Cloud Run mis-configuration (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1880\"\u003e#1880\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/78de7907\"\u003e78de7907\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDelegate workload cert and key default lookup to helper function (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1877\"\u003e#1877\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b0993c7e\"\u003eb0993c7e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse public refresh method for source credentials in ImpersonatedCredentials (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1884\"\u003e#1884\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e0c3296f\"\u003ee0c3296f\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth 2.43.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.42.1...v2.43.0\"\u003e2.43.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd public wrapper for _mtls_helper.check_use_client_cert which enables mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE is not set, when the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1859\"\u003e#1859\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/1535eccb\"\u003e1535eccb\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eEnable mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE  is not set, if the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1848\"\u003e#1848\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/395e405b\"\u003e395e405b\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eonboard \u003ccode\u003egoogle-auth\u003c/code\u003e to librarian (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1838\"\u003e#1838\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/c503eaa5\"\u003ec503eaa5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.42.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.42.0...v2.42.1\"\u003e2.42.1\u003c/a\u003e (2025-10-30)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCatch ValueError for json.loads() (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1842\"\u003e#1842\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b074cad460589633adfc6744c01726ae86f2aa2b\"\u003eb074cad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.42.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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/blob/main/CHANGELOG.md\"\u003egoogle-auth's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.44.0...v2.45.0\"\u003e2.45.0\u003c/a\u003e (2025-12-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding Agent Identity bound token support and handling certificate mismatches with retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1890\"\u003e#1890\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b32c934e6b0d09b94c467cd432a0a635e8b05f5c\"\u003eb32c934e6b0d09b94c467cd432a0a635e8b05f5c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.43.0...v2.44.0\"\u003e2.44.0\u003c/a\u003e (2025-12-13)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1822\"\u003e#1822\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0f7097e78f247665b6ef0287d482033f7be2ed6d\"\u003e0f7097e78f247665b6ef0287d482033f7be2ed6d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd ecdsa p-384 support (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1872\"\u003e#1872\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/39c381a5f6881b590025f36d333d12eff8dc60fc\"\u003e39c381a5f6881b590025f36d333d12eff8dc60fc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMDS connections use mTLS (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1856\"\u003e#1856\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0387bb95713653d47e846cad3a010eb55ef2db4c\"\u003e0387bb95713653d47e846cad3a010eb55ef2db4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement token revocation in STS client and add revoke() metho… (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1849\"\u003e#1849\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/d5638986ca03ee95bfffa9ad821124ed7e903e63\"\u003ed5638986ca03ee95bfffa9ad821124ed7e903e63\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd shlex to correctly parse executable commands with spaces (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1855\"\u003e#1855\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/cf6fc3cced78bc1362a7fe596c32ebc9ce03c26b\"\u003ecf6fc3cced78bc1362a7fe596c32ebc9ce03c26b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse public refresh method for source credentials in ImpersonatedCredentials (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1884\"\u003e#1884\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e0c3296f471747258f6d98d2d9bfde636358ecde\"\u003ee0c3296f471747258f6d98d2d9bfde636358ecde\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd temporary patch to workload cert logic to accomodate Cloud Run mis-configuration (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1880\"\u003e#1880\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/78de7907b8bdb7b5510e3c6fa8a3f3721e2436d7\"\u003e78de7907b8bdb7b5510e3c6fa8a3f3721e2436d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDelegate workload cert and key default lookup to helper function (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1877\"\u003e#1877\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b0993c7edaba505d0fb0628af28760c43034c959\"\u003eb0993c7edaba505d0fb0628af28760c43034c959\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.42.1...google-auth-v2.43.0\"\u003e2.43.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd public wrapper for _mtls_helper.check_use_client_cert which enables mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE is not set, when the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1859\"\u003e#1859\u003c/a\u003e) Add public wrapper for check_use_client_cert which enables mTLS if\nGOOGLE_API_USE_CLIENT_CERTIFICATE is not set, when the MWID/X.509 cert\nsources detected. Also, fix check_use_client_cert to return boolean\nvalue.\nChange \u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1848\"\u003e#1848\u003c/a\u003e added the check_use_client_cert method that helps know if\nclient cert should be used for mTLS connection. However, that was in a\nprivate class, thus, created a public wrapper of the same function so\nthat it can be used by python Client Libraries. Also, updated\ncheck_use_client_cert to return a boolean value instead of existing\nstring value for better readability and future scope.\n--------- (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1535eccbff0ad8f3fd6a9775316ac8b77dca66ba\"\u003e1535eccbff0ad8f3fd6a9775316ac8b77dca66ba\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnable mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE  is not set, if the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1848\"\u003e#1848\u003c/a\u003e) The Python SDK will use a hybrid approach for mTLS enablement:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cul\u003e\n\u003cli\u003eIf the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is set\n(either true or false), the SDK will respect that setting. This is\nnecessary for test scenarios and users who need to explicitly control\nmTLS behavior.\u003c/li\u003e\n\u003cli\u003eIf the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is not\nset, the SDK will automatically enable mTLS only if it detects Managed\nWorkload Identity (MWID) or X.509 Workforce Identity Federation (WIF)\ncertificate sources. In other cases where the variable is not set, mTLS\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/googleapis/google-auth-library-python/commit/08fabf776c02dc6a70472b3ddd9733d66d0053bf\"\u003e\u003ccode\u003e08fabf7\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251215T132028Z (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1891\"\u003e#1891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b32c934e6b0d09b94c467cd432a0a635e8b05f5c\"\u003e\u003ccode\u003eb32c934\u003c/code\u003e\u003c/a\u003e feat: Adding Agent Identity bound token support and handling certificate mism...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/262eb9e33d58ffeb536ecd083c22d9fb12c808e6\"\u003e\u003ccode\u003e262eb9e\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T161150Z (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1888\"\u003e#1888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0f7097e78f247665b6ef0287d482033f7be2ed6d\"\u003e\u003ccode\u003e0f7097e\u003c/code\u003e\u003c/a\u003e feat: support Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1822\"\u003e#1822\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e0c3296f471747258f6d98d2d9bfde636358ecde\"\u003e\u003ccode\u003ee0c3296\u003c/code\u003e\u003c/a\u003e fix(auth): Use public refresh method for source credentials in ImpersonatedCr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/78de7907b8bdb7b5510e3c6fa8a3f3721e2436d7\"\u003e\u003ccode\u003e78de790\u003c/code\u003e\u003c/a\u003e fix(auth): Add temporary patch to workload cert logic to accomodate Cloud Run...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3e8a56687fd050ff44a35cc8db0e95e996648173\"\u003e\u003ccode\u003e3e8a566\u003c/code\u003e\u003c/a\u003e chore(tests): allow expired secret in system tests (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1883\"\u003e#1883\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b0993c7edaba505d0fb0628af28760c43034c959\"\u003e\u003ccode\u003eb0993c7\u003c/code\u003e\u003c/a\u003e fix(auth): Delegate workload cert and key default lookup to helper function (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/2c374d36a61569b75d11c17fae124d591c52ddc6\"\u003e\u003ccode\u003e2c374d3\u003c/code\u003e\u003c/a\u003e chore: update secret (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1879\"\u003e#1879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/39c381a5f6881b590025f36d333d12eff8dc60fc\"\u003e\u003ccode\u003e39c381a\u003c/code\u003e\u003c/a\u003e feat: add ecdsa p-384 support (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1872\"\u003e#1872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.41.1...v2.45.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.21.0 to 2.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.23.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c02328\"\u003e85c02328\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/df729015\"\u003edf729015\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e85c023287daebb0d5c1a009e2beaccf0c6ea75eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-datastore-v2.21.0...google-cloud-datastore-v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/df729015149bd69e9d6dbced260d97c8eed77d4f\"\u003edf729015149bd69e9d6dbced260d97c8eed77d4f\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/googleapis/python-datastore/commit/29459a4d6ea0c431c802cf86bd6931f10cb0bcd2\"\u003e\u003ccode\u003e29459a4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T133331Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/659\"\u003e#659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/92a1a33a67d56690562c91161d2f7306fc41b1ed\"\u003e\u003ccode\u003e92a1a33\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for batches without context managers (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/578\"\u003e#578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e\u003ccode\u003e85c0232\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/84f880b955ed7a0310d4c0be9911d41db2699bea\"\u003e\u003ccode\u003e84f880b\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T152033Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/66c1e47cd77bac48367578339c947402af8952bf\"\u003e\u003ccode\u003e66c1e47\u003c/code\u003e\u003c/a\u003e chore(tests): update kokoro continuous test config (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/117793c1914039b5b805bd1af888fc50140ba780\"\u003e\u003ccode\u003e117793c\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/2dc9afcf55d2cf1efb4933aa43b5267cb8b803c9\"\u003e\u003ccode\u003e2dc9afc\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/642\"\u003e#642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/f1eedbf857976560bb581961be8f8feced52b77d\"\u003e\u003ccode\u003ef1eedbf\u003c/code\u003e\u003c/a\u003e chore(python): Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9dece547a86e114aea8821c8ac07fe7304529ee5\"\u003e\u003ccode\u003e9dece54\u003c/code\u003e\u003c/a\u003e chore: remove unused files (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/34f6b27db61c6414cca7bbc929767bbefd66ea55\"\u003e\u003ccode\u003e34f6b27\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.23.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-firestore` from 2.21.0 to 2.22.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-firestore/releases\"\u003egoogle-cloud-firestore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-firestore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1140\"\u003e#1140\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/403afb08\"\u003e403afb08\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpose tags field in Database and RestoreDatabaseRequest public protos (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1074\"\u003e#1074\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/49836391\"\u003e49836391\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1110\"\u003e#1110\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/52b2055d\"\u003e52b2055d\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded read_time as a parameter to various calls (synchronous/base classes) (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1050\"\u003e#1050\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d8e3af1f\"\u003ed8e3af1f\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eupdate the async transactional types (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1066\"\u003e#1066\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/210a14a4\"\u003e210a14a4\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eimprove typing (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1136\"\u003e#1136\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d1c730d9\"\u003ed1c730d9\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-firestore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-firestore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1140\"\u003e#1140\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/403afb08109c8271eddd97d6172136271cc0a8a9\"\u003e403afb08109c8271eddd97d6172136271cc0a8a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1110\"\u003e#1110\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/52b2055d01ab5d2c34e00f8861e29990f89cd3d8\"\u003e52b2055d01ab5d2c34e00f8861e29990f89cd3d8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose tags field in Database and RestoreDatabaseRequest public protos (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1074\"\u003e#1074\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/49836391dc712bd482781a26ccd3c8a8408c473b\"\u003e49836391dc712bd482781a26ccd3c8a8408c473b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded read_time as a parameter to various calls (synchronous/base classes) (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1050\"\u003e#1050\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d8e3af1f9dbdfaf5df0d993a0a7e28883472c621\"\u003ed8e3af1f9dbdfaf5df0d993a0a7e28883472c621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimprove typing (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1136\"\u003e#1136\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d1c730d9eef867d16d7818a75f7d58439a942c1d\"\u003ed1c730d9eef867d16d7818a75f7d58439a942c1d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate the async transactional types (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1066\"\u003e#1066\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/210a14a4b758d70aad05940665ed2a2a21ae2a8b\"\u003e210a14a4b758d70aad05940665ed2a2a21ae2a8b\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/googleapis/python-firestore/commit/9b030493b6a0fe6ba0739bd874bad6d04fa758c9\"\u003e\u003ccode\u003e9b03049\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T132411Z (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/cdd926a714fdcbb12ac218a04092a6dd3f99870d\"\u003e\u003ccode\u003ecdd926a\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251216T191850Z (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1144\"\u003e#1144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/9f9f182be1f6ea95bbea373b2c3c1be3cf2c2ebb\"\u003e\u003ccode\u003e9f9f182\u003c/code\u003e\u003c/a\u003e chore: fix broken Python 3.13 documentation link (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1135\"\u003e#1135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/403afb08109c8271eddd97d6172136271cc0a8a9\"\u003e\u003ccode\u003e403afb0\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1140\"\u003e#1140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d1c730d9eef867d16d7818a75f7d58439a942c1d\"\u003e\u003ccode\u003ed1c730d\u003c/code\u003e\u003c/a\u003e fix(types): improve typing (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1136\"\u003e#1136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d637aee74d364191579e86e285aac40ce2ab0dd5\"\u003e\u003ccode\u003ed637aee\u003c/code\u003e\u003c/a\u003e chore(librarian): Update Librarian container image SHA (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1131\"\u003e#1131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/5a4c312d8825ec6208a32d29ba831589db97aa1e\"\u003e\u003ccode\u003e5a4c312\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/fcfeea76a513e585ea26e1f3a0b78d9aad131063\"\u003e\u003ccode\u003efcfeea7\u003c/code\u003e\u003c/a\u003e chore(python): remove configure_previous_major_version_branches (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/f4953d6678ea810ba8741b3e01a419ce47c3e118\"\u003e\u003ccode\u003ef4953d6\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1077\"\u003e#1077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/65d9d16535b2007676e9fd928f08d7d5b4e9234f\"\u003e\u003ccode\u003e65d9d16\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for aggregations (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1109\"\u003e#1109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-firestore/compare/v2.21.0...v2.22.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/broadinstitute/bits-appengine/pull/130","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/broadinstitute%2Fbits-appengine/issues/130","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/130/packages"},{"uuid":"3749864656","node_id":"PR_kwDOO7afqM658hty","number":630,"state":"open","title":"chore(deps): bump google-cloud-datastore from 2.19.0 to 2.23.0 in /Server/ChatService","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":"2025-12-20T09:47:23.000Z","updated_at":"2025-12-20T09:52:26.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"google-cloud-datastore","old_version":"2.19.0","new_version":"2.23.0","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/Server/ChatService","ecosystem":"pip"},"body":"Bumps [google-cloud-datastore](https://github.com/googleapis/python-datastore) from 2.19.0 to 2.23.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.23.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c02328\"\u003e85c02328\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/df729015\"\u003edf729015\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e85c023287daebb0d5c1a009e2beaccf0c6ea75eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-datastore-v2.21.0...google-cloud-datastore-v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/df729015149bd69e9d6dbced260d97c8eed77d4f\"\u003edf729015149bd69e9d6dbced260d97c8eed77d4f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\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/googleapis/python-datastore/commit/29459a4d6ea0c431c802cf86bd6931f10cb0bcd2\"\u003e\u003ccode\u003e29459a4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T133331Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/659\"\u003e#659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/92a1a33a67d56690562c91161d2f7306fc41b1ed\"\u003e\u003ccode\u003e92a1a33\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for batches without context managers (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/578\"\u003e#578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e\u003ccode\u003e85c0232\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/84f880b955ed7a0310d4c0be9911d41db2699bea\"\u003e\u003ccode\u003e84f880b\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T152033Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/66c1e47cd77bac48367578339c947402af8952bf\"\u003e\u003ccode\u003e66c1e47\u003c/code\u003e\u003c/a\u003e chore(tests): update kokoro continuous test config (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/117793c1914039b5b805bd1af888fc50140ba780\"\u003e\u003ccode\u003e117793c\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/2dc9afcf55d2cf1efb4933aa43b5267cb8b803c9\"\u003e\u003ccode\u003e2dc9afc\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/642\"\u003e#642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/f1eedbf857976560bb581961be8f8feced52b77d\"\u003e\u003ccode\u003ef1eedbf\u003c/code\u003e\u003c/a\u003e chore(python): Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9dece547a86e114aea8821c8ac07fe7304529ee5\"\u003e\u003ccode\u003e9dece54\u003c/code\u003e\u003c/a\u003e chore: remove unused files (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/34f6b27db61c6414cca7bbc929767bbefd66ea55\"\u003e\u003ccode\u003e34f6b27\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.23.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=google-cloud-datastore\u0026package-manager=pip\u0026previous-version=2.19.0\u0026new-version=2.23.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/Froillan123/Faceofmind/pull/630","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Froillan123%2FFaceofmind/issues/630","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/630/packages"},{"uuid":"3737238625","node_id":"PR_kwDOE93bYM65SHyx","number":460,"state":"closed","title":"Bump google-cloud-datastore from 2.10.0 to 2.23.0","user":"dependabot[bot]","labels":["dependencies","Auto-Closed","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-02-23T13:46:58.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-17T04:01:46.000Z","updated_at":"2026-02-23T13:47:07.000Z","time_to_close":5910312,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"google-cloud-datastore","old_version":"2.10.0","new_version":"2.23.0","repository_url":"https://github.com/googleapis/python-datastore"}],"path":null,"ecosystem":"pip"},"body":"Bumps [google-cloud-datastore](https://github.com/googleapis/python-datastore) from 2.10.0 to 2.23.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.23.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c02328\"\u003e85c02328\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/df729015\"\u003edf729015\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e85c023287daebb0d5c1a009e2beaccf0c6ea75eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-datastore-v2.21.0...google-cloud-datastore-v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/df729015149bd69e9d6dbced260d97c8eed77d4f\"\u003edf729015149bd69e9d6dbced260d97c8eed77d4f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\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/googleapis/python-datastore/commit/29459a4d6ea0c431c802cf86bd6931f10cb0bcd2\"\u003e\u003ccode\u003e29459a4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T133331Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/659\"\u003e#659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/92a1a33a67d56690562c91161d2f7306fc41b1ed\"\u003e\u003ccode\u003e92a1a33\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for batches without context managers (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/578\"\u003e#578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e\u003ccode\u003e85c0232\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/84f880b955ed7a0310d4c0be9911d41db2699bea\"\u003e\u003ccode\u003e84f880b\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T152033Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/66c1e47cd77bac48367578339c947402af8952bf\"\u003e\u003ccode\u003e66c1e47\u003c/code\u003e\u003c/a\u003e chore(tests): update kokoro continuous test config (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/117793c1914039b5b805bd1af888fc50140ba780\"\u003e\u003ccode\u003e117793c\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/2dc9afcf55d2cf1efb4933aa43b5267cb8b803c9\"\u003e\u003ccode\u003e2dc9afc\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/642\"\u003e#642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/f1eedbf857976560bb581961be8f8feced52b77d\"\u003e\u003ccode\u003ef1eedbf\u003c/code\u003e\u003c/a\u003e chore(python): Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9dece547a86e114aea8821c8ac07fe7304529ee5\"\u003e\u003ccode\u003e9dece54\u003c/code\u003e\u003c/a\u003e chore: remove unused files (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/34f6b27db61c6414cca7bbc929767bbefd66ea55\"\u003e\u003ccode\u003e34f6b27\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.10.0...v2.23.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=google-cloud-datastore\u0026package-manager=pip\u0026previous-version=2.10.0\u0026new-version=2.23.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/MrBotDeveloper/PDF-Bot/pull/460","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrBotDeveloper%2FPDF-Bot/issues/460","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/460/packages"},{"uuid":"3697921715","node_id":"PR_kwDODRkoPc63PaIn","number":1792,"state":"open","title":"Bump the production-dependencies group with 20 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":"2025-12-05T08:13:24.000Z","updated_at":"2025-12-19T12:30:53.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":20,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.76.0","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.4","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.42.3","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.14.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.1.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.6.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"6.4.0","new_version":"7.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.23","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.33.0","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"5.5.2","new_version":"6.2.2","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 20 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.76.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.4` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.42.3` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.14.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.1.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.6.0` |\n| [redis](https://github.com/redis/redis-py) | `6.4.0` | `7.1.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.23` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.33.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.20.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `5.5.2` | `6.2.2` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\nUpdates `flask` from 3.1.1 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.76.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.76.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.76.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egenuine\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePrioritize system CA over bundled CA. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40583\"\u003e#40583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[event_engine] Introduce a event_engine_poller_for_python experiment. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40243\"\u003e#40243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[metrics] add grpc.lb.backend_service label. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40486\"\u003e#40486\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[csharp tools] \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39374\"\u003e#39374\u003c/a\u003e Grpc.Tools can't process file Suffix name with Upper character. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40072\"\u003e#40072\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] gRPC AsyncIO: Improve CompletionQueue polling performance. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39993\"\u003e#39993\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.76.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.76.0 (genuine).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis prerelease contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eRelease v1.75.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.75.1 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRelease grpcio wheels with Python 3.14 support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40403\"\u003e#40403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAsyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40447\"\u003e#40447\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eThis also addresses previously reported issues with empty error message on Python interpreter exit (\u003ccode\u003eError in sys.excepthook:\u003c/code\u003e/\u003ccode\u003eOriginal exception was:\u003c/code\u003e empty): \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/36655\"\u003e#36655\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/38679\"\u003e#38679\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/33342\"\u003e#33342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePython 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40750\"\u003e#40750\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eNote: using async methods outside of a running event loop is \u003ca href=\"https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies\"\u003ediscouraged\u003c/a\u003e by Python, and \u003cstrong\u003ewill be deprecated in future gRPC releases\u003c/strong\u003e. Please use the \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run\"\u003easyncio.run()\u003c/a\u003e function (or \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner\"\u003easyncio.Runner\u003c/a\u003e for custom loop factories). For interactive mode, use dedicated \u003ca href=\"https://docs.python.org/3/library/asyncio.html#asyncio-cli\"\u003easyncio REPL\u003c/a\u003e: \u003ccode\u003epython -m asyncio\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f5ffb68d8a2fd603dff16287e90a4ac571e1fec6\"\u003e\u003ccode\u003ef5ffb68\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.76.0 (on v1.76.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40925\"\u003e#40925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ffd83794b3804739c0789096155833e302ac1270\"\u003e\u003ccode\u003effd8379\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.76.0-pre1 (on v1.76.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40798\"\u003e#40798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/835d394034060002262ab4e404e552ac0393a1a1\"\u003e\u003ccode\u003e835d394\u003c/code\u003e\u003c/a\u003e [Release] Bump core version to 51.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40784\"\u003e#40784\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/de6ce7f32b1bf254d2b4c04e8872b63284632fd3\"\u003e\u003ccode\u003ede6ce7f\u003c/code\u003e\u003c/a\u003e [PH2] Add files for goaway support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40786\"\u003e#40786\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f7dd7f4b4186049d104aa2c88ad4432f58c19ede\"\u003e\u003ccode\u003ef7dd7f4\u003c/code\u003e\u003c/a\u003e [PH2][Trivial][CleanUp]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/2d40a376c7ea72602fa7bc62606324b1ff14c44f\"\u003e\u003ccode\u003e2d40a37\u003c/code\u003e\u003c/a\u003e [PH2][ChannelZ][ZTrace][Skeleton]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/83acb278bef565d8d46d6e19582eaacc86f737a3\"\u003e\u003ccode\u003e83acb27\u003c/code\u003e\u003c/a\u003e [build] Add Missing Dependencies for reflection_proto in Preparation for Enab...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/abfe8a29d31a8ab9ff6cdda11cdfa2813cb59632\"\u003e\u003ccode\u003eabfe8a2\u003c/code\u003e\u003c/a\u003e [PH2] Stream list represents streams open for reads.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c65d8de800aaa907b45cee54ebcd29d5b556d3ca\"\u003e\u003ccode\u003ec65d8de\u003c/code\u003e\u003c/a\u003e [PH2][Expt] Fix the experiment expiry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/755d025f16d20641155e89ecc46777e94e9e172d\"\u003e\u003ccode\u003e755d025\u003c/code\u003e\u003c/a\u003e Fix latent_see_test flakiness\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.76.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.4 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.4...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eLambdaTest\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e), and Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument. \u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\ncr.exception_formatter = structlog.dev.plain_traceback\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.4.0...25.5.0\"\u003e25.5.0\u003c/a\u003e - 2025-10-27\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument.\n\u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\ncr.exception_formatter = structlog.dev.plain_traceback\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.RichTracebackFormatter\u003c/code\u003e now exposes the upstream \u003cem\u003ecode_width\u003c/em\u003e parameter.\nDefault \u003cem\u003ewidth\u003c/em\u003e is now \u003ccode\u003eNone\u003c/code\u003e for full terminal width.\nFull terminal width is now handled by Rich itself, bringing support for reflow and \u003ccode\u003eCOLUMN\u003c/code\u003e environment variable.\nPassing \u003ccode\u003e-1\u003c/code\u003e for \u003cem\u003ewidth\u003c/em\u003e is now deprecated and automatically replaced by \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/717\"\u003e#717\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNative loggers now allow the passing of a dictionary for dictionary-based interpolation \u003ccode\u003elog.info(\u0026quot;hello %(name)s!\u0026quot;, {\u0026quot;name\u0026quot;: \u0026quot;world\u0026quot;})\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/748\"\u003e#748\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOn Python 3.11+, \u003ccode\u003estructlog.processors.CallsiteParameterAdder\u003c/code\u003e now supports \u003ccode\u003eCallsiteParameter.QUAL_NAME\u003c/code\u003e that adds the qualified name of the callsite, including scope and class names.\nThis is only available for \u003cem\u003estructlog\u003c/em\u003e-originated events since the standard library has no equivalent.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.stdlib.LoggerFactory\u003c/code\u003e now supports the \u003cem\u003estacklevel\u003c/em\u003e parameter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/763\"\u003e#763\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/hynek/structlog/commit/c0ef9e09e7a536cae65e33c1ac1c8b4e6a6f7511\"\u003e\u003ccode\u003ec0ef9e0\u003c/code\u003e\u003c/a\u003e Prepare 25.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/9cb662fe32046f92f08346c58089a2dcba7cb4bf\"\u003e\u003ccode\u003e9cb662f\u003c/code\u003e\u003c/a\u003e docs: nit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5400612735ad07bbe8ee9f2279f3040aa2e69ca4\"\u003e\u003ccode\u003e5400612\u003c/code\u003e\u003c/a\u003e docs/stdlib: add warning about ProcessorFormatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/1c2c19aa19c8f30330b76465b7a0d9993b9e8360\"\u003e\u003ccode\u003e1c2c19a\u003c/code\u003e\u003c/a\u003e Try validating pyproject.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/aca10f23dd12bd9e14cfe712f1ce66c9cb5f4400\"\u003e\u003ccode\u003eaca10f2\u003c/code\u003e\u003c/a\u003e Drop pretend dependency (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/3800d401db2c682c7c83b2d3eec38d81c9791f4d\"\u003e\u003ccode\u003e3800d40\u003c/code\u003e\u003c/a\u003e docs: use native\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ecaa15ac6b166ebca9f2b4f5cfdb4c4ec138a602\"\u003e\u003ccode\u003eecaa15a\u003c/code\u003e\u003c/a\u003e stdlib: add support for stacklevel (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/763\"\u003e#763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/7f7a221aed6bbff3c13cefd7effe14cc4f0cfc24\"\u003e\u003ccode\u003e7f7a221\u003c/code\u003e\u003c/a\u003e update dev (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5acfc85e3c3fa821dc65b55a226900d40dc0831c\"\u003e\u003ccode\u003e5acfc85\u003c/code\u003e\u003c/a\u003e docs: 5% bigger still\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/c102862e3f30de84c898c4501418dede15056c6d\"\u003e\u003ccode\u003ec102862\u003c/code\u003e\u003c/a\u003e docs: bigger font\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.42.3\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/347117552e90ab6fc8a3e6a459f0a00ec0ca0a48\"\u003e\u003ccode\u003e3471175\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.3'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2e3d1258ad9cb30f38d3c54b1b5e847b83a2d13b\"\u003e\u003ccode\u003e2e3d125\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/04ebd3cbea961c39ea1fea5edfd24442d299eb1d\"\u003e\u003ccode\u003e04ebd3c\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/cc95ab6caa73634e01a03c82f310d002a5f3e71d\"\u003e\u003ccode\u003ecc95ab6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.2'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/743b8e411a11015a0a0ee584cd0f3b947687a666\"\u003e\u003ccode\u003e743b8e4\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.2' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8f7ba800ea3e2c252b2d9ed4abd4f00309a79511\"\u003e\u003ccode\u003e8f7ba80\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/119aff9051ef423ee2fbf963bd6640d66c5ee86a\"\u003e\u003ccode\u003e119aff9\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/65b24a41d1a03edb6fcdbff65ca14a3b11bcd962\"\u003e\u003ccode\u003e65b24a4\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.1'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/71a06cf0c53ed1d6819e37669fb800949aee398e\"\u003e\u003ccode\u003e71a06cf\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.1' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5991e64f13b81bbc1b88c549bafc633708ecc17f\"\u003e\u003ccode\u003e5991e64\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.42.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Uzbek language (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/264\"\u003e#264\u003c/a\u003e) \u003ca href=\"https://github.com/sSimuSs\"\u003e\u003ccode\u003e@​sSimuSs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/268\"\u003e#268\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/fedf432b5bd7751b3417447b647e43aa2ac7507d\"\u003e\u003ccode\u003efedf432\u003c/code\u003e\u003c/a\u003e Add Uzbek language (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bbc0398e8c1cf062d3fa4a79d1dc9f58aa26da26\"\u003e\u003ccode\u003ebbc0398\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/c8810e2d559e633cc48bc180d1bfe6364d04c169\"\u003e\u003ccode\u003ec8810e2\u003c/code\u003e\u003c/a\u003e Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/c16587b7ba97dcd763a79ccb88b9a01bfddbdfc3\"\u003e\u003ccode\u003ec16587b\u003c/code\u003e\u003c/a\u003e Update github-actions (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/947a6b13f0e44eda81c10d8403d3c2ccab01a1b2\"\u003e\u003ccode\u003e947a6b1\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.18.2 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/266\"\u003e#266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/41903865abf4244c38b6340b0217611d9b86db1c\"\u003e\u003ccode\u003e4190386\u003c/code\u003e\u003c/a\u003e Update dependency mkdocstrings to v0.30.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/265\"\u003e#265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.1.0 (2025-11-01)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e__len__\u003c/code\u003e implementation to \u003ccode\u003emissing\u003c/code\u003e so that it can be used with\n\u003ccode\u003evalidate.Length \u0026lt;marshmallow.validate.Length\u0026gt;\u003c/code\u003e (:pr:\u003ccode\u003e2861\u003c/code\u003e).\nThanks :user:\u003ccode\u003eagentgodzilla\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 (:pr:\u003ccode\u003e2363\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eTest against Python 3.14.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\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/marshmallow-code/marshmallow/commit/441213d310d1a6a2b47ef99c04ea9db65aee33ae\"\u003e\u003ccode\u003e441213d\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2b84b56e9a80d07b65d74811673e8e5cf46cd0f1\"\u003e\u003ccode\u003e2b84b56\u003c/code\u003e\u003c/a\u003e (fix) missing constant with len validation (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2861\"\u003e#2861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/fc8726244820b9f08fb7d02e007ed8d378a46c7b\"\u003e\u003ccode\u003efc87262\u003c/code\u003e\u003c/a\u003e Test against Python 3.14 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2864\"\u003e#2864\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2a5e2e1fd43ee0df6320edcbd2567e1dcc2da819\"\u003e\u003ccode\u003e2a5e2e1\u003c/code\u003e\u003c/a\u003e Update CHANGELOG\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/d861be73bc3c70e727ee729dbe7669d6a2d4c284\"\u003e\u003ccode\u003ed861be7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2863\"\u003e#2863\u003c/a\u003e from marshmallow-code/drop_python_39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/22288b64532252ef2929c109e0c2ce7f9afe5edd\"\u003e\u003ccode\u003e22288b6\u003c/code\u003e\u003c/a\u003e Fix ruff issues\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/1d8fd278b1a617bc4a01912f5660c4ab7374e662\"\u003e\u003ccode\u003e1d8fd27\u003c/code\u003e\u003c/a\u003e Drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/966caf9ba106f70ca72974bbd9ee6d44d522ce7d\"\u003e\u003ccode\u003e966caf9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/feb22442d07a9f8e23920a7845da117b468c7868\"\u003e\u003ccode\u003efeb2244\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2857\"\u003e#2857\u003c/a\u003e from marshmallow-code/disable_RUF043\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/23ee36370f26f3144be395040cf7cdf6ffc86f37\"\u003e\u003ccode\u003e23ee363\u003c/code\u003e\u003c/a\u003e Disable RUF043 in tests: allow metacharacters in match patterns\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.6.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.5.0...v3.6.0\"\u003e3.6.0\u003c/a\u003e (2025-11-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for partial list buckets (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1606\"\u003e#1606\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/92fc2b00429415b9fbe7cba0167778eee60449e2\"\u003e92fc2b0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake return_partial_success and unreachable fields public for list Bucket (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1601\"\u003e#1601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/323cddd5d439e04e12614106eab1928fd4008c0b\"\u003e323cddd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1612\"\u003e#1612\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDont pass credentials to StorageClient (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1608\"\u003e#1608\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/195d644c4d4feec98e9a9cd9fad67fc774c50dc8\"\u003e195d644\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.1...v3.5.0\"\u003e3.5.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure that Python in FIPS mode can fetch MD5 implementation (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1522\"\u003e#1522\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/961536c7bf3652a824c207754317030526b9dd28\"\u003e961536c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProvide option to update \u003ccode\u003euser_agent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1596\"\u003e#1596\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/02f1451aaa8dacd10a862e97abb62ae48249b9b4\"\u003e02f1451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate credentials_file argument (\u003ca href=\"https://github.com/googleapis/python-storage/commit/74415a2a120e9bfa42f4f5fc8bd2f8e0d4cf5d18\"\u003e74415a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFlaky system tests for resumable_media (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1592\"\u003e#1592\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7fee3dd3390cfb5475a39d8f8272ea825dbda449\"\u003e7fee3dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse separate header object for each upload in Transfer Manager MPU (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1595\"\u003e#1595\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0d867bd4f405d2dbeca1edfc8072080c5a96c1cd\"\u003e0d867bd\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.0...v3.4.1\"\u003e3.4.1\u003c/a\u003e (2025-10-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixes \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1561\"\u003e#1561\u003c/a\u003e by adding an option to specify the entire object checksum for resumable uploads via the \u003ccode\u003eupload_from_string\u003c/code\u003e, \u003ccode\u003eupload_from_file\u003c/code\u003e, and \u003ccode\u003eupload_from_filename\u003c/code\u003e methods (\u003ca href=\"https://github.com/googleapis/python-storage/commit/acb918e20f7092e13d72fc63fe4ae2560bfecd40\"\u003eacb918e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.5.0...v3.6.0\"\u003e3.6.0\u003c/a\u003e (2025-11-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for partial list buckets (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1606\"\u003e#1606\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/92fc2b00429415b9fbe7cba0167778eee60449e2\"\u003e92fc2b0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake return_partial_success and unreachable fields public for list Bucket (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1601\"\u003e#1601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/323cddd5d439e04e12614106eab1928fd4008c0b\"\u003e323cddd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1612\"\u003e#1612\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDont pass credentials to StorageClient (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1608\"\u003e#1608\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/195d644c4d4feec98e9a9cd9fad67fc774c50dc8\"\u003e195d644\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.1...v3.5.0\"\u003e3.5.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add base resumption strategy for bidi streams (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1594\"\u003e#1594\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5fb85ea544dcc9ed9dca65957c872c3811f02b87\"\u003e5fb85ea\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add checksum for bidi reads operation (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1566\"\u003e#1566\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/93ce515d60f0ac77ab83680ba2b4d6a9f57e75d0\"\u003e93ce515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1599\"\u003e#1599\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5d5e895e173075da557b58614fecc84086aaf9cb\"\u003e5d5e895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Handle BidiReadObjectRedirectedError for bidi reads (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1600\"\u003e#1600\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/71b0f8a368a61bed9bd793a059f980562061223e\"\u003e71b0f8a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIndicate that md5 is used as a CRC (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1522\"\u003e#1522\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/961536c7bf3652a824c207754317030526b9dd28\"\u003e961536c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProvide option to update user_agent (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1596\"\u003e#1596\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/02f1451aaa8dacd10a862e97abb62ae48249b9b4\"\u003e02f1451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate credentials_file argument (\u003ca href=\"https://github.com/googleapis/python-storage/commit/74415a2a120e9bfa42f4f5fc8bd2f8e0d4cf5d18\"\u003e74415a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFlaky system tests for resumable_media (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1592\"\u003e#1592\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7fee3dd3390cfb5475a39d8f8272ea825dbda449\"\u003e7fee3dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse separate header object for each upload in Transfer Manager MPU (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1595\"\u003e#1595\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0d867bd4f405d2dbeca1edfc8072080c5a96c1cd\"\u003e0d867bd\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.0...v3.5.0\"\u003e3.4.1\u003c/a\u003e (2025-10-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixes \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1561\"\u003e#1561\u003c/a\u003e by adding an option to specify the entire object checksum for resumable uploads via the \u003ccode\u003eupload_from_string\u003c/code\u003e, \u003ccode\u003eupload_from_file\u003c/code\u003e, and \u003ccode\u003eupload_from_filename\u003c/code\u003e methods (\u003ca href=\"https://github.com/googleapis/python-storage/commit/acb918e20f7092e13d72fc63fe4ae2560bfecd40\"\u003eacb918e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\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/googleapis/python-storage/commit/0b70a288d238ef192952f5d9024395e17f74abcf\"\u003e\u003ccode\u003e0b70a28\u003c/code\u003e\u003c/a\u003e chore(main): release 3.6.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1603\"\u003e#1603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e\u003ccode\u003e5ab8103\u003c/code\u003e\u003c/a\u003e feat(zb-experimental): add async write object stream (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1612\"\u003e#1612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/92fc2b00429415b9fbe7cba0167778eee60449e2\"\u003e\u003ccode\u003e92fc2b0\u003c/code\u003e\u003c/a\u003e feat: add support for partial list buckets (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1606\"\u003e#1606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/195d644c4d4feec98e9a9cd9fad67fc774c50dc8\"\u003e\u003ccode\u003e195d644\u003c/code\u003e\u003c/a\u003e fix: dont pass credentials to StorageClient (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1608\"\u003e#1608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/323cddd5d439e04e12614106eab1928fd4008c0b\"\u003e\u003ccode\u003e323cddd\u003c/code\u003e\u003c/a\u003e feat: make return_partial_success and unreachable fields public for list Buck...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c2cd474d96ce39016ae00c59672f3ad42490c764\"\u003e\u003ccode\u003ec2cd474\u003c/code\u003e\u003c/a\u003e chore(main): release 3.5.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1568\"\u003e#1568\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/71b0f8a368a61bed9bd793a059f980562061223e\"\u003e\u003ccode\u003e71b0f8a\u003c/code\u003e\u003c/a\u003e feat(experimental): Handle BidiReadObjectRedirectedError for bidi reads (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1600\"\u003e#1600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5d5e895e173075da557b58614fecc84086aaf9cb\"\u003e\u003ccode\u003e5d5e895\u003c/code\u003e\u003c/a\u003e feat(experimental): Add read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1599\"\u003e#1599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5fb85ea544dcc9ed9dca65957c872c3811f02b87\"\u003e\u003ccode\u003e5fb85ea\u003c/code\u003e\u003c/a\u003e feat(experimental): Add base resumption strategy for bidi streams (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1594\"\u003e#1594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/0d867bd4f405d2dbeca1edfc8072080c5a96c1cd\"\u003e\u003ccode\u003e0d867bd\u003c/code\u003e\u003c/a\u003e fix: Use separate header object for each upload in Transfer Manager MPU (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1595\"\u003e#1595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 6.4.0 to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdding MSETEX command support. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3823\"\u003e#3823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding CLAIM option to XREADGROUP command + unit tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3825\"\u003e#3825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eApply routing and response aggregation policies in OSS Cluster mode (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3834\"\u003e#3834\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support for CAS/CAD commands. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3837\"\u003e#3837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding support for HYBRID search. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3813\"\u003e#3813\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3843\"\u003e#3843\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🔥 Breaking changes (in experimental features)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace default health check and failure detector with custom (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3822\"\u003e#3822\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd **options to parse functions for sentinel (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3831\"\u003e#3831\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGenerating unique command cache key (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3765\"\u003e#3765\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdding Redis 8.4 RC1 image to test matrix. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3820\"\u003e#3820\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove Python 3.9 support. Add Python 3.14 support. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3814\"\u003e#3814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSync readme with 7.0.1 and update lib version to latest stable released version - 7.0.1 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3821\"\u003e#3821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.52.0 to 0.53.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3827\"\u003e#3827\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 5 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3828\"\u003e#3828\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 3 to 4 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3829\"\u003e#3829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing flaky tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3833\"\u003e#3833\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3838\"\u003e#3838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate 8.4 RC image tag to 8.4-RC1-pre.2 for pipeline test matrix (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3832\"\u003e#3832\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing f-string when returning an error. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3841\"\u003e#3841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding latest 8.4 image to test matrix. Updating the Hybrid VSIM query format to be in sync with spec after srv issue was fixed. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3843\"\u003e#3843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand cluster READ_COMMANDS with additional read-only commands and reorganize the list of commands by category (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3845\"\u003e#3845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Type Hints for List Command Parameters from str to KeyT (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3848\"\u003e#3848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanging log level to be debug for failed maintenance notification enablement when enabled='auto' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3851\"\u003e#3851\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded custom event handler section (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3853\"\u003e#3853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanging current version to 8.4 as it is already GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3854\"\u003e#3854\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/ShubhamKaudewar\"\u003e\u003ccode\u003e@​ShubhamKaudewar\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/matthewwiese\"\u003e\u003ccode\u003e@​matthewwiese\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/peperon\"\u003e\u003ccode\u003e@​peperon\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.0.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003eThis release adds small fixes related to documentation.\u003c/p\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd 'multi_database' section to documentation index (313d93f)\u003c/li\u003e\n\u003cli\u003eRevised multi-database client documentation(78df745)\u003c/li\u003e\n\u003cli\u003eAdding info about Multi-database client in README.md (3f7a55e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1792","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1792","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1792/packages"},{"uuid":"2884041236","node_id":"PR_kwDOLVQ5ac6r5voU","number":63,"state":"open","title":"Bump the production-dependencies group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-10-03T07:15:07.000Z","updated_at":"2025-10-03T07:15:08.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":20,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.1","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.44","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"5.5.2","new_version":"6.2.0","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.1` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.44` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `5.5.2` | `6.2.0` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.75.1 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRelease grpcio wheels with Python 3.14 support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40403\"\u003e#40403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAsyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40447\"\u003e#40447\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eThis also addresses previously reported issues with empty error message on Python interpreter exit (\u003ccode\u003eError in sys.excepthook:\u003c/code\u003e/\u003ccode\u003eOriginal exception was:\u003c/code\u003e empty): \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/36655\"\u003e#36655\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/38679\"\u003e#38679\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/33342\"\u003e#33342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePython 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40750\"\u003e#40750\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eNote: using async methods outside of a running event loop is \u003ca href=\"https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies\"\u003ediscouraged\u003c/a\u003e by Python, and \u003cstrong\u003ewill be deprecated in future gRPC releases\u003c/strong\u003e. Please use the \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run\"\u003easyncio.run()\u003c/a\u003e function (or \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner\"\u003easyncio.Runner\u003c/a\u003e for custom loop factories). For interactive mode, use dedicated \u003ca href=\"https://docs.python.org/3/library/asyncio.html#asyncio-cli\"\u003easyncio REPL\u003c/a\u003e: \u003ccode\u003epython -m asyncio\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\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/grpc/grpc/commit/9b63ce0d513672c5daad4f28342f03863c5589e5\"\u003e\u003ccode\u003e9b63ce0\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Fix] PHP macOS build: composer sha sum update, harden ins...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ab7404867bcb4d8515839ddf6ff7f2134b3d3ec\"\u003e\u003ccode\u003e3ab7404\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.75.1 (on v1.75.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40773\"\u003e#40773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/876e1d1c8bb8dca840fba61d7950ac2e2d459df7\"\u003e\u003ccode\u003e876e1d1\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Handle python3.14 get_event_loop behavior changes...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/74ec067e2839a4625a74b966880737a5085a13cc\"\u003e\u003ccode\u003e74ec067\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable 3.14 supported wheels (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40726\"\u003e#40726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ff24d38a8115dbf1ab95337a348cda878de18ecf\"\u003e\u003ccode\u003eff24d38\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] aio: skip grpc/aio shutdown if py interpreter is ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.44\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/61ee9341bc847c75124ff01a08755c6ff1abf597\"\u003e\u003ccode\u003e61ee934\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.44'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/01553e722faf66a82ff448776c331b5cdd07e31a\"\u003e\u003ccode\u003e01553e7\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.44\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1b47e9ef31b73857517c2fcd4a0a123771d3a6c7\"\u003e\u003ccode\u003e1b47e9e\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/a295071652c108ad61257dc2e91e73d3b286ca22\"\u003e\u003ccode\u003ea295071\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a349ff94059ca8564880cbc4cfdd7ef1a448ddd1\"\u003e\u003ccode\u003ea349ff9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/86bb6e1cf0aabd28a549ef1d7e3f79dfbea3fd86\"\u003e\u003ccode\u003e86bb6e1\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.43\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9f52c6fc22757c723fb03990e59783ca749a660c\"\u003e\u003ccode\u003e9f52c6f\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/fe09306b610f592d9e2e0b307a68ee065c5d78c0\"\u003e\u003ccode\u003efe09306\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3d3a44d119c3e1060c124b8f2022119b1bbb5b96\"\u003e\u003ccode\u003e3d3a44d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d433126ae2cb74c0fa6406cec76b93aaf406639d\"\u003e\u003ccode\u003ed433126\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.42\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.44\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a...\n\n_Description has been truncated_","html_url":"https://github.com/liamtoozer/liam-runner/pull/63","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/liamtoozer%2Fliam-runner/issues/63","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/63/packages"},{"uuid":"3480059719","node_id":"PR_kwDODRkoPc6r5uKg","number":1760,"state":"open","title":"Bump the production-dependencies group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":9,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-10-03T07:12:55.000Z","updated_at":"2025-12-03T14:01:53.606Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":20,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.1","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.44","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"5.5.2","new_version":"6.2.0","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.1` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.44` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `5.5.2` | `6.2.0` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.1 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.75.1 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRelease grpcio wheels with Python 3.14 support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40403\"\u003e#40403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAsyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40447\"\u003e#40447\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eThis also addresses previously reported issues with empty error message on Python interpreter exit (\u003ccode\u003eError in sys.excepthook:\u003c/code\u003e/\u003ccode\u003eOriginal exception was:\u003c/code\u003e empty): \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/36655\"\u003e#36655\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/38679\"\u003e#38679\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/33342\"\u003e#33342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePython 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40750\"\u003e#40750\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eNote: using async methods outside of a running event loop is \u003ca href=\"https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies\"\u003ediscouraged\u003c/a\u003e by Python, and \u003cstrong\u003ewill be deprecated in future gRPC releases\u003c/strong\u003e. Please use the \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run\"\u003easyncio.run()\u003c/a\u003e function (or \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner\"\u003easyncio.Runner\u003c/a\u003e for custom loop factories). For interactive mode, use dedicated \u003ca href=\"https://docs.python.org/3/library/asyncio.html#asyncio-cli\"\u003easyncio REPL\u003c/a\u003e: \u003ccode\u003epython -m asyncio\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\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/grpc/grpc/commit/9b63ce0d513672c5daad4f28342f03863c5589e5\"\u003e\u003ccode\u003e9b63ce0\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Fix] PHP macOS build: composer sha sum update, harden ins...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ab7404867bcb4d8515839ddf6ff7f2134b3d3ec\"\u003e\u003ccode\u003e3ab7404\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.75.1 (on v1.75.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40773\"\u003e#40773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/876e1d1c8bb8dca840fba61d7950ac2e2d459df7\"\u003e\u003ccode\u003e876e1d1\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Handle python3.14 get_event_loop behavior changes...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/74ec067e2839a4625a74b966880737a5085a13cc\"\u003e\u003ccode\u003e74ec067\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable 3.14 supported wheels (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40726\"\u003e#40726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ff24d38a8115dbf1ab95337a348cda878de18ecf\"\u003e\u003ccode\u003eff24d38\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] aio: skip grpc/aio shutdown if py interpreter is ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.44\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/61ee9341bc847c75124ff01a08755c6ff1abf597\"\u003e\u003ccode\u003e61ee934\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.44'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/01553e722faf66a82ff448776c331b5cdd07e31a\"\u003e\u003ccode\u003e01553e7\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.44\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1b47e9ef31b73857517c2fcd4a0a123771d3a6c7\"\u003e\u003ccode\u003e1b47e9e\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/a295071652c108ad61257dc2e91e73d3b286ca22\"\u003e\u003ccode\u003ea295071\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a349ff94059ca8564880cbc4cfdd7ef1a448ddd1\"\u003e\u003ccode\u003ea349ff9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/86bb6e1cf0aabd28a549ef1d7e3f79dfbea3fd86\"\u003e\u003ccode\u003e86bb6e1\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.43\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9f52c6fc22757c723fb03990e59783ca749a660c\"\u003e\u003ccode\u003e9f52c6f\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/fe09306b610f592d9e2e0b307a68ee065c5d78c0\"\u003e\u003ccode\u003efe09306\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3d3a44d119c3e1060c124b8f2022119b1bbb5b96\"\u003e\u003ccode\u003e3d3a44d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d433126ae2cb74c0fa6406cec76b93aaf406639d\"\u003e\u003ccode\u003ed433126\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.42\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.44\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a00141618572764821bbe6bd74e025536e061587\"\u003e\u003ccode\u003ea001416\u003c/code\u003e\u003c/a\u003e DOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/2b1ff5363715c8ba0043314a8b4bcbbc1ba741f5\"\u003e\u003ccode\u003e2b1ff53\u003c/code\u003e\u003c/a\u003e Fix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-compress` from 1.17 to 1.18\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/colour-science/flask-compress/blob/master/CHANGELOG.md\"\u003eflask-compress's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.18 (2025-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport, and test against, Python 3.14, see \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate from \u003ccode\u003ezstandard\u003c/code\u003e to \u003ccode\u003epyzstd\u003c/code\u003e, which is now included in the Python 3.14 standar...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1760","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1760","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1760/packages"},{"uuid":"2868781869","node_id":"PR_kwDOEBdcl86q_iMt","number":540,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-09-29T02:10:05.000Z","updated_at":"2025-09-29T02:10:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/InigoSJ/beam/pull/540","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/InigoSJ%2Fbeam/issues/540","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/540/packages"},{"uuid":"2862830408","node_id":"PR_kwDOLVQ5ac6qo1NI","number":57,"state":"closed","title":"Bump the production-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-10-03T07:13:40.000Z","author_association":"NONE","state_reason":null,"created_at":"2025-09-26T07:16:21.000Z","updated_at":"2025-10-03T07:13:41.000Z","time_to_close":604639,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":17,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.0","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.39","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.39` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\u003c/li\u003e\n\u003cli\u003eReference on musllinux platform tags: \u003ca href=\"https://peps.python.org/pep-0656\"\u003ePEP 656\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egrpc.aio\u003c/code\u003e typehint fixes. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40215\"\u003e#40215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40217\"\u003e#40217\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eMetadata type validation: Fixed metadata handling to support all sequence types (not just tuples), preventing runtime errors. Enhanced metadata type validation: \u003ccode\u003eisinstance(metadata, Sequence)\u003c/code\u003e instead of \u003ccode\u003eisinstance(metadata, tuple)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSerializer parameters: Changed to \u003ccode\u003eOptional[SerializingFunction]\u003c/code\u003e for more accurate type representation\u003c/li\u003e\n\u003cli\u003eFixing the error in public API: \u003ccode\u003eClientCallDetails.method\u003c/code\u003e was declared as \u003ccode\u003estr\u003c/code\u003e but always called with \u003ccode\u003ebytes\u003c/code\u003e, see \u003ca href=\"https://github.com/grpc/grpc/blob/49bc1b1098f3772b40a46325250fe5c6f4df1eeb/src/python/grpcio/grpc/aio/_interceptor.py#L628\"\u003eInterceptedUnaryUnaryCall\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes issue \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40325\"\u003e#40325\u003c/a\u003e with grpcio failing to install on all non-Mac Apple devices internal builds. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40347\"\u003e#40347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRuby: Mark credential object in channel. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40394\"\u003e#40394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39549\"\u003e#39549\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.75.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.75.0 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8f360868932daaa226de0aaaab8f2d7f524d1ddc\"\u003e\u003ccode\u003e8f36086\u003c/code\u003e\u003c/a\u003e [Security] Cherry Pick Spiffe Verification (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5b393ee09ce97d9d328503ae8d96c65a42f9fff5\"\u003e\u003ccode\u003e5b393ee\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x to v1.75.0-pre1 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40485\"\u003e#40485\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e8715ed185a885d14472ad7c6cdc83d4161be029\"\u003e\u003ccode\u003ee8715ed\u003c/code\u003e\u003c/a\u003e Bump core version to 50.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40422\"\u003e#40422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/509f9fb6762b68505af3f854555ae86305be3c60\"\u003e\u003ccode\u003e509f9fb\u003c/code\u003e\u003c/a\u003e [PH2] WritePath Integration (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40404\"\u003e#40404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8a66132dc88c624ccba64883f2d643885dc0d08c\"\u003e\u003ccode\u003e8a66132\u003c/code\u003e\u003c/a\u003e [PH2][Settings] Adding documentation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.39\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/71cfc758534d5bb67f50ff42081fb4b37b3af69b\"\u003e\u003ccode\u003e71cfc75\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5653e58b19eb694241964b1dc5366ab115ee5eb6\"\u003e\u003ccode\u003e5653e58\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/eaaf3b06d41881163fae35faf7c778ac153339c5\"\u003e\u003ccode\u003eeaaf3b0\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/c106f68211653ac9acadfded00b209385ed58617\"\u003e\u003ccode\u003ec106f68\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9b063da5ebaba6a45d57ee3ba343a1a96e6342a8\"\u003e\u003ccode\u003e9b063da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/cc3dc1c839b0c1492b8b96f04694f4b6528a3871\"\u003e\u003ccode\u003ecc3dc1c\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.38\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/e9660687f514f4171dc82b0ae753c056bcb4d133\"\u003e\u003ccode\u003ee966068\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/55386c7fc3c750eea3d65c7276d4ec59c5960710\"\u003e\u003ccode\u003e55386c7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/49f560c17ae2cdb50929b9774f4b0a6447f503e1\"\u003e\u003ccode\u003e49f560c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8cd186db352f5802426165be29fa86b23fcd4ba7\"\u003e\u003ccode\u003e8cd186d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.37\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.39\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise ...\n\n_Description has been truncated_","html_url":"https://github.com/liamtoozer/liam-runner/pull/57","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/liamtoozer%2Fliam-runner/issues/57","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/57/packages"},{"uuid":"2862821582","node_id":"PR_kwDODRkoPc6qozDO","number":1751,"state":"closed","title":"Bump the production-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-10-03T07:11:45.000Z","author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-09-26T07:13:03.000Z","updated_at":"2025-10-03T07:11:45.000Z","time_to_close":604722,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":17,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.0","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.39","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.39` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.1 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\u003c/li\u003e\n\u003cli\u003eReference on musllinux platform tags: \u003ca href=\"https://peps.python.org/pep-0656\"\u003ePEP 656\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egrpc.aio\u003c/code\u003e typehint fixes. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40215\"\u003e#40215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40217\"\u003e#40217\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eMetadata type validation: Fixed metadata handling to support all sequence types (not just tuples), preventing runtime errors. Enhanced metadata type validation: \u003ccode\u003eisinstance(metadata, Sequence)\u003c/code\u003e instead of \u003ccode\u003eisinstance(metadata, tuple)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSerializer parameters: Changed to \u003ccode\u003eOptional[SerializingFunction]\u003c/code\u003e for more accurate type representation\u003c/li\u003e\n\u003cli\u003eFixing the error in public API: \u003ccode\u003eClientCallDetails.method\u003c/code\u003e was declared as \u003ccode\u003estr\u003c/code\u003e but always called with \u003ccode\u003ebytes\u003c/code\u003e, see \u003ca href=\"https://github.com/grpc/grpc/blob/49bc1b1098f3772b40a46325250fe5c6f4df1eeb/src/python/grpcio/grpc/aio/_interceptor.py#L628\"\u003eInterceptedUnaryUnaryCall\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes issue \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40325\"\u003e#40325\u003c/a\u003e with grpcio failing to install on all non-Mac Apple devices internal builds. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40347\"\u003e#40347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRuby: Mark credential object in channel. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40394\"\u003e#40394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39549\"\u003e#39549\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.75.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.75.0 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8f360868932daaa226de0aaaab8f2d7f524d1ddc\"\u003e\u003ccode\u003e8f36086\u003c/code\u003e\u003c/a\u003e [Security] Cherry Pick Spiffe Verification (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5b393ee09ce97d9d328503ae8d96c65a42f9fff5\"\u003e\u003ccode\u003e5b393ee\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x to v1.75.0-pre1 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40485\"\u003e#40485\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e8715ed185a885d14472ad7c6cdc83d4161be029\"\u003e\u003ccode\u003ee8715ed\u003c/code\u003e\u003c/a\u003e Bump core version to 50.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40422\"\u003e#40422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/509f9fb6762b68505af3f854555ae86305be3c60\"\u003e\u003ccode\u003e509f9fb\u003c/code\u003e\u003c/a\u003e [PH2] WritePath Integration (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40404\"\u003e#40404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8a66132dc88c624ccba64883f2d643885dc0d08c\"\u003e\u003ccode\u003e8a66132\u003c/code\u003e\u003c/a\u003e [PH2][Settings] Adding documentation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.39\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/71cfc758534d5bb67f50ff42081fb4b37b3af69b\"\u003e\u003ccode\u003e71cfc75\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5653e58b19eb694241964b1dc5366ab115ee5eb6\"\u003e\u003ccode\u003e5653e58\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/eaaf3b06d41881163fae35faf7c778ac153339c5\"\u003e\u003ccode\u003eeaaf3b0\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/c106f68211653ac9acadfded00b209385ed58617\"\u003e\u003ccode\u003ec106f68\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9b063da5ebaba6a45d57ee3ba343a1a96e6342a8\"\u003e\u003ccode\u003e9b063da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/cc3dc1c839b0c1492b8b96f04694f4b6528a3871\"\u003e\u003ccode\u003ecc3dc1c\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.38\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/e9660687f514f4171dc82b0ae753c056bcb4d133\"\u003e\u003ccode\u003ee966068\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/55386c7fc3c750eea3d65c7276d4ec59c5960710\"\u003e\u003ccode\u003e55386c7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/49f560c17ae2cdb50929b9774f4b0a6447f503e1\"\u003e\u003ccode\u003e49f560c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8cd186db352f5802426165be29fa86b23fcd4ba7\"\u003e\u003ccode\u003e8cd186d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.37\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.39\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a00141618572764821bbe6bd74e025536e061587\"\u003e\u003ccode\u003ea001416\u003c/code\u003e\u003c/a\u003e DOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/2b1ff5363715c8ba0043314a8b4bcbbc1ba741f5\"\u003e\u003ccode\u003e2b1ff53\u003c/code\u003e\u003c/a\u003e Fix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-compress` from 1.17 to 1.18\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/colour-science/flask-compress/blob/master/CHANGELOG.md\"\u003eflask-compress's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.18 (2025-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport, and test against, Python 3.14, see \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate from \u003ccode\u003ezstandard\u003c/code\u003e to \u003ccode\u003epyzstd\u003c/code\u003e, which is now included in the Python 3.14 standard library, also part of \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestore \u003ccode\u003eflask_compress.DictCache()\u003c/code\u003e that is needed to configure Flask-Compress with caching, without relying on \u003ca href=\"https://pypi.org/project/Flask-Caching/\"\u003eFlask-Caching\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/colour-science/flask-compress/commit/3dade9d81e350cc946151fc853d7cee6094623a4\"\u003e\u003ccode\u003e3dade9d\u003c/code\u003e\u003c/a\u003e Bump to v...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1751","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1751","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1751/packages"},{"uuid":"2851263432","node_id":"PR_kwDOGxIu7M6p8tPI","number":441,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-09-22T22:05:20.000Z","updated_at":"2025-09-22T22:05:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/Snowflake-Labs/beam/pull/441","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fbeam/issues/441","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/441/packages"},{"uuid":"2783895383","node_id":"PR_kwDODRkoPc6l7t9X","number":1736,"state":"open","title":"Bump the production-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-08-29T07:11:15.000Z","updated_at":"2025-08-29T07:11:16.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":16,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.74.0","repository_url":"https://github.com/grpc/grpc"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.20","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.3.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.8.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.74.0` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.20` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.3.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.8.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.74.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.74.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.74.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egee\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++, Posix EE] Plumb TCP write timestamps and metrics to OTel tracers. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39946\"\u003e#39946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix Python reconnect issues: use iomgr backup poller when EE is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39894\"\u003e#39894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade Pytype (Part - 1). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39816\"\u003e#39816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade black. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39774\"\u003e#39774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[event_engine] Implement fork support in Posix Event Engine. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/38980\"\u003e#38980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[http2] Fix GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES for when BDP is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39585\"\u003e#39585\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[dep] Upgrade Protobuf Version 31.1. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39916\"\u003e#39916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Fully qualify stdClass with global namespace. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39996\"\u003e#39996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[php] Fix PHPDoc so that UnaryCall defines the proper return type. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/37563\"\u003e#37563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix typing of nullable parameters. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39199\"\u003e#39199\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gRPC Python docs website layout - use spaces optimally. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40073\"\u003e#40073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] enable EE fork support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39786\"\u003e#39786\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Return nil for c functions expected to return a VALUE. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39214\"\u003e#39214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] remove connectivity state watch thread, fix cancellations from spurious signals. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39409\"\u003e#39409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Drop Ruby 3.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39607\"\u003e#39607\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.74.0-pre2\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.74.0 (gee).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3e7a4d52d257990fa5b9d80f69f4a591178d9d7c\"\u003e\u003ccode\u003e3e7a4d5\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40290\"\u003e#40290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/b2d32db3e1a6221c22d4a008930e1e54e45f1930\"\u003e\u003ccode\u003eb2d32db\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][Python] Fix for windows distribtest (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40241\"\u003e#40241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a7d80a7e90729849b052c7f36456514dcd1d6752\"\u003e\u003ccode\u003ea7d80a7\u003c/code\u003e\u003c/a\u003e [ruby] bump timeout for ruby artifact build on 1.74.x branch (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40230\"\u003e#40230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/2a6bf865d7000fa5e415a9e5685b2fd612b9ccc7\"\u003e\u003ccode\u003e2a6bf86\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre2 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40216\"\u003e#40216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c8dcda63a8c1f91224c75e4311f847db5f42745a\"\u003e\u003ccode\u003ec8dcda6\u003c/code\u003e\u003c/a\u003e [Backport-to-1.74.x] Added missing useful to cf_event_engine (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40210\"\u003e#40210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/1c64908e6b68ea0dabf62ca6d3af8a8958e6c970\"\u003e\u003ccode\u003e1c64908\u003c/code\u003e\u003c/a\u003e [Ruby] Add rubygems support for linux-gnu and linux-musl platforms  (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/08648d377dfd8ada795a7ad8068b48dcb24bd328\"\u003e\u003ccode\u003e08648d3\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][event_engine] Fix race conditions in the timer manager sh...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5d59f8e8517bb6a5f2865be63a06b2976b105f54\"\u003e\u003ccode\u003e5d59f8e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre1 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40121\"\u003e#40121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5e6f934e0d297a241f0d7aa9e5170acf97880de7\"\u003e\u003ccode\u003e5e6f934\u003c/code\u003e\u003c/a\u003e [v1.74.x] Bump core version to 49.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40101\"\u003e#40101\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40119\"\u003e#40119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a4650ee8eb90f81753351ea6c7530142a164d0e0\"\u003e\u003ccode\u003ea4650ee\u003c/code\u003e\u003c/a\u003e [CI] Updated grpc_interop_aspnetcore docker (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40088\"\u003e#40088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.74.0\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.20\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3e12c82a6cf343d9e74f2eef5fa9adfa94f4c9f7\"\u003e\u003ccode\u003e3e12c82\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.20'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8b5d5cefa44332cd5f26a42f94b9b1e6e1435e2d\"\u003e\u003ccode\u003e8b5d5ce\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5be943b4c2a5ecda1cc63b14affd7d0b5513939e\"\u003e\u003ccode\u003e5be943b\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/24382884bbe19a1fad8e6171c911b7a599f30ceb\"\u003e\u003ccode\u003e2438288\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.19'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7630391e6bc5440642db1df1e2ed3851f7bbef8f\"\u003e\u003ccode\u003e7630391\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.19' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/29c8360272145e7ba17a93000e56174d4bd96f47\"\u003e\u003ccode\u003e29c8360\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.19\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b4cb5b0a8dd305faa8e51c79d80a9c71cdb612e7\"\u003e\u003ccode\u003eb4cb5b0\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/551522b42ba9f7dea2d627e0b10c8880cf9f862a\"\u003e\u003ccode\u003e551522b\u003c/code\u003e\u003c/a\u003e Remove opsworks and opsworkscm\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/4515c41a91a00e16d027853436bbe0d144c6f4d5\"\u003e\u003ccode\u003e4515c41\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.18'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8c13d992f3437b4186c16ea979d0044b8bd03925\"\u003e\u003ccode\u003e8c13d99\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.18' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/commit/e84906c2252e98c2906d5d0e0da2249deb0c134a\"\u003e\u003ccode\u003ee84906c\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1508\"\u003e#1508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003e\u003ccode\u003ea29073c\u003c/code\u003e\u003c/a\u003e feat: add support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e\u003ccode\u003e6a9923e\u003c/code\u003e\u003c/a\u003e Fix: Add logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/083a505e1f43c20657570c74ec707485f4b3989d\"\u003e\u003ccode\u003e083a505\u003c/code\u003e\u003c/a\u003e chore: improve docs for list_files_with_prefix (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1517\"\u003e#1517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/61bd57509ab3966f4382656200f2600ce41cce24\"\u003e\u003ccode\u003e61bd575\u003c/code\u003e\u003c/a\u003e chore: remove duplicates in coveragerc (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1511\"\u003e#1511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5964009c0efae9c84a9433715d74befca7ddf98d\"\u003e\u003ccode\u003e5964009\u003c/code\u003e\u003c/a\u003e chore: exclude autogenerated .coveragerc (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1510\"\u003e#1510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/0eb45b5a808ad149c1c85d1ab9ea693d7365d5c1\"\u003e\u003ccode\u003e0eb45b5\u003c/code\u003e\u003c/a\u003e feat: Add new field \u003ccode\u003econtexts\u003c/code\u003e for Object Contexts in message \u003ccode\u003eObject\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1502\"\u003e#1502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/edde9506af9c313036573e4e51d7b94d03c3118f\"\u003e\u003ccode\u003eedde950\u003c/code\u003e\u003c/a\u003e samples: add samples for move api to rename an object (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1505\"\u003e#1505\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/500c0d07d3a239c3b52c9aa6ce434f5bb3202823\"\u003e\u003ccode\u003e500c0d0\u003c/code\u003e\u003c/a\u003e chore: fix the errors for GAPIC (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1509\"\u003e#1509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e\u003ccode\u003e72252e9\u003c/code\u003e\u003c/a\u003e docs: update the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a00141618572764821bbe6bd74e025536e061587\"\u003e\u003ccode\u003ea001416\u003c/code\u003e\u003c/a\u003e DOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/red...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1736","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1736","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1736/packages"},{"uuid":"2754099943","node_id":"PR_kwDOG62OMs6kKDrn","number":615,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-08-18T18:06:15.000Z","updated_at":"2025-08-18T18:06:15.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/t-indumathy/beam/pull/615","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/t-indumathy%2Fbeam/issues/615","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/615/packages"},{"uuid":"2737151112","node_id":"PR_kwDOFMWvRs6jJZyI","number":688,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-08-11T23:20:18.000Z","updated_at":"2025-08-11T23:20:18.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/vachan-shetty/beam/pull/688","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/vachan-shetty%2Fbeam/issues/688","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/688/packages"},{"uuid":"2718138801","node_id":"PR_kwDOFKq8Q86iA4Gx","number":485,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-08-04T14:12:12.000Z","updated_at":"2025-08-04T14:12:13.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/dingn1/beam/pull/485","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingn1%2Fbeam/issues/485","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/485/packages"},{"uuid":"2701295677","node_id":"PR_kwDOLVQ5ac6hAoA9","number":44,"state":"open","title":"Bump the production-dependencies group with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-07-28T15:56:48.000Z","updated_at":"2025-07-28T15:56:49.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":15,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.1","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.74.0","repository_url":"https://github.com/grpc/grpc"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.4","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.39.14","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.12.3","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.2.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.2.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.0","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.5.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 15 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.1` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.74.0` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.4` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.39.14` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.12.3` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.2.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.2.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.5.1` |\n\nUpdates `flask` from 3.1.0 to 3.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/7fff56f5172c48b6f3aedf17ee14ef5c2533dfd1\"\u003e\u003ccode\u003e7fff56f\u003c/code\u003e\u003c/a\u003e release version 3.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73d6504063bfa00666a92b07a28aaf906c532f09\"\u003e\u003ccode\u003e73d6504\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/cbb6c36692f7d882e9026597624c0eb38e01f9cb\"\u003e\u003ccode\u003ecbb6c36\u003c/code\u003e\u003c/a\u003e update docs about fallback order\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fb54159861708558b5f5658ebdc14709d984361c\"\u003e\u003ccode\u003efb54159\u003c/code\u003e\u003c/a\u003e secret key rotation: fix key list ordering\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/941efd4a36ed0f27e13758874f95e3aa1d3ee163\"\u003e\u003ccode\u003e941efd4\u003c/code\u003e\u003c/a\u003e use uv (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5727\"\u003e#5727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/0109e496f6ca68de29480fe6413e81b1d3f86aa9\"\u003e\u003ccode\u003e0109e49\u003c/code\u003e\u003c/a\u003e use uv\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/e7851665071cb93b3c70b1e7103f82d1e6d01f5d\"\u003e\u003ccode\u003ee785166\u003c/code\u003e\u003c/a\u003e Async Iterable Response (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/410e5ab7ed0ef326fa8b5164a633863f137ffff5\"\u003e\u003ccode\u003e410e5ab\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003eAsyncIterable\u003c/code\u003e for responses\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/bfffe87d4c2ea255b9a51432bebb3d28741245c4\"\u003e\u003ccode\u003ebfffe87\u003c/code\u003e\u003c/a\u003e add ghsa links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73ce26c3e822cdc2ccf99625619a50c91f163f8d\"\u003e\u003ccode\u003e73ce26c\u003c/code\u003e\u003c/a\u003e remove tests about deprecated pkgutil.get_loader (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5702\"\u003e#5702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.74.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.74.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.74.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egee\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++, Posix EE] Plumb TCP write timestamps and metrics to OTel tracers. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39946\"\u003e#39946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix Python reconnect issues: use iomgr backup poller when EE is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39894\"\u003e#39894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade Pytype (Part - 1). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39816\"\u003e#39816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade black. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39774\"\u003e#39774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[event_engine] Implement fork support in Posix Event Engine. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/38980\"\u003e#38980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[http2] Fix GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES for when BDP is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39585\"\u003e#39585\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[dep] Upgrade Protobuf Version 31.1. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39916\"\u003e#39916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Fully qualify stdClass with global namespace. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39996\"\u003e#39996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[php] Fix PHPDoc so that UnaryCall defines the proper return type. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/37563\"\u003e#37563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix typing of nullable parameters. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39199\"\u003e#39199\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gRPC Python docs website layout - use spaces optimally. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40073\"\u003e#40073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] enable EE fork support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39786\"\u003e#39786\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Return nil for c functions expected to return a VALUE. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39214\"\u003e#39214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] remove connectivity state watch thread, fix cancellations from spurious signals. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39409\"\u003e#39409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Drop Ruby 3.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39607\"\u003e#39607\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.74.0-pre2\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.74.0 (gee).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3e7a4d52d257990fa5b9d80f69f4a591178d9d7c\"\u003e\u003ccode\u003e3e7a4d5\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40290\"\u003e#40290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/b2d32db3e1a6221c22d4a008930e1e54e45f1930\"\u003e\u003ccode\u003eb2d32db\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][Python] Fix for windows distribtest (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40241\"\u003e#40241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a7d80a7e90729849b052c7f36456514dcd1d6752\"\u003e\u003ccode\u003ea7d80a7\u003c/code\u003e\u003c/a\u003e [ruby] bump timeout for ruby artifact build on 1.74.x branch (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40230\"\u003e#40230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/2a6bf865d7000fa5e415a9e5685b2fd612b9ccc7\"\u003e\u003ccode\u003e2a6bf86\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre2 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40216\"\u003e#40216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c8dcda63a8c1f91224c75e4311f847db5f42745a\"\u003e\u003ccode\u003ec8dcda6\u003c/code\u003e\u003c/a\u003e [Backport-to-1.74.x] Added missing useful to cf_event_engine (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40210\"\u003e#40210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/1c64908e6b68ea0dabf62ca6d3af8a8958e6c970\"\u003e\u003ccode\u003e1c64908\u003c/code\u003e\u003c/a\u003e [Ruby] Add rubygems support for linux-gnu and linux-musl platforms  (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/08648d377dfd8ada795a7ad8068b48dcb24bd328\"\u003e\u003ccode\u003e08648d3\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][event_engine] Fix race conditions in the timer manager sh...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5d59f8e8517bb6a5f2865be63a06b2976b105f54\"\u003e\u003ccode\u003e5d59f8e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre1 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40121\"\u003e#40121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5e6f934e0d297a241f0d7aa9e5170acf97880de7\"\u003e\u003ccode\u003e5e6f934\u003c/code\u003e\u003c/a\u003e [v1.74.x] Bump core version to 49.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40101\"\u003e#40101\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40119\"\u003e#40119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a4650ee8eb90f81753351ea6c7530142a164d0e0\"\u003e\u003ccode\u003ea4650ee\u003c/code\u003e\u003c/a\u003e [CI] Updated grpc_interop_aspnetcore docker (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40088\"\u003e#40088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.74.0\"\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.3 to 2.32.4\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.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/021dc729f0b71a3030cefdbec7fb57a0e80a6cfd\"\u003e\u003ccode\u003e021dc72\u003c/code\u003e\u003c/a\u003e Polish up release tooling for last manual release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/821770e822a20a21b207b3907ea83878bda1d396\"\u003e\u003ccode\u003e821770e\u003c/code\u003e\u003c/a\u003e Bump version and add release notes for v2.32.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/59f8aa2adf1d3d06bcbf7ce6b13743a1639a5401\"\u003e\u003ccode\u003e59f8aa2\u003c/code\u003e\u003c/a\u003e Add netrc file search information to authentication documentation (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6876\"\u003e#6876\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5b4b64c3467fd7a3c03f91ee641aaa348b6bed3b\"\u003e\u003ccode\u003e5b4b64c\u003c/code\u003e\u003c/a\u003e Add more tests to prevent regression of CVE 2024 47081\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7bc45877a86192af77645e156eb3744f95b47dae\"\u003e\u003ccode\u003e7bc4587\u003c/code\u003e\u003c/a\u003e Add new test to check netrc auth leak (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6962\"\u003e#6962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/96ba401c1296ab1dda74a2365ef36d88f7d144ef\"\u003e\u003ccode\u003e96ba401\u003c/code\u003e\u003c/a\u003e Only use hostname to do netrc lookup instead of netloc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7341690e842a23cf18ded0abd9229765fa88c4e2\"\u003e\u003ccode\u003e7341690\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6951\"\u003e#6951\u003c/a\u003e from tswast/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6716d7c9f29df636643fa2489f98890216525cb0\"\u003e\u003ccode\u003e6716d7c\u003c/code\u003e\u003c/a\u003e remove links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a7e1c745dc23c18e836febd672416ed0c5d8d8ae\"\u003e\u003ccode\u003ea7e1c74\u003c/code\u003e\u003c/a\u003e Update docs/conf.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/c799b8167a13416833ad3b4f3298261a477e826f\"\u003e\u003ccode\u003ec799b81\u003c/code\u003e\u003c/a\u003e docs: fix dead links to kenreitz.org\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.39.14\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/050e2751f30f5f7a29ca62a1e1201e814bcc6364\"\u003e\u003ccode\u003e050e275\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.14'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/959b3809552f6ef842162cb3b1093107a069156e\"\u003e\u003ccode\u003e959b380\u003c/code\u003e\u003c/a\u003e Bumping version to 1.39.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3b198328622bd068d63256ef178261abb2683883\"\u003e\u003ccode\u003e3b19832\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/237679b1a560f2f87d73a904775fb73610c1a90f\"\u003e\u003ccode\u003e237679b\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.13'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d1ada0e81e73fdb425bbdb19e9e9787ac5a47760\"\u003e\u003ccode\u003ed1ada0e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.13' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/280ac68b4305f3ec73d5948319a4558892c45e9d\"\u003e\u003ccode\u003e280ac68\u003c/code\u003e\u003c/a\u003e Bumping version to 1.39.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/6cee86318ef9965cd5f6111a5a24f0a7049b458a\"\u003e\u003ccode\u003e6cee863\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/bf1d0e70e9a0ccb3ec6aa6da1feb9bbd92e383b7\"\u003e\u003ccode\u003ebf1d0e7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.12'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/67c5498e963dc0df5f8b2494d2af6a72d103f5b5\"\u003e\u003ccode\u003e67c5498\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.12' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7bb02b134192e227aed2d19c8abbb1bea0ad1309\"\u003e\u003ccode\u003e7bb02b1\u003c/code\u003e\u003c/a\u003e Bumping version to 1.39.12\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.39.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.12.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/2968d44280a68f775db73ddeb2f2fc6c05edac84\"\u003e\u003ccode\u003e2968d44\u003c/code\u003e\u003c/a\u003e Fix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for float and str (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/a79fb3a6c8bbe52afe71cd278bbea3bda5241a41\"\u003e\u003ccode\u003ea79fb3a\u003c/code\u003e\u003c/a\u003e 1.0 Byte should be displayed as 1 Byte\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/8059ebe1732c89177709476165f6e87cc76fe1b7\"\u003e\u003ccode\u003e8059ebe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/249\"\u003e#249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/589536bec03edec2d5eec4327aab3e7f0b9a36cd\"\u003e\u003ccode\u003e589536b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/f772e59bf67b14e8f5565d9f489966db1df45381\"\u003e\u003ccode\u003ef772e59\u003c/code\u003e\u003c/a\u003e use proper decimal separator for french\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/7c341b9d49f3b8687526d8e50cae5f5a5d31582d\"\u003e\u003ccode\u003e7c341b9\u003c/code\u003e\u003c/a\u003e fix some french translations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/09d081f78decf1cb0635eb1a01ea1523ede2151a\"\u003e\u003ccode\u003e09d081f\u003c/code\u003e\u003c/a\u003e Update dependency mkdocstrings to v0.29.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/246\"\u003e#246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.12.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efrom marshmallow import fields\n\u003cp\u003efield = fields.TimeDelta()\u003c/p\u003e\n\u003ch1\u003eBefore\u003c/h1\u003e\n\u003cp\u003efield.deserialize(12.9)\ndatetime.timedelta(seconds=12)\u003c/p\u003e\n\u003ch1\u003edatetime.timedelta(seconds=12)\u003c/h1\u003e\n\u003cp\u003e\u003c/code\u003e\u003c/pre\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/84b15960272c16525c945ae99749e505310612a9\"\u003e\u003ccode\u003e84b1596\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/a715b9e4bde6c46769e8819faa21649ebec937b6\"\u003e\u003ccode\u003ea715b9e\u003c/code\u003e\u003c/a\u003e Bump sphinx-issues from 5.0.0 to 5.0.1 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2819\"\u003e#2819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/5c136b11f90f130d321ee2985bb7aaa764258fb9\"\u003e\u003ccode\u003e5c136b1\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2817\"\u003e#2817\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/df1daf03fa79aae61f8aaa85de2a16f1ff63a0de\"\u003e\u003ccode\u003edf1daf0\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.9.1 to 0.10.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2818\"\u003e#2818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2fc8207da9cf0cf1d9b9b4ab76d4d0478b588325\"\u003e\u003ccode\u003e2fc8207\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/validates\"\u003e\u003ccode\u003e@​validates\u003c/code\u003e\u003c/a\u003e accepts multiple field names (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/1965\"\u003e#1965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b7026f3b2622cffc981588b647526fa9525f063d\"\u003e\u003ccode\u003eb7026f3\u003c/code\u003e\u003c/a\u003e Bump sphinx from 8.1.3 to 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/c495e525aeff224bf14c2996f5aecf84e4a1ed5b\"\u003e\u003ccode\u003ec495e52\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/f0c6afb430a6d032300658c898752d6c7732b188\"\u003e\u003ccode\u003ef0c6afb\u003c/code\u003e\u003c/a\u003e Add missing fields to \u003cstrong\u003eall\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2809\"\u003e#2809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ef06fbe2e51ab6f1626c758098d4fc6ecdd8368a\"\u003e\u003ccode\u003eef06fbe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2808\"\u003e#2808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ffedbfee649d96fad7393a9cdf5ceb5118965631\"\u003e\u003ccode\u003effedbfe\u003c/code\u003e\u003c/a\u003e Merge branch '3.x-line' into dev\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/commit/7d97a384406258e0bfce3fbb715b84e5220d6783\"\u003e\u003ccode\u003e7d97a38\u003c/code\u003e\u003c/a\u003e chore(main): release 3.2.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1496\"\u003e#1496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/93d58d0f7e7467d99a206725f5701da29f6f3595\"\u003e\u003ccode\u003e93d58d0\u003c/code\u003e\u003c/a\u003e build: exclude certain autogenerated files (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1501\"\u003e#1501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/652cee3e351203796461d45e1c5bb6df34d170d1\"\u003e\u003ccode\u003e652cee3\u003c/code\u003e\u003c/a\u003e test: update constraints for python 3.9 testing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1500\"\u003e#1500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c7357305495443348c0a432db649b27e6a5d8c5b\"\u003e\u003ccode\u003ec735730\u003c/code\u003e\u003c/a\u003e chore: update the source path in owlbot.yaml (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1497\"\u003e#1497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/f02739f5f4f21083382f75169de719c6d5926a4e\"\u003e\u003ccode\u003ef02739f\u003c/code\u003e\u003c/a\u003e tests: update default runtime used for tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1498\"\u003e#1498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e\u003ccode\u003e61c5d5f\u003c/code\u003e\u003c/a\u003e feat: Adding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5821134d6cb86cdd73f4dcf4cdb4f3c0a9e5ddd2\"\u003e\u003ccode\u003e5821134\u003c/code\u003e\u003c/a\u003e chore: add configurations in owlbot.py to copy gapic code (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1494\"\u003e#1494\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/129455b4290dfc75349f5529d167809df40be783\"\u003e\u003ccode\u003e129455b\u003c/code\u003e\u003c/a\u003e chore: add owlbot for gapic generation (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1492\"\u003e#1492\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/793d34048d318f0e01046db6b3e648de038917c5\"\u003e\u003ccode\u003e793d340\u003c/code\u003e\u003c/a\u003e chore(main): release 3.1.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1449\"\u003e#1449\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e\u003ccode\u003e2a46c0b\u003c/code\u003e\u003c/a\u003e fix: Segmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003edynamic_startup_nodes\u003c/code\u003e parameter to async RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3646\"\u003e#3646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport RESP3 with \u003ccode\u003ehiredis-py\u003c/code\u003e parser (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3648\"\u003e#3648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Async] Support for transactions in async \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esearch_json_examples.ipynb\u003c/code\u003e: Fix the old import \u003ccode\u003eindexDefinition\u003c/code\u003e -\u0026gt; \u003ccode\u003eindex_definition\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions \u0026lt; 4.0.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3645\"\u003e#3645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping \u003ccode\u003ePython 3.8\u003c/code\u003e support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(doc): update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/JCornat\"\u003e\u003ccode\u003e@​JCornat\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ShubhamKaudewar\"\u003e\u003ccode\u003e@​ShubhamKaudewar\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/uglide\"\u003e\u003ccode\u003e@​uglide\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.1.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for transactions in \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3611\"\u003e#3611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix RedisCluster \u003ccode\u003essl_check_hostname\u003c/code\u003e not set to connections. For SSL verification with \u003ccode\u003essl_cert_reqs=\u0026quot;none\u0026quot;\u003c/code\u003e, check_hostname is set to \u003ccode\u003eFalse\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3637\"\u003e#3637\u003c/a\u003e)\n\u003cstrong\u003eImportant\u003c/strong\u003e: The default value for the \u003ccode\u003echeck_hostname\u003c/code\u003e field of \u003ccode\u003eRedisSSLContext\u003c/code\u003e has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release.\nThe breaking change is reverted in the next release to fix the behavior --\u0026gt; 6.2.0\u003c/li\u003e\n\u003cli\u003ePrevent RuntimeError while reinitializing clusters - sync and async (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3633\"\u003e#3633\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e) - fixes integration with Django RQ\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAttributeError\u003c/code\u003e on \u003ccode\u003eClusterPipeline\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3634\"\u003e#3634\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\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/redis/redis-py/commit/1a59471870658c7fc661a4705541a0762acd8d85\"\u003e\u003ccode\u003e1a59471\u003c/code\u003e\u003c/a\u003e Adding small change in code to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/83cf781be62634bdc264cacf06f4a7b3b71ceb90\"\u003e\u003ccode\u003e83cf781\u003c/code\u003e\u003c/a\u003e Adding small change in README to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/f5cd264c409e5a34578f7df14a041f3a24fa7c8d\"\u003e\u003ccode\u003ef5cd264\u003c/code\u003e\u003c/a\u003e maintenance: Preparation for release 6.2.0 - updating lib version. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3662\"\u003e#3662\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/793cdc63ac744bbcd715bc6b51c5c4e77af79618\"\u003e\u003ccode\u003e793cdc6\u003c/code\u003e\u003c/a\u003e maintenance: Update redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/34c40ff82d41270b91af864274e052b1394c6652\"\u003e\u003ccode\u003e34c40ff\u003c/code\u003e\u003c/a\u003e fix(doc) : update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e5756daafaf80670b68454334ef00e924e70f07a\"\u003e\u003ccode\u003ee5756da\u003c/code\u003e\u003c/a\u003e Dropping Python 3.8 support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/bc7de608b857f40c51e6d650f0f8e972702e95f1\"\u003e\u003ccode\u003ebc7de60\u003c/code\u003e\u003c/a\u003e [Async] Support for transactions in async RedisCluster client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e226ad2b4ce4ed3b0f09bc06c0ffcac2e271dd2f\"\u003e\u003ccode\u003ee226ad2\u003c/code\u003e\u003c/a\u003e Removing connection_pool field from the CommandProtocol definition (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3656\"\u003e#3656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14a6fc39bdc8688218cc6a4eccc8c1a60306e356\"\u003e\u003ccode\u003e14a6fc3\u003c/code\u003e\u003c/a\u003e fix: Fixed potential deadlock from unexpected \u003cstrong\u003edel\u003c/strong\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/3ebfd5b5693e7e2f4c33cfa533116454e1ab5067\"\u003e\u003ccode\u003e3ebfd5b\u003c/code\u003e\u003c/a\u003e fix: Revert wrongly changed default value for check_hostname when instantiati...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-compress` from 1.17 to 1.18\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/colour-science/flask-compress/blob/master/CHANGELOG.md\"\u003eflask-compress's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.18 (2025-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport, and test against, Python 3.14, see \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate from \u003ccode\u003ezstandard\u003c/code\u003e to \u003ccode\u003epyzstd\u003c/code\u003e, which is now included in the Python 3.14 standard library, also part of \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestore \u003ccode\u003eflask_compress.DictCache()\u003c/code\u003e that is needed to configure Flask-Compress with caching, without relying on \u003ca href=\"https://pypi.org/project/Flask-Caching/\"\u003eFlask-Caching\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/colour-science/flask-compress/commit/3dade9d81e350cc946151fc853d7cee6094623a4\"\u003e\u003ccode\u003e3dade9d\u003c/code\u003e\u003c/a\u003e Bump to version 1.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/c4bbafb56bdd3f13392232b13f190b5f9449ea92\"\u003e\u003ccode\u003ec4bbafb\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/62\"\u003e#62\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/adf6469c6e5e47e92febe0375e76e3d18f23d35d\"\u003e\u003ccode\u003eadf6469\u003c/code\u003e\u003c/a\u003e Support Python 3.14; switch to \u003ccode\u003epyzstd\u003c/code\u003e for ZStandard support (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/61\"\u003e#61\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/2bb30399e3e8032e74b0984adcf7072c7282b3fb\"\u003e\u003ccode\u003e2bb3039\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/60\"\u003e#60\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/f6f6dc0a40dd3ad523475034a70c993ca4f69bd8\"\u003e\u003ccode\u003ef6f6dc0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/59\"\u003e#59\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/5034243bb668f63b86385ad7e8240fbe679f3352\"\u003e\u003ccode\u003e5034243\u003c/code\u003e\u003c/a\u003e Restore and test DictCache\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/colour-science/flask-compress/compare/v1.17...v1.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uwsgi` from 2.0.28 to 2.0.30\n\nUpdates `google-cloud-pubsub` from 2.29.0 to 2.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-pubsub/releases\"\u003egoogle-cloud-pubsub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.31.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.30.0...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2025-06-26)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MessageTransformationFailureReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1427\"\u003e#1427\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/8ab13e1b71c151f0146548e7224dd38c9d719a88\"\u003e8ab13e1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSurface Fatal Stream Errors to Future; Adjust Retryable Error Codes (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1422\"\u003e#1422\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/e081beb29056035304d365ec9c50fa7ffbac6886\"\u003ee081beb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.30.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.29.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e4d072e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate documentation for JavaScriptUDF to indicate that the \u003ccode\u003emessage_id\u003c/code\u003e metadata field is optional instead of required (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1380\"\u003e#1380\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/be9005412fea06bea917c8b6861546b7e6c62a1e\"\u003ebe90054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e77ba05d\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/googleapis/python-pubsub/blob/main/CHANGELOG.md\"\u003egoogle-cloud-pubsub's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.30.0...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2025-06-26)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MessageTransformationFailureReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1427\"\u003e#1427\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/8ab13e1b71c151f0146548e7224dd38c9d719a88\"\u003e8ab13e1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSurface Fatal Stream Errors to Future; Adjust Retryable Error Codes (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1422\"\u003e#1422\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/e081beb29056035304d365ec9c50fa7ffbac6886\"\u003ee081beb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"...\n\n_Description has been truncated_","html_url":"https://github.com/liamtoozer/liam-runner/pull/44","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/liamtoozer%2Fliam-runner/issues/44","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/44/packages"},{"uuid":"2596680574","node_id":"PR_kwDOKrpNGs6axjN-","number":1732,"state":"closed","title":"Bump google-cloud-datastore from 2.20.2 to 2.21.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":"2025-06-16T19:28:43.000Z","author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-06-16T19:28:34.000Z","updated_at":"2025-06-16T19:28:43.000Z","time_to_close":9,"merged_at":"2025-06-16T19:28:43.000Z","merged_by":"github-actions[bot]","closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"}],"path":null,"ecosystem":"pip"},"body":"Bumps [google-cloud-datastore](https://github.com/googleapis/python-datastore) from 2.20.2 to 2.21.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.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=google-cloud-datastore\u0026package-manager=pip\u0026previous-version=2.20.2\u0026new-version=2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/shilu10/MANN-Meta-Learning/pull/1732","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/shilu10%2FMANN-Meta-Learning/issues/1732","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1732/packages"},{"uuid":"2589422146","node_id":"PR_kwDODRkoPc6aV3JC","number":1674,"state":"closed","title":"Bump the production-dependencies group across 1 directory with 13 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":"2025-06-20T08:07:16.000Z","author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-06-13T07:48:34.000Z","updated_at":"2025-06-20T08:07:16.000Z","time_to_close":605922,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":13,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.1","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.73.0","repository_url":"https://github.com/grpc/grpc"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.4","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.38.36","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.12.3","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"redis","old_version":"5.2.1","new_version":"6.2.0","repository_url":"https://github.com/redis/redis-py"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.30.0","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.5.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 13 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.1` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.73.0` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.4` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.38.36` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.12.3` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.2.0` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.30.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.5.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/7fff56f5172c48b6f3aedf17ee14ef5c2533dfd1\"\u003e\u003ccode\u003e7fff56f\u003c/code\u003e\u003c/a\u003e release version 3.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73d6504063bfa00666a92b07a28aaf906c532f09\"\u003e\u003ccode\u003e73d6504\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/cbb6c36692f7d882e9026597624c0eb38e01f9cb\"\u003e\u003ccode\u003ecbb6c36\u003c/code\u003e\u003c/a\u003e update docs about fallback order\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fb54159861708558b5f5658ebdc14709d984361c\"\u003e\u003ccode\u003efb54159\u003c/code\u003e\u003c/a\u003e secret key rotation: fix key list ordering\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/941efd4a36ed0f27e13758874f95e3aa1d3ee163\"\u003e\u003ccode\u003e941efd4\u003c/code\u003e\u003c/a\u003e use uv (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5727\"\u003e#5727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/0109e496f6ca68de29480fe6413e81b1d3f86aa9\"\u003e\u003ccode\u003e0109e49\u003c/code\u003e\u003c/a\u003e use uv\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/e7851665071cb93b3c70b1e7103f82d1e6d01f5d\"\u003e\u003ccode\u003ee785166\u003c/code\u003e\u003c/a\u003e Async Iterable Response (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/410e5ab7ed0ef326fa8b5164a633863f137ffff5\"\u003e\u003ccode\u003e410e5ab\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003eAsyncIterable\u003c/code\u003e for responses\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/bfffe87d4c2ea255b9a51432bebb3d28741245c4\"\u003e\u003ccode\u003ebfffe87\u003c/code\u003e\u003c/a\u003e add ghsa links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73ce26c3e822cdc2ccf99625619a50c91f163f8d\"\u003e\u003ccode\u003e73ce26c\u003c/code\u003e\u003c/a\u003e remove tests about deprecated pkgutil.get_loader (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5702\"\u003e#5702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.73.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.73.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.73.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egradient\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cp\u003eAs of this version, gRPC on MacOS \u0026amp; iOS will utilize Abseil's synchronization features, aligning it with other platforms. Should you encounter any issues due to this update, you can disable it by enabling GPR_DISABLE_ABSEIL_SYNC. If you do this, please report any problems by filing a bug at \u003ca href=\"https://github.com/grpc/grpc\"\u003ehttps://github.com/grpc/grpc\u003c/a\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[Dep] Update Protobuf to v31.0. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39392\"\u003e#39392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Core] Added GPR_DISABLE_ABSEIL_SYNC. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39562\"\u003e#39562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds_override_host] pass through per-endpoint args when creating subchannels. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39532\"\u003e#39532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose GRPC_OPENSSL_CLEANUP_TIMEOUT to control shutdown grace period. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39297\"\u003e#39297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[URI] fix parsing of user_info in proxy settings. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39004\"\u003e#39004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix busy loop in thread pool when shutting down. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39258\"\u003e#39258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Dep] Added a flag to build with \u003ccode\u003eopenssl\u003c/code\u003e instead of \u003ccode\u003eboringssl\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39188\"\u003e#39188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Cleanup: EventEngine client, listener, and dns experiments are on by default on all platforms. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39079\"\u003e#39079\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OpenCensus] Mark OpenCensus and dependent APIs as deprecated. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39554\"\u003e#39554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Pin Cython to 3.1.1. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39609\"\u003e#39609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] grpc_tools: make PythonGrpcGenerator handle dot \u003ccode\u003e.\u003c/code\u003e in proto paths the same way as native Generator/PyiGenerator. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39586\"\u003e#39586\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] add remove_unused_artifacts to opt build. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39593\"\u003e#39593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.73.0-pre2\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.73.0 (gradient).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis prerelease contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eRelease v1.73.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.73.0 (gradient).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/95dd243c6d9a9104c6ca2344861c8e8d8ccf4d7b\"\u003e\u003ccode\u003e95dd243\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.73.0 (on v1.73.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39787\"\u003e#39787\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/9f9728c159937fc281d1a6a36150952d2095e2b7\"\u003e\u003ccode\u003e9f9728c\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.73.0-pre2 (on v1.73.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39721\"\u003e#39721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/481fcfdf2142c081d9d4810dd6612d981ecd5e68\"\u003e\u003ccode\u003e481fcfd\u003c/code\u003e\u003c/a\u003e [xDS] remove env var guards for gRFCs A81, A82, and A83 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39711\"\u003e#39711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5d0f2c8148d6e86b9e9f16082c45ad0c437e16ca\"\u003e\u003ccode\u003e5d0f2c8\u003c/code\u003e\u003c/a\u003e Fix Python linux distribtest for aarch64_alpine target and enable for presubm...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ce0bd2d7c208e1932fcb64ffd210a4a57d4328b9\"\u003e\u003ccode\u003ece0bd2d\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.73.0-pre1 (on v1.73.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39643\"\u003e#39643\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/233368b057ed3b99485bda1006d87816484f2905\"\u003e\u003ccode\u003e233368b\u003c/code\u003e\u003c/a\u003e [Backport][v1.73.x][Python] Fix Python Linux distribtests copy conflicts (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39\"\u003e#39\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f71fac77473e06142bcc6805e471ceaca1671869\"\u003e\u003ccode\u003ef71fac7\u003c/code\u003e\u003c/a\u003e [Release] Bump core version to 48.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39611\"\u003e#39611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c19a471beacf6fc3e8914dcaae7ef331986eba6a\"\u003e\u003ccode\u003ec19a471\u003c/code\u003e\u003c/a\u003e [Python] Pin Cython to 3.1.1 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39609\"\u003e#39609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c8a7a350f8efbc7cf00cd4368e10e83902dc7de7\"\u003e\u003ccode\u003ec8a7a35\u003c/code\u003e\u003c/a\u003e [alpn] Inject ALPN Protocols from channel args (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39541\"\u003e#39541\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a58a5ffb4763e0f922461efbaa493752361b4435\"\u003e\u003ccode\u003ea58a5ff\u003c/code\u003e\u003c/a\u003e [subchannel] stop passing watcher a ref to itself (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39372\"\u003e#39372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.73.0\"\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.3 to 2.32.4\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.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/021dc729f0b71a3030cefdbec7fb57a0e80a6cfd\"\u003e\u003ccode\u003e021dc72\u003c/code\u003e\u003c/a\u003e Polish up release tooling for last manual release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/821770e822a20a21b207b3907ea83878bda1d396\"\u003e\u003ccode\u003e821770e\u003c/code\u003e\u003c/a\u003e Bump version and add release notes for v2.32.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/59f8aa2adf1d3d06bcbf7ce6b13743a1639a5401\"\u003e\u003ccode\u003e59f8aa2\u003c/code\u003e\u003c/a\u003e Add netrc file search information to authentication documentation (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6876\"\u003e#6876\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5b4b64c3467fd7a3c03f91ee641aaa348b6bed3b\"\u003e\u003ccode\u003e5b4b64c\u003c/code\u003e\u003c/a\u003e Add more tests to prevent regression of CVE 2024 47081\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7bc45877a86192af77645e156eb3744f95b47dae\"\u003e\u003ccode\u003e7bc4587\u003c/code\u003e\u003c/a\u003e Add new test to check netrc auth leak (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6962\"\u003e#6962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/96ba401c1296ab1dda74a2365ef36d88f7d144ef\"\u003e\u003ccode\u003e96ba401\u003c/code\u003e\u003c/a\u003e Only use hostname to do netrc lookup instead of netloc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7341690e842a23cf18ded0abd9229765fa88c4e2\"\u003e\u003ccode\u003e7341690\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6951\"\u003e#6951\u003c/a\u003e from tswast/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6716d7c9f29df636643fa2489f98890216525cb0\"\u003e\u003ccode\u003e6716d7c\u003c/code\u003e\u003c/a\u003e remove links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a7e1c745dc23c18e836febd672416ed0c5d8d8ae\"\u003e\u003ccode\u003ea7e1c74\u003c/code\u003e\u003c/a\u003e Update docs/conf.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/c799b8167a13416833ad3b4f3298261a477e826f\"\u003e\u003ccode\u003ec799b81\u003c/code\u003e\u003c/a\u003e docs: fix dead links to kenreitz.org\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.38.36\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a6598484538f4f70c084352ed1dc866a273a5063\"\u003e\u003ccode\u003ea659848\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.36'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/75dd118e4b6518fd0b641058cdb0ab1ac8c396e2\"\u003e\u003ccode\u003e75dd118\u003c/code\u003e\u003c/a\u003e Bumping version to 1.38.36\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9ae105534c39e8ed78e1ff356aef0c49768eef7a\"\u003e\u003ccode\u003e9ae1055\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/b2ea7335700c62f3c8c92527590bd6ead5e572f9\"\u003e\u003ccode\u003eb2ea733\u003c/code\u003e\u003c/a\u003e Docs: Add support for Adobe Analytics in documentation (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4379\"\u003e#4379\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/18bd5a28f6f3a8b4119de8241ab1c811d99c44ce\"\u003e\u003ccode\u003e18bd5a2\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.35'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/13114f9b47bebb1917a9a20c609b581b12592489\"\u003e\u003ccode\u003e13114f9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.35' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/4b942d7a0af04f85416d33eac70e9ec335ed8129\"\u003e\u003ccode\u003e4b942d7\u003c/code\u003e\u003c/a\u003e Bumping version to 1.38.35\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/298bee17bca6f6fbbf9696a04ba6c92d258953bb\"\u003e\u003ccode\u003e298bee1\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/612750c0311d9585850b7345b3ca89299758c7d1\"\u003e\u003ccode\u003e612750c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.34'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/925a9263b65b71929c3c6745986d1546ccc60f98\"\u003e\u003ccode\u003e925a926\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.34' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.38.36\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.12.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/2968d44280a68f775db73ddeb2f2fc6c05edac84\"\u003e\u003ccode\u003e2968d44\u003c/code\u003e\u003c/a\u003e Fix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for float and str (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/a79fb3a6c8bbe52afe71cd278bbea3bda5241a41\"\u003e\u003ccode\u003ea79fb3a\u003c/code\u003e\u003c/a\u003e 1.0 Byte should be displayed as 1 Byte\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/8059ebe1732c89177709476165f6e87cc76fe1b7\"\u003e\u003ccode\u003e8059ebe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/249\"\u003e#249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/589536bec03edec2d5eec4327aab3e7f0b9a36cd\"\u003e\u003ccode\u003e589536b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/f772e59bf67b14e8f5565d9f489966db1df45381\"\u003e\u003ccode\u003ef772e59\u003c/code\u003e\u003c/a\u003e use proper decimal separator for french\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/7c341b9d49f3b8687526d8e50cae5f5a5d31582d\"\u003e\u003ccode\u003e7c341b9\u003c/code\u003e\u003c/a\u003e fix some french translations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/09d081f78decf1cb0635eb1a01ea1523ede2151a\"\u003e\u003ccode\u003e09d081f\u003c/code\u003e\u003c/a\u003e Update dependency mkdocstrings to v0.29.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/246\"\u003e#246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.12.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efrom marshmallow import fields\n\u003cp\u003efield = fields.TimeDelta()\u003c/p\u003e\n\u003ch1\u003eBefore\u003c/h1\u003e\n\u003cp\u003efield.deserialize(12.9)\ndatetime.timedelta(seconds=12)\u003c/p\u003e\n\u003ch1\u003edatetime.timedelta(seconds=12)\u003c/h1\u003e\n\u003cp\u003e\u003c/code\u003e\u003c/pre\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/84b15960272c16525c945ae99749e505310612a9\"\u003e\u003ccode\u003e84b1596\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/a715b9e4bde6c46769e8819faa21649ebec937b6\"\u003e\u003ccode\u003ea715b9e\u003c/code\u003e\u003c/a\u003e Bump sphinx-issues from 5.0.0 to 5.0.1 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2819\"\u003e#2819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/5c136b11f90f130d321ee2985bb7aaa764258fb9\"\u003e\u003ccode\u003e5c136b1\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2817\"\u003e#2817\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/df1daf03fa79aae61f8aaa85de2a16f1ff63a0de\"\u003e\u003ccode\u003edf1daf0\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.9.1 to 0.10.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2818\"\u003e#2818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2fc8207da9cf0cf1d9b9b4ab76d4d0478b588325\"\u003e\u003ccode\u003e2fc8207\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/validates\"\u003e\u003ccode\u003e@​validates\u003c/code\u003e\u003c/a\u003e accepts multiple field names (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/1965\"\u003e#1965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b7026f3b2622cffc981588b647526fa9525f063d\"\u003e\u003ccode\u003eb7026f3\u003c/code\u003e\u003c/a\u003e Bump sphinx from 8.1.3 to 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/c495e525aeff224bf14c2996f5aecf84e4a1ed5b\"\u003e\u003ccode\u003ec495e52\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/f0c6afb430a6d032300658c898752d6c7732b188\"\u003e\u003ccode\u003ef0c6afb\u003c/code\u003e\u003c/a\u003e Add missing fields to \u003cstrong\u003eall\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2809\"\u003e#2809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ef06fbe2e51ab6f1626c758098d4fc6ecdd8368a\"\u003e\u003ccode\u003eef06fbe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2808\"\u003e#2808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ffedbfee649d96fad7393a9cdf5ceb5118965631\"\u003e\u003ccode\u003effedbfe\u003c/code\u003e\u003c/a\u003e Merge branch '3.x-line' into dev\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003edynamic_startup_nodes\u003c/code\u003e parameter to async RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3646\"\u003e#3646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport RESP3 with \u003ccode\u003ehiredis-py\u003c/code\u003e parser (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3648\"\u003e#3648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Async] Support for transactions in async \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esearch_json_examples.ipynb\u003c/code\u003e: Fix the old import \u003ccode\u003eindexDefinition\u003c/code\u003e -\u0026gt; \u003ccode\u003eindex_definition\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions \u0026lt; 4.0.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3645\"\u003e#3645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping \u003ccode\u003ePython 3.8\u003c/code\u003e support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(doc): update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/JCornat\"\u003e\u003ccode\u003e@​JCornat\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ShubhamKaudewar\"\u003e\u003ccode\u003e@​ShubhamKaudewar\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/uglide\"\u003e\u003ccode\u003e@​uglide\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.1.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for transactions in \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3611\"\u003e#3611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix RedisCluster \u003ccode\u003essl_check_hostname\u003c/code\u003e not set to connections. For SSL verification with \u003ccode\u003essl_cert_reqs=\u0026quot;none\u0026quot;\u003c/code\u003e, check_hostname is set to \u003ccode\u003eFalse\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3637\"\u003e#3637\u003c/a\u003e)\n\u003cstrong\u003eImportant\u003c/strong\u003e: The default value for the \u003ccode\u003echeck_hostname\u003c/code\u003e field of \u003ccode\u003eRedisSSLContext\u003c/code\u003e has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release.\nThe breaking change is reverted in the next release to fix the behavior --\u0026gt; 6.2.0\u003c/li\u003e\n\u003cli\u003ePrevent RuntimeError while reinitializing clusters - sync and async (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3633\"\u003e#3633\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e) - fixes integration with Django RQ\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAttributeError\u003c/code\u003e on \u003ccode\u003eClusterPipeline\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3634\"\u003e#3634\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\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/redis/redis-py/commit/1a59471870658c7fc661a4705541a0762acd8d85\"\u003e\u003ccode\u003e1a59471\u003c/code\u003e\u003c/a\u003e Adding small change in code to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/83cf781be62634bdc264cacf06f4a7b3b71ceb90\"\u003e\u003ccode\u003e83cf781\u003c/code\u003e\u003c/a\u003e Adding small change in README to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/f5cd264c409e5a34578f7df14a041f3a24fa7c8d\"\u003e\u003ccode\u003ef5cd264\u003c/code\u003e\u003c/a\u003e maintenance: Preparation for release 6.2.0 - updating lib version. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3662\"\u003e#3662\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/793cdc63ac744bbcd715bc6b51c5c4e77af79618\"\u003e\u003ccode\u003e793cdc6\u003c/code\u003e\u003c/a\u003e maintenance: Update redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/34c40ff82d41270b91af864274e052b1394c6652\"\u003e\u003ccode\u003e34c40ff\u003c/code\u003e\u003c/a\u003e fix(doc) : update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e5756daafaf80670b68454334ef00e924e70f07a\"\u003e\u003ccode\u003ee5756da\u003c/code\u003e\u003c/a\u003e Dropping Python 3.8 support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/bc7de608b857f40c51e6d650f0f8e972702e95f1\"\u003e\u003ccode\u003ebc7de60\u003c/code\u003e\u003c/a\u003e [Async] Support for transactions in async RedisCluster client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e226ad2b4ce4ed3b0f09bc06c0ffcac2e271dd2f\"\u003e\u003ccode\u003ee226ad2\u003c/code\u003e\u003c/a\u003e Removing connection_pool field from the CommandProtocol definition (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3656\"\u003e#3656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14a6fc39bdc8688218cc6a4eccc8c1a60306e356\"\u003e\u003ccode\u003e14a6fc3\u003c/code\u003e\u003c/a\u003e fix: Fixed potential deadlock from unexpected \u003cstrong\u003edel\u003c/strong\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/3ebfd5b5693e7e2f4c33cfa533116454e1ab5067\"\u003e\u003ccode\u003e3ebfd5b\u003c/code\u003e\u003c/a\u003e fix: Revert wrongly changed default value for check_hostname when instantiati...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uwsgi` from 2.0.28 to 2.0.30\n\nUpdates `google-cloud-pubsub` from 2.29.0 to 2.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-pubsub/releases\"\u003egoogle-cloud-pubsub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.30.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.29.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e4d072e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate documentation for JavaScriptUDF to indicate that the \u003ccode\u003emessage_id\u003c/code\u003e metadata field is optional instead of required (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1380\"\u003e#1380\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/be9005412fea06bea917c8b6861546b7e6c62a1e\"\u003ebe90054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e77ba05d\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/googleapis/python-pubsub/blob/main/CHANGELOG.md\"\u003egoogle-cloud-pubsub's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e4d072e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate documentation for JavaScriptUDF to indicate that the \u003ccode\u003emessage_id\u003c/code\u003e metadata field is optional instead of required (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1380\"\u003e#1380\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/be9005412fea06bea917c8b6861546b7e6c62a1e\"\u003ebe90054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e77ba05d\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/googleapis/python-pubsub/commit/a5f0a2f7941387f34b5684678cf03e7a71f5ca97\"\u003e\u003ccode\u003ea5f0a2f\u003c/code\u003e\u003c/a\u003e chore(main): release 2.30.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1418\"\u003e#1418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003e\u003ccode\u003ec046ca2\u003c/code\u003e\u003c/a\u003e feat: Add SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/42d32de6d6f9e765a97c1ff8a1f9bffbbfc741b0\"\u003e\u003ccode\u003e42d32de\u003c/code\u003e\u003c/a\u003e chore(main): release 2.29.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1381\"\u003e#1381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/2a00b13269b352795cd3a14049202a82fe9fe43a\"\u003e\u003ccode\u003e2a00b13\u003c/code\u003e\u003c/a\u003e chore(deps): update all dependencies (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1412\"\u003e#1412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c7ee6134e49122beb21158b2f3f261d7bc00887d\"\u003e\u003ccode\u003ec7ee613\u003c/code\u003e\u003c/a\u003e chore: change assignees for issues and PRs to abbrowne126 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1410\"\u003e#1410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e\u003ccode\u003e60639c4\u003c/code\u003e\u003c/a\u003e fix: remove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/a51d8f64b94c327f2bd47343038dc51ee5a1d8b3\"\u003e\u003ccode\u003ea51d8f6\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1385\"\u003e#1385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e\u003ccode\u003e77ba05d\u003c/code\u003e\u003c/a\u003e docs: update readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e\u003ccode\u003e4d072e0\u003c/code\u003e\u003c/a\u003e docs(sample): Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/da0e6d0dd871244f1572c7307e6c9729dfcb62bb\"\u003e\u003ccode\u003eda0e6d0\u003c/code\u003e\u003c/a\u003e chore(python): remove noxfile.py from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1383\"\u003e#1383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-tasks` from 2.19.2 to 2.19.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-tasks's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-tasks: v2.19.3\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-tasks-v2.19.2...google-cloud-tasks-v2.19.3\"\u003e2.19.3\u003c/a\u003e (2025-06-11)\u003c/h2\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate import statement example in README (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/0131a33582f84d9be5ecb1c0ef8b56aa3d9e9cf0\"\u003e0131a33\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/googleapis/google-cloud-python/commit/924638b658a20519fe445bc1e2b8406740762831\"\u003e\u003ccode\u003e924638b\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13991\"\u003e#13991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c522070c02d2120de8772ddcd7de6e40ef64c548\"\u003e\u003ccode\u003ec522070\u003c/code\u003e\u003c/a\u003e docs: [google-cloud-speech] updated description of sample_rate_hertz (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13998\"\u003e#13998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/a1bafd9192f6c3cc9520aa8680db0588b202ad3a\"\u003e\u003ccode\u003ea1bafd9\u003c/code\u003e\u003c/a\u003e feat: add initial files for google.shopping.merchant.productstudio.v1alpha (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/50562c3054b1e4b3388bc1f62335be895f76d689\"\u003e\u003ccode\u003e50562c3\u003c/code\u003e\u003c/a\u003e feat: add initial files for google.cloud.configdelivery.v1alpha (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13984\"\u003e#13984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/78428ff7406d808f7ac06a9726190b732d72b5a7\"\u003e\u003ccode\u003e78428ff\u003c/code\u003e\u003c/a\u003e feat: Added support for hierarchical enrollment in Quota Adjuster consumer AP...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/5e57d1c40d7edb932aa6192c2d41787856c6fe3b\"\u003e\u003ccode\u003e5e57d1c\u003c/code\u003e\u003c/a\u003e feat: Added support for DELTA, ICEBERG, PIG components (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13982\"\u003e#13982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/3d6ac66d3fb77149616f6167c89ebc5ac9ed5d15\"\u003e\u003ccode\u003e3d6ac66\u003c/code\u003e\u003c/a\u003e feat: [google-cloud-alloydb] Instance.ActivationPolicy field (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13980\"\u003e#13980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/ae1c8aedd601e8a55dec41672fc2741a804d33bd\"\u003e\u003ccode\u003eae1c8ae\u003c/code\u003e\u003c/a\u003e feat: add initial files for google.shopping.merchant.issueresolution.v1beta (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/33b6ee5b6aeed9b99f39f28d2048298b89c73fb6\"\u003e\u003ccode\u003e33b6ee5\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13978\"\u003e#13978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/808364041835ed14e55839cfb33325c9d1cb1f15\"\u003e\u003ccode\u003e8083640\u003c/code\u003e\u003c/a\u003e feat: [google-cloud-compute] Update Compute Engine v1 API to revision 2025060...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-tasks-v2.19.2...google-cloud-tasks-v2.19.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 24.11.1 to 25.5.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/cf4e8c522995ed8c09f2fa2a3595c4c299ba7d8c\"\u003e\u003ccode\u003ecf4e8c5\u003c/code\u003e\u003c/a\u003e Preparing release 25.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/c16b97f7532e4ca00e0c07d88d049b37aea4ab44\"\u003e\u003ccode\u003ec16b97f\u003c/code\u003e\u003c/a\u003e Correct 3.14 change note.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/37881fa690e0fae43c1cfc8008a9eb85ea04ae3f\"\u003e\u003ccode\u003e37881fa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2110\"\u003e#2110\u003c/a\u003e from gevent/python3.14b1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/8c6f8ebafdc241ae2966b561b2508506a6b92a1c\"\u003e\u003ccode\u003e8c6f8eb\u003c/code\u003e\u003c/a\u003e Update for changes from 3.14a7 to 3.14b1; add a bunch more standard library t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/580975cc5e37232fe8df77eb1f2ac60a6eb01c0d\"\u003e\u003ccode\u003e580975c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2109\"\u003e#2109\u003c/a\u003e from gevent/libuv-1.51\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/8097be376480ddc64f19ad8baf7e00d1842201f3\"\u003e\u003ccode\u003e8097be3\u003c/code\u003e\u003c/a\u003e Update to libuv 1.51; fixes \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2108\"\u003e#2108\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/5b229a42c3fe819f594f224d841060623b296e15\"\u003e\u003ccode\u003e5b229a4\u003c/code\u003e\u003c/a\u003e Back to development: 25.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/df6c474a91ed70de677723747ae82a75e1c4ed3e\"\u003e\u003ccode\u003edf6c474\u003c/code\u003e\u003c/a\u003e Preparing release 25.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/926b0d3c2ed09bfa994689419dd75723d3bc6b00\"\u003e\u003ccode\u003e926b0d3\u003c/code\u003e\u003c/a\u003e CHANGES: Improve warning about using undocumented, untested internal implemen...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/c75f2c15aa9d70ecd5c74a5fed697ad35cc544f0\"\u003e\u003ccode\u003ec75f2c1\u003c/code\u003e\u003c/a\u003e queue.py: Make a comment readable by Sphinx as originally intended.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/24.11.1...25.5.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/ONSdigital/eq-questionnaire-runner/pull/1674","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1674","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1674/packages"},{"uuid":"2580490408","node_id":"PR_kwDOCQX6NM6Zzyio","number":521,"state":"closed","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python","stale"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-08-17T13:05:57.000Z","author_association":"NONE","state_reason":null,"created_at":"2025-06-10T08:26:18.000Z","updated_at":"2025-08-17T13:05:57.000Z","time_to_close":5891979,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/Juta/beam/pull/521","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juta%2Fbeam/issues/521","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/521/packages"}],"issue_packages":[{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2026-05-19T08:28:06.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"4475721777","node_id":"PR_kwDOSbTTLM7c-24h","number":6,"state":"open","title":"Bump the production-dependencies group with 22 updates","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-05-19T08:28:06.000Z","updated_at":"2026-05-19T08:28:07.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":22,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.80.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"23.0.0","new_version":"26.0.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"pika","old_version":"1.3.2","new_version":"1.4.0","repository_url":"https://github.com/pika/pika"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"marshmallow","old_version":"3.26.2","new_version":"4.3.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"redis","old_version":"7.1.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.24","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.38.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.22.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"6.2.2","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 22 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [google-cloud-datastore](https://github.com/googleapis/google-cloud-python) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.80.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `23.0.0` | `26.0.0` |\n| [pika](https://github.com/pika/pika) | `1.3.2` | `1.4.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.2` | `4.3.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.10.1` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [redis](https://github.com/redis/redis-py) | `7.1.0` | `7.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.24` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/google-cloud-python) | `2.29.0` | `2.38.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.22.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `4.1.1` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.2` | `7.1.3` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n\nUpdates `flask` from 3.1.1 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\u003c/code\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/pallets-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-os-login: v2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-os-login-v2.20.0...google-cloud-os-login-v2.21.0\"\u003ev2.21.0\u003c/a\u003e (2026-05-06)\u003c/h2\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/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-documentai-v2.21.0\"\u003e2.21.0\u003c/a\u003e (2023-12-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for python 3.12 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce compatibility with native namespace packages (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire proto-plus \u0026gt;= 1.22.3 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eretry_async\u003c/code\u003e instead of \u003ccode\u003eretry\u003c/code\u003e in async client (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\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/googleapis/google-cloud-python/commit/c60ded47847b04b2536f19c1610b5592b7952d6a\"\u003e\u003ccode\u003ec60ded4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T181058Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15005\"\u003e#15005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c0e3e9d221c3b8cd6d99503fadbb8e643db1e325\"\u003e\u003ccode\u003ec0e3e9d\u003c/code\u003e\u003c/a\u003e chore: disable treat warnings as errors (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15008\"\u003e#15008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45d4cee9e0e48a209b2d9292be29a15125548458\"\u003e\u003ccode\u003e45d4cee\u003c/code\u003e\u003c/a\u003e docs(samples): Update BigQuery Storage Arrow samples batching logic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14961\"\u003e#14961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45149baca6064be265db1b653abb405c298a2b41\"\u003e\u003ccode\u003e45149ba\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T162506Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15001\"\u003e#15001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d58a9ba338df3df1afca11e155fe449c32631179\"\u003e\u003ccode\u003ed58a9ba\u003c/code\u003e\u003c/a\u003e test: Add 'cryptography' 'cachetools' to test deps for bigquery-storage (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14999\"\u003e#14999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/10289465a87988b9bf35a85893f26ea372ad717b\"\u003e\u003ccode\u003e1028946\u003c/code\u003e\u003c/a\u003e feat: add v1 api for google-cloud-maintenance-api (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14998\"\u003e#14998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/b3cb4de3ce50c3ec55af2b132d756252a32641f3\"\u003e\u003ccode\u003eb3cb4de\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20260107T084051Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14995\"\u003e#14995\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17cc12897e6afdf3f3131531c50a8226a3f57c0f\"\u003e\u003ccode\u003e17cc128\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20251231T091651Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14991\"\u003e#14991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c353aa5bcc937ef9399c8efc90492dadbcf01aa2\"\u003e\u003ccode\u003ec353aa5\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251219T024955Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14985\"\u003e#14985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f38453832a2bb0226c389c30df13d072d1642377\"\u003e\u003ccode\u003ef384538\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251217T215552Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14980\"\u003e#14980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-iam-v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.80.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.80.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.80.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglimmering\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[ssl] Implement TLS private key signer in Python. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41701\"\u003e#41701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Private Key Offload Implementation. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41606\"\u003e#41606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix max sockaddr struct size on OpenBSD. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40454\"\u003e#40454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41432\"\u003e#41432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41484\"\u003e#41484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41324\"\u003e#41324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41502\"\u003e#41502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RR and WRR] enable change to connect from a random index. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41472\"\u003e#41472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement gRFC A101. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41051\"\u003e#41051\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C++] Add SNI override option to C++ channel credentials options API. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41460\"\u003e#41460\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C# tools] Option to append Async to server side method names \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39010\"\u003e#39010\u003c/a\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39797\"\u003e#39797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41357\"\u003e#41357\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Disable php infinite recursion check for callback from Core to PHP. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41835\"\u003e#41835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40337\"\u003e#40337\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Fix \u003ccode\u003eGRPC_TRACE\u003c/code\u003e not working when absl log initialized in cython. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41455\"\u003e#41455\u003c/a\u003e)\u0026quot;. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41769\"\u003e#41769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41532\"\u003e#41532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Docs: correct \u003ccode\u003egrpc.Compression\u003c/code\u003e references. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41705\"\u003e#41705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40226\"\u003e#40226\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/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1\"\u003e\u003ccode\u003ef5e2d6e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41857\"\u003e#41857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b\"\u003e\u003ccode\u003e938cfec\u003c/code\u003e\u003c/a\u003e [subchannel connection scaling] fix when we reset backoff (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41935\"\u003e#41935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c\"\u003e\u003ccode\u003e91778be\u003c/code\u003e\u003c/a\u003e [Backport][v1.80.x][Python] New \u003ccode\u003e_create\u003c/code\u003e method for aio.Metadata (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41888\"\u003e#41888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0\"\u003e\u003ccode\u003ef10b9f2\u003c/code\u003e\u003c/a\u003e [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656\"\u003e\u003ccode\u003ebe4c1c5\u003c/code\u003e\u003c/a\u003e [subchannel] fix crash in connection scaling code (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41853\"\u003e#41853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427\"\u003e\u003ccode\u003ea71df73\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41844\"\u003e#41844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a\"\u003e\u003ccode\u003e3ca09e4\u003c/code\u003e\u003c/a\u003e [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d\"\u003e\u003ccode\u003e260c6fd\u003c/code\u003e\u003c/a\u003e [PHP] Disable php infinite recursion check for callback from Core to PHP (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41\"\u003e#41\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b\"\u003e\u003ccode\u003e50957c5\u003c/code\u003e\u003c/a\u003e [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999\"\u003e\u003ccode\u003ee1e1d0a\u003c/code\u003e\u003c/a\u003e [Bzlmod] Turn off bzlmod for PSM python tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41810\"\u003e#41810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.80.0\"\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.0.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\u003e26.0.0\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEventlet worker removed\u003c/strong\u003e: The \u003ccode\u003eeventlet\u003c/code\u003e worker class has been dropped. Migrate to \u003ccode\u003egevent\u003c/code\u003e, \u003ccode\u003egthread\u003c/code\u003e, or \u003ccode\u003etornado\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Compatibility Suite\u003c/strong\u003e: New end-to-end compatibility test harness covering Starlette, FastAPI, Litestar, Quart, Sanic, and BlackSheep. Current grid passes 438/444 tests (98%).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Test Suite Expansion\u003c/strong\u003e: 134 additional ASGI unit tests covering protocol semantics, lifespan, websockets, and chunked framing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 Request-Target Validation\u003c/strong\u003e (RFC 9112 sections 3.2.3, 3.2.4):\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003eauthority-form\u003c/code\u003e request-target outside \u003ccode\u003eCONNECT\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003easterisk-form\u003c/code\u003e request-target outside \u003ccode\u003eOPTIONS\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003erelative-reference\u003c/code\u003e request-targets\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHeader Field Hardening\u003c/strong\u003e (RFC 9110):\n\u003cul\u003e\n\u003cli\u003eReject control characters in header field-value (section 5.5)\u003c/li\u003e\n\u003cli\u003eReject forbidden trailer field-names (section 6.5.1)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eContent-Length\u003c/code\u003e list form (RFC 9112 section 6.3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRequest Smuggling Hardening\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eTighten keepalive gate and scope \u003ccode\u003efinish_body\u003c/code\u003e byte cap\u003c/li\u003e\n\u003cli\u003eKeep \u003ccode\u003e_body_receiver\u003c/code\u003e alive across the keepalive smuggling gate so pipelined requests cannot re-enter a closed body\u003c/li\u003e\n\u003cli\u003eAddress parser/protocol findings from a six-point WSGI/ASGI audit\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePROXY Protocol (ASGI)\u003c/strong\u003e: Enforce \u003ccode\u003eproxy_allow_ips\u003c/code\u003e and tighten v1/v2 parsing in the ASGI callback parser.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConnection Draining\u003c/strong\u003e: Drain the connection on close per RFC 9112 section 9.6 to prevent reset-on-close truncation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBody Framing on HEAD/204/304\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eKeep \u003ccode\u003eContent-Length\u003c/code\u003e on HEAD and 304 responses (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop body framing on HEAD/204/304 even when the framework set it\u003c/li\u003e\n\u003cli\u003eWarn once when an ASGI app emits a body for a no-body response\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 ASGI\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e_handle_stream_ended\u003c/code\u003e to set \u003ccode\u003e_body_complete\u003c/code\u003e in the async HTTP/2 handler so request bodies finalize correctly on stream end\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInvalidChunkExtension\u003c/code\u003e mapping and fast-parser support in ASGI tests (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3565\"\u003e#3565\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 100-Continue\u003c/strong\u003e: Stop adding \u003ccode\u003eTransfer-Encoding: chunked\u003c/code\u003e to 100-Continue interim responses.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebSocket Close Handshake\u003c/strong\u003e (RFC 6455):\n\u003cul\u003e\n\u003cli\u003eComply with the close handshake state machine\u003c/li\u003e\n\u003cli\u003eClose the transport after the close handshake completes\u003c/li\u003e\n\u003cli\u003eFix binary send when the \u003ccode\u003etext\u003c/code\u003e key is \u003ccode\u003eNone\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEarly Hints\u003c/strong\u003e: Validate headers in the \u003ccode\u003eearly_hints\u003c/code\u003e callback to match \u003ccode\u003eprocess_headers\u003c/code\u003e; pass only the header name to \u003ccode\u003eInvalidHeader\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3588\"\u003e#3588\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Fixes\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix ASGI disconnect handling for Django-style apps\u003c/li\u003e\n\u003cli\u003eFix Litestar request handling (use raw ASGI receive for body/headers)\u003c/li\u003e\n\u003cli\u003eFix Litestar HTTP endpoints for compatibility tests\u003c/li\u003e\n\u003cli\u003eFix Quart headers endpoint to normalize keys to lowercase\u003c/li\u003e\n\u003cli\u003eFix Quart WebSocket close test app (missing \u003ccode\u003eaccept()\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix duplicate \u003ccode\u003eTransfer-Encoding\u003c/code\u003e header for BlackSheep streaming\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/benoitc/gunicorn/commit/5d819cf36040f6cc6175fcc804d703fb899509dd\"\u003e\u003ccode\u003e5d819cf\u003c/code\u003e\u003c/a\u003e release: 26.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/b45c70df105f7d5dcbc5abfb732804d6464edc21\"\u003e\u003ccode\u003eb45c70d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3611\"\u003e#3611\u003c/a\u003e from zc-mattcen/docs-typo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/99c8d48acf453deb5c49fe12e195dbc00d888d1e\"\u003e\u003ccode\u003e99c8d48\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3623\"\u003e#3623\u003c/a\u003e from benoitc/chore/drop-eventlet-add-h2-uvloop-test-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5a655af50f20e005dd9e32e6078dc82fa45f3d4b\"\u003e\u003ccode\u003e5a655af\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3622\"\u003e#3622\u003c/a\u003e from benoitc/test/docker-port-and-ipv4-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/201df19a8011c0a1d6a0e75ebe22e89d48eb935e\"\u003e\u003ccode\u003e201df19\u003c/code\u003e\u003c/a\u003e chore: remove eventlet worker; add h2 and uvloop to test deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/f4ac8e1f1bf1d365e77f41915da55bec31873f84\"\u003e\u003ccode\u003ef4ac8e1\u003c/code\u003e\u003c/a\u003e test: pass action name to dirty client and stabilize after TTOU spam\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/54d38afddf1f0db0c15b5f4ff63f3c7bfad96961\"\u003e\u003ccode\u003e54d38af\u003c/code\u003e\u003c/a\u003e test: unblock docker fixtures on macOS hosts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/68843c8893dd938456f0a2da62085ab5776f8871\"\u003e\u003ccode\u003e68843c8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e from benoitc/fix/asgi-preserve-content-length-on-hea...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/31f2618f733cc0c78690df63f4e344aaf3f56b20\"\u003e\u003ccode\u003e31f2618\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3620\"\u003e#3620\u003c/a\u003e from benoitc/fix/asgi-proxy-protocol-trust-and-parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/41ec7527dbd8a9e52728477700707ad40e41d9dc\"\u003e\u003ccode\u003e41ec752\u003c/code\u003e\u003c/a\u003e fix: keep Content-Length on HEAD and 304 responses\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...26.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pika` from 1.3.2 to 1.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pika/pika/releases\"\u003epika's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/pika/1.4.0/\"\u003ehttps://pypi.org/project/pika/1.4.0/\u003c/a\u003e | \u003ca href=\"https://github.com/pika/pika/milestone/23?closed=1\"\u003eGitHub milestone\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add python3.10 support and make code python3.7+ by \u003ca href=\"https://github.com/vinitkumar\"\u003e\u003ccode\u003e@​vinitkumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1351\"\u003epika/pika#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in example docstring by \u003ca href=\"https://github.com/kinoute\"\u003e\u003ccode\u003e@​kinoute\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1396\"\u003epika/pika#1396\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing pika v1.0.0 breaking change (order of parameters) for the `cha… by \u003ca href=\"https://github.com/mprinc\"\u003e\u003ccode\u003e@​mprinc\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1393\"\u003epika/pika#1393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3.11 to various places by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1399\"\u003epika/pika#1399\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation improvements by \u003ca href=\"https://github.com/hcmturner\"\u003e\u003ccode\u003e@​hcmturner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1403\"\u003epika/pika#1403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/khadkarajesh\"\u003e\u003ccode\u003e@​khadkarajesh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1404\"\u003epika/pika#1404\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate example to use python3 syntax by \u003ca href=\"https://github.com/AleksaC\"\u003e\u003ccode\u003e@​AleksaC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1408\"\u003epika/pika#1408\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix exchange type enum type by \u003ca href=\"https://github.com/liortct\"\u003e\u003ccode\u003e@​liortct\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1410\"\u003epika/pika#1410\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd more connections to the adapters by \u003ca href=\"https://github.com/dgoeries\"\u003e\u003ccode\u003e@​dgoeries\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1405\"\u003epika/pika#1405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/uwe\"\u003e\u003ccode\u003e@​uwe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1414\"\u003epika/pika#1414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFeature \u003ca href=\"https://redirect.github.com/pika/pika/issues/1363\"\u003e#1363\u003c/a\u003e -- Bump examples python version to 3 by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1416\"\u003epika/pika#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAttempt to re-enable GeventConnection on Windows by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1417\"\u003epika/pika#1417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd examples of using client_properties to URLParameters and ConnectionParameters by \u003ca href=\"https://github.com/johanrhodin\"\u003e\u003ccode\u003e@​johanrhodin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1436\"\u003epika/pika#1436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMisc Windows CI updates by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1438\"\u003epika/pika#1438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse sys.platform instead of platform.system() by \u003ca href=\"https://github.com/cvijdea-bd\"\u003e\u003ccode\u003e@​cvijdea-bd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1467\"\u003epika/pika#1467\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eList Python 3.12 as supported by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1474\"\u003epika/pika#1474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShrink the compatibility module and remove Python \u0026lt;3.7 support by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1441\"\u003epika/pika#1441\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eexample: Remove unnecessary guard by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1435\"\u003epika/pika#1435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDifferentiate release types by \u003ccode\u003egithub.event.release.prerelease\u003c/code\u003e by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1477\"\u003epika/pika#1477\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebasic_consumer_threaded\u003c/code\u003e example by \u003ca href=\"https://github.com/leogallot\"\u003e\u003ccode\u003e@​leogallot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1507\"\u003epika/pika#1507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd description for the example blocking_consume_recover_multiple_hosts by \u003ca href=\"https://github.com/federicsp\"\u003e\u003ccode\u003e@​federicsp\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1512\"\u003epika/pika#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix tests with Python 3.14, except RuntimeError from asyncio.get_event_loop by \u003ca href=\"https://github.com/hroncok\"\u003e\u003ccode\u003e@​hroncok\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1524\"\u003epika/pika#1524\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ConnectionParameters doc by \u003ca href=\"https://github.com/ryoung9550\"\u003e\u003ccode\u003e@​ryoung9550\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1494\"\u003epika/pika#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate versions by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1514\"\u003epika/pika#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003especify your own consumer_tag when using consume() method of BlockingChannel by \u003ca href=\"https://github.com/ivan-eguidazu\"\u003e\u003ccode\u003e@​ivan-eguidazu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1485\"\u003epika/pika#1485\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremoval of pika.compat.dictkeys() by \u003ca href=\"https://github.com/a-detiste\"\u003e\u003ccode\u003e@​a-detiste\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1492\"\u003epika/pika#1492\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd all public APIs to \u003ccode\u003e__all__\u003c/code\u003e by \u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1476\"\u003epika/pika#1476\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert utcnow() and utcfromtimestamp() by \u003ca href=\"https://github.com/mh21\"\u003e\u003ccode\u003e@​mh21\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1484\"\u003epika/pika#1484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Issue # 1530: advertise exchange_exchange_bindings  by \u003ca href=\"https://github.com/kenliao94\"\u003e\u003ccode\u003e@​kenliao94\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1540\"\u003epika/pika#1540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eJpaluska/add threadsafe publisher example by \u003ca href=\"https://github.com/jpaluska\"\u003e\u003ccode\u003e@​jpaluska\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1546\"\u003epika/pika#1546\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd python 3.14 to CI and drop 3.9 by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1549\"\u003epika/pika#1549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception by \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1545\"\u003epika/pika#1545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1552\"\u003epika/pika#1552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eruff\u003c/code\u003e lint check to CI (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003eGH-1371\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1551\"\u003epika/pika#1551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003epika/pika#1553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) by \u003ca href=\"https://github.com/suchitd\"\u003e\u003ccode\u003e@​suchitd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003epika/pika#1555\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003epika/pika#1554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement tests compatibility patch for RabbitMQ 4.3  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1548\"\u003epika/pika#1548\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1557\"\u003epika/pika#1557\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to pytest by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1550\"\u003epika/pika#1550\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix asyncio.get_event_loop() deprecation in _AsyncioIOServicesAdapter by \u003ca href=\"https://github.com/geomarceau\"\u003e\u003ccode\u003e@​geomarceau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1544\"\u003epika/pika#1544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003epika/pika#1561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003epika/pika#1556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLegacy file fixes by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003epika/pika#1562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003epika/pika#1560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003epika/pika#1566\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/pika/pika/blob/main/CHANGELOG.md\"\u003epika's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/pika/pika/tree/1.4.0\"\u003e1.4.0\u003c/a\u003e (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pika/pika/compare/1.4.0b0...1.4.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImplemented enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce yapf/google formatting in CI \u003ca href=\"https://redirect.github.com/pika/pika/issues/1558\"\u003e#1558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Hatch dev environment and scripts \u003ca href=\"https://redirect.github.com/pika/pika/pull/1579\"\u003e#1579\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003e#1561\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eClosed issues:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hatch scripts to standardize developer commands \u003ca href=\"https://redirect.github.com/pika/pika/issues/1578\"\u003e#1578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix outdated and broken documentation across the project \u003ca href=\"https://redirect.github.com/pika/pika/issues/1568\"\u003e#1568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate Codecov default branch and badge \u003ca href=\"https://redirect.github.com/pika/pika/issues/1563\"\u003e#1563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub actions workflows and test code need updates for RabbitMQ 4.3 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1547\"\u003e#1547\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edatetime.datetime.utcfromtimestamp() is deprecated \u003ca href=\"https://redirect.github.com/pika/pika/issues/1539\"\u003e#1539\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eURLParameters这个类有bug \u003ca href=\"https://redirect.github.com/pika/pika/issues/1533\"\u003e#1533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCustom transport \u003ca href=\"https://redirect.github.com/pika/pika/issues/1532\"\u003e#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ex-delay value is being returned in the header as a UINT64 and not a SINT16 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1531\"\u003e#1531\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePika should advertise the \u003ccode\u003eexchange_exchange_bindings\u003c/code\u003e client capability \u003ca href=\"https://redirect.github.com/pika/pika/issues/1530\"\u003e#1530\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMissing type annotations \u003ca href=\"https://redirect.github.com/pika/pika/issues/1523\"\u003e#1523\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no info about return type of queue_declare() method of pika.channel \u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGetting the user who sent the message \u003ca href=\"https://redirect.github.com/pika/pika/issues/1510\"\u003e#1510\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhere is examples/consume_recover_retry.py ? \u003ca href=\"https://redirect.github.com/pika/pika/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType Hint Issue with arguments parameter in queue_declare method of BlockingChannel Class - (expected \u0026quot;DeclareOk | None\u0026quot;  [arg-type]) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1482\"\u003e#1482\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003equeue_declare does not receive the callback at random times \u003ca href=\"https://redirect.github.com/pika/pika/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no current event loop in thread \u003ca href=\"https://redirect.github.com/pika/pika/issues/1479\"\u003e#1479\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCannot find reference 'exceptions' in '__init__.pyi'  \u003ca href=\"https://redirect.github.com/pika/pika/issues/1473\"\u003e#1473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert to \u003ccode\u003epytest\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pika/pika/issues/1469\"\u003e#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a CI lint check using \u003ccode\u003eruff\u003c/code\u003e and fix all findings \u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003e#1371\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for proxy configuration (Socks5) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1359\"\u003e#1359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlockingIOError: [WinError 10035] A non-blocking socket operation could not be completed immediately \u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003e#1314\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMerged pull requests:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate outdated documentation across the pika project \u003ca href=\"https://redirect.github.com/pika/pika/pull/1577\"\u003e#1577\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix TypeError in select_connection \u003ca href=\"https://redirect.github.com/pika/pika/pull/1575\"\u003e#1575\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.7+ in CI and fix \u003ccode\u003etyping_extensions\u003c/code\u003e import \u003ca href=\"https://redirect.github.com/pika/pika/pull/1574\"\u003e#1574\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyapf\u003c/code\u003e formatter enforcement \u003ca href=\"https://redirect.github.com/pika/pika/pull/1573\"\u003e#1573\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ePIKA_TEST_TLS\u003c/code\u003e env with pytest flag \u003ca href=\"https://redirect.github.com/pika/pika/pull/1572\"\u003e#1572\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003e#1566\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLegacy file fixes \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003e#1562\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003e#1560\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 2 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1557\"\u003e#1557\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003e#1556\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003e#1555\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003e#1554\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003e#1553\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 4 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1552\"\u003e#1552\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\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/pika/pika/commit/305fbe60088790a2648580078b4808f138e325d7\"\u003e\u003ccode\u003e305fbe6\u003c/code\u003e\u003c/a\u003e pika 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/9a3a6e51d17b2b87b29fb8dc48256e79bfdfea58\"\u003e\u003ccode\u003e9a3a6e5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1577\"\u003e#1577\u003c/a\u003e from pika/doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f750ce3a60d7a0cb5cf0fcf68ddb68190935b720\"\u003e\u003ccode\u003ef750ce3\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/ccfe924f5e15b5b1c88384135a64d0f9a6254685\"\u003e\u003ccode\u003eccfe924\u003c/code\u003e\u003c/a\u003e Ensure that pip is run the same way in each workflow.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/47129ca63f282a6b2e8335645236a0fa0b27c0ae\"\u003e\u003ccode\u003e47129ca\u003c/code\u003e\u003c/a\u003e Caching pip artifacts actually does not accomplish anything.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/0a721f75c7eda0923a4390e544341a737d6a7815\"\u003e\u003ccode\u003e0a721f7\u003c/code\u003e\u003c/a\u003e Fix copyright year and document \u003ccode\u003elegacy-python.yaml\u003c/code\u003e workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f7f51dbd069201a0ff07140cbd3511a36555e398\"\u003e\u003ccode\u003ef7f51db\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/6e6283352e302c8e25dd5151e1a0164901ff8902\"\u003e\u003ccode\u003e6e62833\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1579\"\u003e#1579\u003c/a\u003e from pika/feature/gh-1578-hatch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/3d038ad4cf36708a0e19547e5eaccfdd776ef024\"\u003e\u003ccode\u003e3d038ad\u003c/code\u003e\u003c/a\u003e Remove test-requirements.txt and all references to it, since it is superseded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/540db57e418fa58927cff1a3dd4b8aad123dc4c2\"\u003e\u003ccode\u003e540db57\u003c/code\u003e\u003c/a\u003e Fix formatting issue in legacy-python CI workflow for virtualenv installation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pika/pika/compare/1.3.2...1.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.0 to 2.34.2\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.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\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#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\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/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\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#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\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\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\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\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\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/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://gi...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/census31-eq-questionnaire-runner/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Fcensus31-eq-questionnaire-runner/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2026-04-10T07:17:18.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"4237330891","node_id":"PR_kwDODRkoPc7RX1lV","number":1867,"state":"open","title":"Bump the production-dependencies group across 1 directory with 23 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-04-10T07:17:18.000Z","updated_at":"2026-04-24T09:00:30.347Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":23,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.80.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"23.0.0","new_version":"25.3.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.33.0","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"ua-parser","old_version":"1.0.1","new_version":"1.0.2","repository_url":"https://github.com/ua-parser/uap-python"},{"name":"boto3","old_version":"1.37.23","new_version":"1.42.87","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.15.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.2","new_version":"4.3.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"redis","old_version":"7.1.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.24","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.37.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.22.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"6.2.2","new_version":"7.0.5","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 23 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.3` |\n| [google-cloud-datastore](https://github.com/googleapis/google-cloud-python) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.80.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `23.0.0` | `25.3.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.33.1` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [ua-parser](https://github.com/ua-parser/uap-python) | `1.0.1` | `1.0.2` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.42.87` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.15.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.2` | `4.3.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.10.1` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [redis](https://github.com/redis/redis-py) | `7.1.0` | `7.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.24` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/google-cloud-python) | `2.29.0` | `2.37.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.22.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.2` | `7.0.5` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n\n\nUpdates `flask` from 3.1.1 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-documentai-v2.21.0\"\u003e2.21.0\u003c/a\u003e (2023-12-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for python 3.12 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce compatibility with native namespace packages (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire proto-plus \u0026gt;= 1.22.3 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eretry_async\u003c/code\u003e instead of \u003ccode\u003eretry\u003c/code\u003e in async client (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\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/googleapis/google-cloud-python/commit/c60ded47847b04b2536f19c1610b5592b7952d6a\"\u003e\u003ccode\u003ec60ded4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T181058Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15005\"\u003e#15005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c0e3e9d221c3b8cd6d99503fadbb8e643db1e325\"\u003e\u003ccode\u003ec0e3e9d\u003c/code\u003e\u003c/a\u003e chore: disable treat warnings as errors (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15008\"\u003e#15008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45d4cee9e0e48a209b2d9292be29a15125548458\"\u003e\u003ccode\u003e45d4cee\u003c/code\u003e\u003c/a\u003e docs(samples): Update BigQuery Storage Arrow samples batching logic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14961\"\u003e#14961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45149baca6064be265db1b653abb405c298a2b41\"\u003e\u003ccode\u003e45149ba\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T162506Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15001\"\u003e#15001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d58a9ba338df3df1afca11e155fe449c32631179\"\u003e\u003ccode\u003ed58a9ba\u003c/code\u003e\u003c/a\u003e test: Add 'cryptography' 'cachetools' to test deps for bigquery-storage (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14999\"\u003e#14999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/10289465a87988b9bf35a85893f26ea372ad717b\"\u003e\u003ccode\u003e1028946\u003c/code\u003e\u003c/a\u003e feat: add v1 api for google-cloud-maintenance-api (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14998\"\u003e#14998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/b3cb4de3ce50c3ec55af2b132d756252a32641f3\"\u003e\u003ccode\u003eb3cb4de\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20260107T084051Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14995\"\u003e#14995\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17cc12897e6afdf3f3131531c50a8226a3f57c0f\"\u003e\u003ccode\u003e17cc128\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20251231T091651Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14991\"\u003e#14991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c353aa5bcc937ef9399c8efc90492dadbcf01aa2\"\u003e\u003ccode\u003ec353aa5\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251219T024955Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14985\"\u003e#14985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f38453832a2bb0226c389c30df13d072d1642377\"\u003e\u003ccode\u003ef384538\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251217T215552Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14980\"\u003e#14980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-iam-v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.80.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.80.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.80.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglimmering\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[ssl] Implement TLS private key signer in Python. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41701\"\u003e#41701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Private Key Offload Implementation. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41606\"\u003e#41606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix max sockaddr struct size on OpenBSD. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40454\"\u003e#40454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41432\"\u003e#41432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41484\"\u003e#41484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41324\"\u003e#41324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41502\"\u003e#41502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RR and WRR] enable change to connect from a random index. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41472\"\u003e#41472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement gRFC A101. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41051\"\u003e#41051\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C++] Add SNI override option to C++ channel credentials options API. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41460\"\u003e#41460\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C# tools] Option to append Async to server side method names \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39010\"\u003e#39010\u003c/a\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39797\"\u003e#39797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41357\"\u003e#41357\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Disable php infinite recursion check for callback from Core to PHP. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41835\"\u003e#41835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40337\"\u003e#40337\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Fix \u003ccode\u003eGRPC_TRACE\u003c/code\u003e not working when absl log initialized in cython. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41455\"\u003e#41455\u003c/a\u003e)\u0026quot;. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41769\"\u003e#41769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41532\"\u003e#41532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Docs: correct \u003ccode\u003egrpc.Compression\u003c/code\u003e references. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41705\"\u003e#41705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40226\"\u003e#40226\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/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1\"\u003e\u003ccode\u003ef5e2d6e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41857\"\u003e#41857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b\"\u003e\u003ccode\u003e938cfec\u003c/code\u003e\u003c/a\u003e [subchannel connection scaling] fix when we reset backoff (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41935\"\u003e#41935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c\"\u003e\u003ccode\u003e91778be\u003c/code\u003e\u003c/a\u003e [Backport][v1.80.x][Python] New \u003ccode\u003e_create\u003c/code\u003e method for aio.Metadata (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41888\"\u003e#41888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0\"\u003e\u003ccode\u003ef10b9f2\u003c/code\u003e\u003c/a\u003e [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656\"\u003e\u003ccode\u003ebe4c1c5\u003c/code\u003e\u003c/a\u003e [subchannel] fix crash in connection scaling code (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41853\"\u003e#41853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427\"\u003e\u003ccode\u003ea71df73\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41844\"\u003e#41844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a\"\u003e\u003ccode\u003e3ca09e4\u003c/code\u003e\u003c/a\u003e [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d\"\u003e\u003ccode\u003e260c6fd\u003c/code\u003e\u003c/a\u003e [PHP] Disable php infinite recursion check for callback from Core to PHP (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41\"\u003e#41\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b\"\u003e\u003ccode\u003e50957c5\u003c/code\u003e\u003c/a\u003e [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999\"\u003e\u003ccode\u003ee1e1d0a\u003c/code\u003e\u003c/a\u003e [Bzlmod] Turn off bzlmod for PSM python tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41810\"\u003e#41810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.80.0\"\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 25.3.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 25.3.0\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eHTTP/2 ASGI Body Duplication\u003c/strong\u003e: Fix request body being received twice in HTTP/2\nASGI requests, causing JSON parsing errors with \u0026quot;Extra data\u0026quot; messages\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3558\"\u003e#3558\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eASGI Chunked EOF Handling\u003c/strong\u003e: Add \u003ccode\u003efinish()\u003c/code\u003e method to callback parser to handle\nchunked encoding edge case where connection closes before final CRLF after zero-chunk\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eHTTP/2 Documentation\u003c/strong\u003e: Fix \u003ccode\u003ehttp_protocols\u003c/code\u003e examples to use comma-separated string\ninstead of list syntax (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3561\"\u003e#3561\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eChunked Encoding\u003c/strong\u003e: Reject chunk extensions containing bare CR bytes per RFC 9112\n(\u003ca href=\"https://github.com/benoitc/gunicorn/discussions/3556\"\u003e#3556\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRequest Line Limit\u003c/strong\u003e: Fix \u003ccode\u003e--limit-request-line 0\u003c/code\u003e to mean unlimited as documented,\ninstead of using default maximum. Works with both Python and fast C parser.\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3563\"\u003e#3563\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Parser Header Validation\u003c/strong\u003e: Add security checks per RFC 9110/9112:\n\u003cul\u003e\n\u003cli\u003eReject duplicate Content-Length headers\u003c/li\u003e\n\u003cli\u003eReject requests with both Content-Length and Transfer-Encoding\u003c/li\u003e\n\u003cli\u003eReject chunked transfer encoding in HTTP/1.0\u003c/li\u003e\n\u003cli\u003eReject stacked chunked encoding\u003c/li\u003e\n\u003cli\u003eValidate Transfer-Encoding values\u003c/li\u003e\n\u003cli\u003eStrict chunk size validation\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eFast HTTP Parser\u003c/strong\u003e: Update to gunicorn_h1c \u0026gt;= 0.6.3 for \u003ccode\u003easgi_headers\u003c/code\u003e property\nand \u003ccode\u003eInvalidChunkExtension\u003c/code\u003e validation for bare CR rejection\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eASGI PROXY Protocol\u003c/strong\u003e: Add PROXY protocol v1/v2 support to callback parser\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eDocker Images\u003c/strong\u003e: Update to Python 3.14\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eGunicorn 25.2.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFast HTTP Parser (gunicorn_h1c 0.4.1)\u003c/strong\u003e: Integrate new exception types and limit parameters from gunicorn_h1c 0.4.1 for both WSGI and ASGI workers\n\u003cul\u003e\n\u003cli\u003eRequires gunicorn_h1c \u0026gt;= 0.4.1 for \u003ccode\u003ehttp_parser='fast'\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFalls back to Python parser in \u003ccode\u003eauto\u003c/code\u003e mode if version not met\u003c/li\u003e\n\u003cli\u003eProper HTTP status codes for limit errors (414, 431)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003euWSGI Async Workers\u003c/strong\u003e: Fix \u003ccode\u003eInvalidUWSGIHeader: incomplete header\u003c/code\u003e error when using gevent or gthread workers with uwsgi protocol behind nginx. (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3552\"\u003e#3552\u003c/a\u003e, [PR \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3554\"\u003e#3554\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3554\"\u003ebenoitc/gunicorn#3554\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/benoitc/gunicorn/commit/9bce72cfc3985aba7e0c47bf3c00fa681b2847e4\"\u003e\u003ccode\u003e9bce72c\u003c/code\u003e\u003c/a\u003e Update changelog with missing 25.3.0 changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/2a15fdb93ab136e5776692d620852f481c89d610\"\u003e\u003ccode\u003e2a15fdb\u003c/code\u003e\u003c/a\u003e Fix pylint isinstance-second-argument-not-valid-type warning\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/8d08aaa2cbd38fdfa2ca6fb94094c47b9c16730a\"\u003e\u003ccode\u003e8d08aaa\u003c/code\u003e\u003c/a\u003e Fix --limit-request-line 0 to mean unlimited\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/d40a37454736e40916eb51e35895f1c22c0cd34a\"\u003e\u003ccode\u003ed40a374\u003c/code\u003e\u003c/a\u003e Fix pytest-asyncio configuration and treq_asgi hex escapes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/da8bd4850ac0f2d0df215390dad88392eb538d74\"\u003e\u003ccode\u003eda8bd48\u003c/code\u003e\u003c/a\u003e Remove unused AsyncRequest class\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/b00f125755ec3f509a3e82dc5568d9f2d8bddba7\"\u003e\u003ccode\u003eb00f125\u003c/code\u003e\u003c/a\u003e Integrate gunicorn_h1c 0.6.3 with InvalidChunkExtension support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/bdb2ebd5a4913fff1e92800f3763e4a879526d3e\"\u003e\u003ccode\u003ebdb2ebd\u003c/code\u003e\u003c/a\u003e Reject chunk extensions with bare CR bytes (RFC 9112)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7057fc9f89f0ce4d9ac01a12ea2f39768fb32be6\"\u003e\u003ccode\u003e7057fc9\u003c/code\u003e\u003c/a\u003e Fix http_protocols documentation to use string syntax\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/d43acb8fe0910b6669c163e2f4a439e464eab012\"\u003e\u003ccode\u003ed43acb8\u003c/code\u003e\u003c/a\u003e Update to gunicorn_h1c \u0026gt;= 0.6.2 for asgi_headers support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbd27e82a238cb1326336c6aa4b8ae058e2c9ff9\"\u003e\u003ccode\u003ecbd27e8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3559\"\u003e#3559\u003c/a\u003e from benleembruggen/fix/http2-asgi-body-duplication\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...25.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.0 to 2.33.1\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.1\u003c/h2\u003e\n\u003ch2\u003e2.33.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/ferdnyc\"\u003e\u003ccode\u003e@​ferdnyc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7277\"\u003epsf/requests#7277\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#2331-2026-03-30\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2331-2026-03-30\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.1 (2026-03-30)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed test cleanup for CVE-2026-25645 to avoid leaving unnecessary\nfiles in the tmp directory. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed Content-Type header parsing for malformed values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved error consistency for malformed header values. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\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/psf/requests/commit/111d2b77790bf49943c0dfa09b365371c24aec7e\"\u003e\u003ccode\u003e111d2b7\u003c/code\u003e\u003c/a\u003e v2.33.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/f0198e6dfc431a2293dc16e1b1e8fcddc910a7f3\"\u003e\u003ccode\u003ef0198e6\u003c/code\u003e\u003c/a\u003e Fix malformed value parsing for Content-Type (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7309\"\u003e#7309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/bc7dd0fc4d56e808bcdd85ac2d797b3107c89259\"\u003e\u003ccode\u003ebc7dd0f\u003c/code\u003e\u003c/a\u003e Fix cosmetic header validity parsing regex (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7308\"\u003e#7308\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4443b1a847b190010c2972a658924b98b5db6360\"\u003e\u003ccode\u003e4443b1a\u003c/code\u003e\u003c/a\u003e Fix unintended test extra (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7306\"\u003e#7306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/389eea58dfb2f2ee096421a812e3af29c0298951\"\u003e\u003ccode\u003e389eea5\u003c/code\u003e\u003c/a\u003e Cleanup extracted file after extract_zipped_path test (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7305\"\u003e#7305\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7407309c8a8a73aa2f4337184025d440bbedab7a\"\u003e\u003ccode\u003e7407309\u003c/code\u003e\u003c/a\u003e Packaging: DRY out extras definition (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7277\"\u003e#7277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.33.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eLambdaTest\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e), and Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument. \u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\r\ncr.exception_formatter = structlog.dev.plain_traceback\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.4.0...25.5.0\"\u003e25.5.0\u003c/a\u003e - 2025-10-27\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument.\n\u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\ncr.exception_formatter = structlog.dev.plain_traceback\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.RichTracebackFormatter\u003c/code\u003e now exposes the upstream \u003cem\u003ecode_width\u003c/em\u003e parameter.\nDefault \u003cem\u003ewidth\u003c/em\u003e is now \u003ccode\u003eNone\u003c/code\u003e for full terminal width.\nFull terminal width is now handled by Rich itself, bringing support for reflow and \u003ccode\u003eCOLUMN\u003c/code\u003e environment variable.\nPassing \u003ccode\u003e-1\u003c/code\u003e for \u003cem\u003ewidth\u003c/em\u003e is now deprecated and automatically replaced by \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/717\"\u003e#717\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNative loggers now allow the passing of a dictionary for dictionary-based interpolation \u003ccode\u003elog.info(\u0026quot;hello %(name)s!\u0026quot;, {\u0026quot;name\u0026quot;: \u0026quot;world\u0026quot;})\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/748\"\u003e#748\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOn Python 3.11+, \u003ccode\u003estructlog.processors.CallsiteParameterAdder\u003c/code\u003e now supports \u003ccode\u003eCallsiteParameter.QUAL_NAME\u003c/code\u003e that adds the qualified name of the callsite, including scope and class names.\nThis is only available for \u003cem\u003estructlog\u003c/em\u003e-originated events since the standard library has no equivalent.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.stdlib.LoggerFactory\u003c/code\u003e now supports the \u003cem\u003estacklevel\u003c/em\u003e parameter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/763\"\u003e#763\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/hynek/structlog/commit/c0ef9e09e7a536cae65e33c1ac1c8b4e6a6f7511\"\u003e\u003ccode\u003ec0ef9e0\u003c/code\u003e\u003c/a\u003e Prepare 25.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/9cb662fe32046f92f08346c58089a2dcba7cb4bf\"\u003e\u003ccode\u003e9cb662f\u003c/code\u003e\u003c/a\u003e docs: nit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5400612735ad07bbe8ee9f2279f3040aa2e69ca4\"\u003e\u003ccode\u003e5400612\u003c/code\u003e\u003c/a\u003e docs/stdlib: add warning about ProcessorFormatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/1c2c19aa19c8f30330b76465b7a0d9993b9e8360\"\u003e\u003ccode\u003e1c2c19a\u003c/code\u003e\u003c/a\u003e Try validating pyproject.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/aca10f23dd12bd9e14cfe712f1ce66c9cb5f4400\"\u003e\u003ccode\u003eaca10f2\u003c/code\u003e\u003c/a\u003e Drop pretend dependency (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/3800d401db2c682c7c83b2d3eec38d81c9791f4d\"\u003e\u003ccode\u003e3800d40\u003c/code\u003e\u003c/a\u003e docs: use native\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ecaa15ac6b166ebca9f2b4f5cfdb4c4ec138a602\"\u003e\u003ccode\u003eecaa15a\u003c/code\u003e\u003c/a\u003e stdlib: add support for stacklevel (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/763\"\u003e#763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/7f7a221aed6bbff3c13cefd7effe14cc4f0cfc24\"\u003e\u003ccode\u003e7f7a221\u003c/code\u003e\u003c/a\u003e update dev (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5acfc85e3c3fa821dc65b55a226900d40dc0831c\"\u003e\u003ccode\u003e5acfc85\u003c/code\u003e\u003c/a\u003e docs: 5% bigger still\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/c102862e3f30de84c898c4501418dede15056c6d\"\u003e\u003ccode\u003ec102862\u003c/code\u003e\u003c/a\u003e docs: bigger font\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ua-parser` from 1.0.1 to 1.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ua-parser/uap-python/releases\"\u003eua-parser's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eua-parser 1.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed bug in yaml and json loaders, mostly (but not exclusively) affecting windows (non-ascii regex files would fail to parse)\u003c/li\u003e\n\u003cli\u003eAdded caching by default to the regex and re2 resolvers.\u003c/li\u003e\n\u003cli\u003eDropped Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.13, 3.14, 3.14t, graal25\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/ua-parser/uap-python/commit/2179269a30d695cda0c9d59067d64fa47171a187\"\u003e\u003ccode\u003e2179269\u003c/code\u003e\u003c/a\u003e Fix release job's condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/f7aa24d80f9d5f8eed1e08ca5a264af5c61a3681\"\u003e\u003ccode\u003ef7aa24d\u003c/code\u003e\u003c/a\u003e Bump versions in preparation for new releases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/f5ba8dbe8f997f3180bd5ec0cca3e38ea113b2ba\"\u003e\u003ccode\u003ef5ba8db\u003c/code\u003e\u003c/a\u003e Update docs for \u003ca href=\"https://redirect.github.com/ua-parser/uap-python/issues/302\"\u003e#302\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/c85e4e3d4cdf54200bb8eca5c14c682e052650f8\"\u003e\u003ccode\u003ec85e4e3\u003c/code\u003e\u003c/a\u003e Always cache resolvers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/fa30fada2f63685082b24ab25acc19f82f8b6ed1\"\u003e\u003ccode\u003efa30fad\u003c/code\u003e\u003c/a\u003e Improve caching\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/39531862fe74f53e2b14a94056bacf6a227e16b7\"\u003e\u003ccode\u003e3953186\u003c/code\u003e\u003c/a\u003e Modernize dataclasses use\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/0188997e9eaacfea9982e29e604e3e4ba4da1cce\"\u003e\u003ccode\u003e0188997\u003c/code\u003e\u003c/a\u003e Fix readme (3.9 support was dropped by \u003ca href=\"https://redirect.github.com/ua-parser/uap-python/issues/285\"\u003e#285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/891837c725d47a1e7913513eb410f9e58befdabc\"\u003e\u003ccode\u003e891837c\u003c/code\u003e\u003c/a\u003e Remove setuptools-scm from build requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/84206d860c09c73e9617f876ed4913cd2bfff4a6\"\u003e\u003ccode\u003e84206d8\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eproject.license\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ua-parser/uap-python/commit/6d891a6f8f8bc4f419220fb56b12b1fc15ae4349\"\u003e\u003ccode\u003e6d891a6\u003c/code\u003e\u003c/a\u003e Remove license classifier\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ua-parser/uap-python/compare/1.0.1...1.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.37.23 to 1.42.87\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8d65320e4df23b56f3dc5b09ad75d95bcc85382b\"\u003e\u003ccode\u003e8d65320\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.87'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/aff7ae57451834a94a1ba027b3bce741612e3d09\"\u003e\u003ccode\u003eaff7ae5\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.87\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a58071d342a6c659814e6baca5d353d0c311a5e5\"\u003e\u003ccode\u003ea58071d\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/bf26a45aa2447dfee29ab904b99eeda523c20874\"\u003e\u003ccode\u003ebf26a45\u003c/code\u003e\u003c/a\u003e Add boto3 version clarification for login with console credentials (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4758\"\u003e#4758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a4315bc80b83e8cf59e8582eef0e75f79fc01e4a\"\u003e\u003ccode\u003ea4315bc\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.86'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8f0be8d174a0523018093fde6cbe236f5889cc37\"\u003e\u003ccode\u003e8f0be8d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.86' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/f78bb8a98d3ae1f449505f99dd050932db96da66\"\u003e\u003ccode\u003ef78bb8a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.86\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/db209b52a0591d13c55127c374c24c42aa558cee\"\u003e\u003ccode\u003edb209b5\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/499ee750eb6d5bd5ea8ecb9ce5081db5b84f2e93\"\u003e\u003ccode\u003e499ee75\u003c/code\u003e\u003c/a\u003e Allow SSEC bucket decryption in s3 integ tests (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4759\"\u003e#4759\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c24d93e592ef5b06d9943253aea3a2e94d762f88\"\u003e\u003ccode\u003ec24d93e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.85'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.42.87\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd locale support for decimal separator in \u003ccode\u003eintword\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/287\"\u003e#287\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/275\"\u003e#275\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace pre-commit with prek (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/276\"\u003e#276\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003enaturaldelta\u003c/code\u003e: round the value to nearest unit that makes sense (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/272\"\u003e#272\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix plural form for \u003ccode\u003eintword\u003c/code\u003e and improve performance (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/273\"\u003e#273\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eException\u003c/code\u003e with more specific \u003ccode\u003eFileNotFoundError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/286\"\u003e#286\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Uzbek language (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/264\"\u003e#264\u003c/a\u003e) \u003ca href=\"https://github.com/sSimuSs\"\u003e\u003ccode\u003e@​sSimuSs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/268\"\u003e#268\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/2ddb5903cdc1c7e6eb6b083f4f99f73db50aecd9\"\u003e\u003ccode\u003e2ddb590\u003c/code\u003e\u003c/a\u003e Replace \u003ccode\u003eException\u003c/code\u003e with more specific \u003ccode\u003eFileNotFoundError\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/286\"\u003e#286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/e87f2e25660d3af2ea553ea8dc63bff99652bc94\"\u003e\u003ccode\u003ee87f2e2\u003c/code\u003e\u003c/a\u003e Add locale support for decimal separator in \u003ccode\u003eintword\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/717518400d6709cf7e9bebe4a9424eb3b1ebd60d\"\u003e\u003ccode\u003e7175184\u003c/code\u003e\u003c/a\u003e Add locale support for decimal separator in intword\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/25269993e7ef021edaba620c96827ca21cc13d7e\"\u003e\u003ccode\u003e2526999\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/285\"\u003e#285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/ba532d9ae45d1da89f3687259324365dc187ebca\"\u003e\u003ccode\u003eba532d9\u003c/code\u003e\u003c/a\u003e Replace Exception with more specific FileNotFoundError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bdc49ea831cb3a79ba0155a57f27259cabb8cafd\"\u003e\u003ccode\u003ebdc49ea\u003c/code\u003e\u003c/a\u003e Don't ignore UP038, it's been removed from Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/86f116bda6698c3e03e0db5f7fcfd929a4ba9ad4\"\u003e\u003ccode\u003e86f116b\u003c/code\u003e\u003c/a\u003e Add seven-day cooldown to Renovate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/e3f7116924dad455a87e85a5d7b8b7a07460fd57\"\u003e\u003ccode\u003ee3f7116\u003c/code\u003e\u003c/a\u003e No need for setup-python with prek-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3dca143f7884b928632f68449423d914531ca267\"\u003e\u003ccode\u003e3dca143\u003c/code\u003e\u003c/a\u003e \u003ccode\u003enaturaldelta\u003c/code\u003e: round the value to nearest unit that makes sense (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/272\"\u003e#272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bac6f269d7f51adcd62840db969c0a40fec8fd70\"\u003e\u003ccode\u003ebac6f26\u003c/code\u003e\u003c/a\u003e Apply suggestion from \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.2 to 4.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.3.0 (2026-04-03)\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre_load\u003c/code\u003e and \u003ccode\u003epost_load\u003c/code\u003e parameters to \u003ccode\u003emarshmallow.fields.Field\u003c/code\u003e for\nfield-level pre- and post-processing (:issue:\u003ccode\u003e2787\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eTyping: improvements to \u003ccode\u003emarshmallow.validate\u003c/code\u003e (:pr:\u003ccode\u003e2940\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.4 (2026-04-02)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.validate.URL\u003c/code\u003e and \u003ccode\u003emarshmallow.validate.Email\u003c/code\u003e accept Internationalized Domain Names (IDNs) (:issue:\u003ccode\u003e2821\u003c/code\u003e, :issue:\u003ccode\u003e2936\u003c/code\u003e).\n\u003ccode\u003emarshmallow.validate.Email\u003c/code\u003e also correctly rejects IDN domains with leading/trailing hyphens.\nThanks :user:\u003ccode\u003etouhidurrr\u003c/code\u003e for the report.\u003c/li\u003e\n\u003cli\u003eTyping: Fix typing of \u003ccode\u003enested\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Nested\u003c/code\u003e (:pr:\u003ccode\u003e2935\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.3 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003emarshmallow.fields.Number\u003c/code\u003e and \u003ccode\u003emarshmallow.fields.Mapping\u003c/code\u003e abstract base classes to\nprevent using them within Schemas (:issue:\u003ccode\u003e2924\u003c/code\u003e). Thanks :user:\u003ccode\u003eMartingaleCoda\u003c/code\u003e for reporting.\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003erequired\u003c/code\u003e to be set on \u003ccode\u003emarshmallow.fields.Contant\u003c/code\u003e (:issue:\u003ccode\u003e2900\u003c/code\u003e).\nThanks :user:\u003ccode\u003enosnickid\u003c/code\u003e for the report and :user:\u003ccode\u003eworksbyfriday\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emarshmallow.validate.OneOf\u003c/code\u003e emitting extra pairs when labels outnumber choices (:issue:\u003ccode\u003e2869\u003c/code\u003e).\nThanks: user:\u003ccode\u003eT90REAL\u003c/code\u003e for the report and :user:\u003ccode\u003erstar327\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix behavior when passing a dot-delimited attribute name to \u003ccode\u003epartial\u003c/code\u003e for a key with \u003ccode\u003edata_key\u003c/code\u003e set (:pr:\u003ccode\u003e2903\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebysiber\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix Enum field by-name lookup to only return actual members (:pr:\u003ccode\u003e2902\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebysiber\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.fields.DateTime\u003c/code\u003e with \u003ccode\u003eformat=\u0026quot;timestamp_ms\u0026quot;\u003c/code\u003e properly\nrejects bool values (:pr:\u003ccode\u003e2904\u003c/code\u003e). Thanks :user:\u003ccode\u003ebysiber\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eFix typing of \u003ccode\u003eerror_messages\u003c/code\u003e argument to \u003ccode\u003emarshmallow.fields.Field\u003c/code\u003e (:pr:\u003ccode\u003e1636\u003c/code\u003e).\nThanks :user:\u003ccode\u003erepole\u003c/code\u003e for reporting and :user:\u003ccode\u003edhruvildarji\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eipaddress.*\u003c/code\u003e to \u003ccode\u003emarshmallow.Schema.TYPE_MAPPING\u003c/code\u003e (:issue:\u003ccode\u003e1695\u003c/code\u003e).\nThanks :user:\u003ccode\u003eliberforce\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edhruvildarji\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.2 (2026-02-04)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix behavior of \u003ccode\u003efields.Contant(None)\u003c/code\u003e (:issue:\u003ccode\u003e2868\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/marshmallow-code/marshmallow/commit/b596fdb0d1bda68ae400ab29e1f1bde2f06900b3\"\u003e\u003ccode\u003eb596fdb\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/256f0aabbc18232219e33854999372cfe1643f52\"\u003e\u003ccode\u003e256f0aa\u003c/code\u003e\u003c/a\u003e Add pre/post_load parameters to Field (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2799\"\u003e#2799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/c847ad47a3f1235021bd2624b10c255a936ed107\"\u003e\u003ccode\u003ec847ad4\u003c/code\u003e\u003c/a\u003e Typing improvements to marshmallow.validate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/eb863228f5273244c19388fb6161ffdb90cb04d1\"\u003e\u003ccode\u003eeb86322\u003c/code\u003e\u003c/a\u003e Remove redundant docs job (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2939\"\u003e#2939\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/a44ad62a876d2e9330d0e370b438bafb058676d4\"\u003e\u003ccode\u003ea44ad62\u003c/code\u003e\u003c/a\u003e Avoid infinite recursion in nesting docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2938\"\u003e#2938\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/3360e34a2da480eba03ae07bd4b15f0859027bf8\"\u003e\u003ccode\u003e3360e34\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7b9ce45ac906c2597ac0acb7416e01e80218b546\"\u003e\u003ccode\u003e7b9ce45\u003c/code\u003e\u003c/a\u003e Fix changelog typos and update releasing docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/f07eadc87dfac25ed505d5cd9d186920f2682733\"\u003e\u003ccode\u003ef07eadc\u003c/code\u003e\u003c/a\u003e Fix validate.Email to accept IDNs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2937\"\u003e#2937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/4acb783c73130f762aa5b0df6b65ff7685d5ff2c\"\u003e\u003ccode\u003e4acb783\u003c/code\u003e\u003c/a\u003e Fix Unreachable Warning (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2935\"\u003e#2935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/3492fae7b31d310814ad16fcddad5c7717d54949\"\u003e\u003ccode\u003e3492fae\u003c/code\u003e\u003c/a\u003e Remove redundant python-version (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2932\"\u003e#2932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.2...4.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-storage: v3.10.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.10.0...v3.10.1\"\u003e3.10.1\u003c/a\u003e (2026-03-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eraise ValueError if api_endpoint is unset when using AnonymousCredentials in AsyncGrpcClient.  (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1778\"\u003e#1778\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/17828ea3\"\u003e17828ea3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-storage: v3.10.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.9.0...v3.10.0\"\u003e3.10.0\u003c/a\u003e (2026-03-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Bucket Encryption Enforcement] add support for bucket encryption enforcement config (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1742\"\u003e#1742\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a6e8b00e4e6ff57460373f8e628fd363be47811\"\u003e2a6e8b00e4e6ff57460373f8e628fd363be47811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerf Improvments\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Rapid Buckets Reads] Use raw proto access for read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1764\"\u003e#1764\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/14cfd61ce35365a409650981239ef742cdf375fb\"\u003e14cfd61ce35365a409650981239ef742cdf375fb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Benchmarks] init mp pool \u0026amp; grpc client once, use os.sched_setaffinity (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1751\"\u003e#1751\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\"\u003ea9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Writes] don't flush at every append, results in bad perf (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1746\"\u003e#1746\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ab62d728ac7d7be3c4fe9a99d72e35ead310805a\"\u003eab62d728ac7d7be3c4fe9a99d72e35ead310805a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Windows] skip downloading blobs whose name contain \u003ccode\u003e\u0026quot;:\u0026quot; \u003c/code\u003e eg: \u003ccode\u003eC:\u003c/code\u003e \u003ccode\u003eD:\u003c/code\u003e etc when application runs in Windows. (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1774\"\u003e#1774\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/558198823ed51918db9c0137715d1e7f5b593975\"\u003e558198823ed51918db9c0137715d1e7f5b593975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Path Traversal] Prevent path traversal in \u003ccode\u003edownload_many_to_path\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1768\"\u003e#1768\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\"\u003e700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets] pass token correctly, '\u0026amp;' instead of ',' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1756\"\u003e#1756\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d8dd1e074d2431de9b45e0103181dce749a447a0\"\u003ed8dd1e074d2431de9b45e0103181dce749a447a0\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-storage 3.9.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.8.0...v3.9.0\"\u003e3.9.0\u003c/a\u003e (2026-02-02)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eupdate generation for MRD (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1730\"\u003e#1730\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/08bc7082\"\u003e08bc7082\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd get_object method for async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1735\"\u003e#1735\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0e5ec29b\"\u003e0e5ec29b\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd micro-benchmarks for reads comparing standard (regional) vs rapid (zonal) buckets. (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1697\"\u003e#1697\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/1917649f\"\u003e1917649f\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for opening via \u003ccode\u003ewrite_handle\u003c/code\u003e and fix \u003ccode\u003ewrite_handle\u003c/code\u003e type (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1715\"\u003e#1715\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2bc15fa5\"\u003e2bc15fa5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd samples for appendable objects writes and reads (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2e1a1eb5\"\u003e2e1a1eb5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd samples for appendable objects writes and reads (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1705\"\u003e#1705\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2e1a1eb5\"\u003e2e1a1eb5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd context manager to mrd (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1724\"\u003e#1724\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ac2808a\"\u003e5ac2808a\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove Zonal Buckets features of \u003ccode\u003e_experimental\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1728\"\u003e#1728\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/74c9ecc5\"\u003e74c9ecc5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd default user agent for grpc (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1726\"\u003e#1726\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7b319469\"\u003e7b319469\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.10.0...v3.10.1\"\u003e3.10.1\u003c/a\u003e (2026-03-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eraise ValueError if api_endpoint is unset when using AnonymousCredentials in AsyncGrpcClient.  (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1778\"\u003e#1778\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/17828ea316872938a98a6360b10a2495c54bbbcb\"\u003e17828ea316872938a98a6360b10a2495c54bbbcb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.9.0...v3.10.0\"\u003e3.10.0\u003c/a\u003e (2026-03-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Bucket Encryption Enforcement] add support for bucket encryption enforcement config (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1742\"\u003e#1742\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a6e8b00e4e6ff57460373f8e628fd363be47811\"\u003e2a6e8b00e4e6ff57460373f8e628fd363be47811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerf Improvments\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Rapid Buckets Reads] Use raw proto access for read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1764\"\u003e#1764\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/14cfd61ce35365a409650981239ef742cdf375fb\"\u003e14cfd61ce35365a409650981239ef742cdf375fb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Benchmarks] init mp pool \u0026amp; grpc client once, use os.sched_setaffinity (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1751\"\u003e#1751\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\"\u003ea9eb82c1b9b3c6ae5717d47b76284ed0deb5f769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets Writes] don't flush at every append, results in bad perf (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1746\"\u003e#1746\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ab62d728ac7d7be3c4fe9a99d72e35ead310805a\"\u003eab62d728ac7d7be3c4fe9a99d72e35ead310805a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Windows] skip downloading blobs whose name contain \u003ccode\u003e\u0026quot;:\u0026quot; \u003c/code\u003e eg: \u003ccode\u003eC:\u003c/code\u003e \u003ccode\u003eD:\u003c/code\u003e etc when application runs in Windows. (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1774\"\u003e#1774\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/558198823ed51918db9c0137715d1e7f5b593975\"\u003e558198823ed51918db9c0137715d1e7f5b593975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Path Traversal] Prevent path traversal in \u003ccode\u003edownload_many_to_path\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1768\"\u003e#1768\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\"\u003e700fec3bf7aa37bd5ea4b163cc3f9e8e6892bd5a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Rapid Buckets] pass token correctly, '\u0026amp;' instead of ',' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1756\"\u003e#1756\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d8dd1e074d2431de9b45e0103181dce749a447a0\"\u003ed8dd1e074d2431de9b45e0103181dce749a447a0\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.8.0...v3.9.0\"\u003e3.9.0\u003c/a\u003e (2026-02-02)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd get_object method for async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1735\"\u003e#1735\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0e5ec29bc6a31b77bcfba4254cef5bffb199095c\"\u003e0e5ec29bc6a31b77bcfba4254cef5bffb199095c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eexpose \u003ccode\u003eDELETE_OBJECT\u003c/code\u003e   in \u003ccode\u003eAsyncGrpcClient\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1718\"\u003e#1718\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c8dd7a0b124c395b7b60189ee78f47aba8d51f7d\"\u003ec8dd7a0b124c395b7b60189ee78f47aba8d51f7d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate generation for MRD (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1730\"\u003e#1730\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/08bc7082db7392f13bc8...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1867","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1867","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1867/packages"}},{"old_version":"2.21.0","new_version":"2.23.0","update_type":"minor","path":null,"pr_created_at":"2025-12-22T03:07:17.000Z","version_change":"2.21.0 → 2.23.0","issue":{"uuid":"3752100019","node_id":"PR_kwDODMT4Ms66DZxN","number":130,"state":"closed","title":"chore(deps): Bump the pip group across 1 directory with 4 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-27T16:44:44.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-22T03:07:17.000Z","updated_at":"2025-12-27T16:44:51.000Z","time_to_close":481047,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"pip","update_count":4,"packages":[{"name":"google-api-python-client","old_version":"2.184.0","new_version":"2.187.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth","old_version":"2.41.1","new_version":"2.45.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"google-cloud-datastore","old_version":"2.21.0","new_version":"2.23.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"google-cloud-firestore","old_version":"2.21.0","new_version":"2.22.0","repository_url":"https://github.com/googleapis/python-firestore"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 4 updates in the / directory: [google-api-python-client](https://github.com/googleapis/google-api-python-client), [google-auth](https://github.com/googleapis/google-auth-library-python), [google-cloud-datastore](https://github.com/googleapis/python-datastore) and [google-cloud-firestore](https://github.com/googleapis/python-firestore).\n\nUpdates `google-api-python-client` from 2.184.0 to 2.187.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-api-python-client/releases\"\u003egoogle-api-python-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.187.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/compare/v2.186.0...v2.187.0\"\u003e2.187.0\u003c/a\u003e (2025-11-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eadmin:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/4ae6f5bc3f1a35cd69cb589c432c299df559dacf\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/4ae6f5bc3f1a35cd69cb589c432c299df559dacf\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eaiplatform:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/131f59d6003dfbce3abfa00730dba9f90b9ca2ab\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/131f59d6003dfbce3abfa00730dba9f90b9ca2ab\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealloydb:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/8c341070f77639ef47f010d9410a814d65f0ed1e\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/8c341070f77639ef47f010d9410a814d65f0ed1e\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eanalyticshub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/9ba4beb4e61873283345d197c2909259948c5488\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/9ba4beb4e61873283345d197c2909259948c5488\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eandroidpublisher:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/3db77266c2abb44ab149d0f83f58f87727280274\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/3db77266c2abb44ab149d0f83f58f87727280274\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapigee:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/a0411b6f5cc087f24e7ffb2c3e55b75e68f7d3c7\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/a0411b6f5cc087f24e7ffb2c3e55b75e68f7d3c7\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapihub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/f820a3b6cd6fdcb90a02f0635cc53b231fd340f3\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/f820a3b6cd6fdcb90a02f0635cc53b231fd340f3\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapphub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0cde10dd690e2ca303b8dddd26baee762b12e103\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0cde10dd690e2ca303b8dddd26baee762b12e103\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eartifactregistry:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c5e5cbd48fac599f541b4bb0671f73504bd95331\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c5e5cbd48fac599f541b4bb0671f73504bd95331\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eauthorizedbuyersmarketplace:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/4b1a58e965c744981d87598ff4d1d9caeb5ad442\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/4b1a58e965c744981d87598ff4d1d9caeb5ad442\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebackupdr:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/9ea2eb7f2c1bea7de204c1641ad2b2fa232cfad8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/9ea2eb7f2c1bea7de204c1641ad2b2fa232cfad8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebiglake:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/f598d38025c1515b5e615f8437a64cbd43fed135\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/f598d38025c1515b5e615f8437a64cbd43fed135\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquerydatatransfer:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/8dd81b0b258535afa8a6da984cd62f53892f7754\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/8dd81b0b258535afa8a6da984cd62f53892f7754\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquery:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/cee5b00a8ea42682301ccd82abb987ca985520b1\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/cee5b00a8ea42682301ccd82abb987ca985520b1\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003echat:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c0b2205c2dbc816c783d5d9da64aa8f01ac64976\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c0b2205c2dbc816c783d5d9da64aa8f01ac64976\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudfunctions:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c40d929e0a719ba2f756c5e076edaafe97f0ade8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c40d929e0a719ba2f756c5e076edaafe97f0ade8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudidentity:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d55d33d3d82ed3045a20a6372368c06060aa7afe\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d55d33d3d82ed3045a20a6372368c06060aa7afe\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudkms:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/aa4d8af269309a77657799795233644c83f41156\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/aa4d8af269309a77657799795233644c83f41156\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecloudscheduler:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/68574b08de677e92f6b4ef73c9aa8981480fd244\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/68574b08de677e92f6b4ef73c9aa8981480fd244\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecompute:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/385aad3a9db1c1e964dfabe2aec63510e495f929\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/385aad3a9db1c1e964dfabe2aec63510e495f929\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003econtactcenterinsights:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/abf00d5720427fc630a1b261b37bddf881d4aed8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/abf00d5720427fc630a1b261b37bddf881d4aed8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003econtainer:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/1fa286c4cf3c068ad7389a9f0c9d2672023d0a9a\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/1fa286c4cf3c068ad7389a9f0c9d2672023d0a9a\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edataplex:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/b082bcdea218f8eda4e3167f0d91086067f54326\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/b082bcdea218f8eda4e3167f0d91086067f54326\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edataproc:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/46ecc1b97aee590e952a455f36a17ee57edc4878\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/46ecc1b97aee590e952a455f36a17ee57edc4878\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edatastream:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/94712425b6c1a43eac2f609efa2bbe0130c1d157\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/94712425b6c1a43eac2f609efa2bbe0130c1d157\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeveloperconnect:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/b5dbb37c9de1093601e5258e3390dbcba29090ab\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/b5dbb37c9de1093601e5258e3390dbcba29090ab\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edfareporting:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/eb29fdfc7d374ca0fa8a4521dfd03adf5f9d2aaa\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/eb29fdfc7d374ca0fa8a4521dfd03adf5f9d2aaa\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edialogflow:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0d073639ba2dd3cf64711a0b2e765c69cf40f301\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0d073639ba2dd3cf64711a0b2e765c69cf40f301\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ediscoveryengine:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0a0ffefd477c00e649e2449de4e978e97c7cb77e\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0a0ffefd477c00e649e2449de4e978e97c7cb77e\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edisplayvideo:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/b952757151bf40ee3e8a29b4ba97723e839d564f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/b952757151bf40ee3e8a29b4ba97723e839d564f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edlp:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/c44af38454081885ad41f8e11e39e6d2b8be9250\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/c44af38454081885ad41f8e11e39e6d2b8be9250\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocumentai:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/892d8591315553114022645b20b312d8f0b0e142\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/892d8591315553114022645b20b312d8f0b0e142\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edrive:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d0d23365f047c5bc095d500fbfb6364fea5b829f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d0d23365f047c5bc095d500fbfb6364fea5b829f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efile:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/33cc60f6da2e139c26e4037a0b2bd26a688b956f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/33cc60f6da2e139c26e4037a0b2bd26a688b956f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efirebaseappdistribution:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d228cb515590e17fdbb2732f667db09940ff65f0\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d228cb515590e17fdbb2732f667db09940ff65f0\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efirebaseapphosting:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/62fab0552fa333a8a79c0c433c515b029d743e3f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/62fab0552fa333a8a79c0c433c515b029d743e3f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efirebasedataconnect:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/5fc2c543b13bc466fccd2e89fef36fd6da5a905c\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/5fc2c543b13bc466fccd2e89fef36fd6da5a905c\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egkeonprem:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/aacb9659d60bed0a38c05936c788d6c96eb30599\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/aacb9659d60bed0a38c05936c788d6c96eb30599\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehealthcare:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/ac074ed9332b6ebaa776c9ef7123d708fea89b8b\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/ac074ed9332b6ebaa776c9ef7123d708fea89b8b\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eiamcredentials:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/a668b6ab59c1c913ed455c94e722cd0747850c9f\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/a668b6ab59c1c913ed455c94e722cd0747850c9f\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eids:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/e03595989016a96400343dbaa03371a049656d50\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/e03595989016a96400343dbaa03371a049656d50\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elogging:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/652fd598fcd529c3da0563990bf7f4941b172f55\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/652fd598fcd529c3da0563990bf7f4941b172f55\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elooker:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/483cba2bbcd375f8c6808e6ad386f8279b622fb6\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/483cba2bbcd375f8c6808e6ad386f8279b622fb6\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emanagedkafka:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/94e3bc173770528969b1abd935ac393934f6fda4\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/94e3bc173770528969b1abd935ac393934f6fda4\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e8edf6d6\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/googleapis/google-api-python-client/commit/623c34ff35b2a4b44bbc0e013073199d5aea4f5a\"\u003e\u003ccode\u003e623c34f\u003c/code\u003e\u003c/a\u003e chore(main): release 2.187.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2682\"\u003e#2682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8edf6d686daaa9763cae1c09749c77c8fcd0c10c\"\u003e\u003ccode\u003e8edf6d6\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2681\"\u003e#2681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/98ba848a8b8dc3baac562122fc5fd115ee0cea1e\"\u003e\u003ccode\u003e98ba848\u003c/code\u003e\u003c/a\u003e chore(main): release 2.186.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2679\"\u003e#2679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/86cb1335984094dad37bbf5e2148ef9b44dee5d9\"\u003e\u003ccode\u003e86cb133\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2678\"\u003e#2678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/33aee305b094e501517847552292a0f7e1ba8898\"\u003e\u003ccode\u003e33aee30\u003c/code\u003e\u003c/a\u003e chore(main): release 2.185.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2667\"\u003e#2667\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/8ee51c47a47db8e09997502f482e990b291cbb98\"\u003e\u003ccode\u003e8ee51c4\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2672\"\u003e#2672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/bde091934f8392d920e9f96f44bc0af078fc6124\"\u003e\u003ccode\u003ebde0919\u003c/code\u003e\u003c/a\u003e chore(python): Add Python 3.14 to python post processor image (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2669\"\u003e#2669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/f32e6fa89eebee9b57d2fdd11c2e732a75bb7ffc\"\u003e\u003ccode\u003ef32e6fa\u003c/code\u003e\u003c/a\u003e chore: add googleapis/python-core-client-libraries as codeowner (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2670\"\u003e#2670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/0fb1cf3a3d292281a9ba0d378e3bc7c0a75ecc9c\"\u003e\u003ccode\u003e0fb1cf3\u003c/code\u003e\u003c/a\u003e feat: add support for 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2668\"\u003e#2668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/3850298de90deca18c5aac04f120fc15843fdc54\"\u003e\u003ccode\u003e3850298\u003c/code\u003e\u003c/a\u003e chore: Update discovery artifacts (\u003ca href=\"https://redirect.github.com/googleapis/google-api-python-client/issues/2666\"\u003e#2666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/google-api-python-client/compare/v2.184.0...v2.187.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.41.1 to 2.45.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth 2.45.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.44.0...v2.45.0\"\u003e2.45.0\u003c/a\u003e (2025-12-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding Agent Identity bound token support and handling certificate mismatches with retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1890\"\u003e#1890\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b32c934e\"\u003eb32c934e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth 2.44.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.43.0...v2.44.0\"\u003e2.44.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMDS connections use mTLS (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1856\"\u003e#1856\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0387bb95\"\u003e0387bb95\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003esupport Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1822\"\u003e#1822\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0f7097e7\"\u003e0f7097e7\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd ecdsa p-384 support (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1872\"\u003e#1872\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/39c381a5\"\u003e39c381a5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd shlex to correctly parse executable commands with spaces (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1855\"\u003e#1855\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/cf6fc3cc\"\u003ecf6fc3cc\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement token revocation in STS client and add revoke() metho… (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1849\"\u003e#1849\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/d5638986\"\u003ed5638986\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd temporary patch to workload cert logic to accomodate Cloud Run mis-configuration (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1880\"\u003e#1880\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/78de7907\"\u003e78de7907\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDelegate workload cert and key default lookup to helper function (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1877\"\u003e#1877\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b0993c7e\"\u003eb0993c7e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse public refresh method for source credentials in ImpersonatedCredentials (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1884\"\u003e#1884\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e0c3296f\"\u003ee0c3296f\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth 2.43.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.42.1...v2.43.0\"\u003e2.43.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd public wrapper for _mtls_helper.check_use_client_cert which enables mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE is not set, when the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1859\"\u003e#1859\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/1535eccb\"\u003e1535eccb\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eEnable mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE  is not set, if the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1848\"\u003e#1848\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/395e405b\"\u003e395e405b\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eonboard \u003ccode\u003egoogle-auth\u003c/code\u003e to librarian (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1838\"\u003e#1838\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/c503eaa5\"\u003ec503eaa5\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.42.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.42.0...v2.42.1\"\u003e2.42.1\u003c/a\u003e (2025-10-30)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCatch ValueError for json.loads() (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1842\"\u003e#1842\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b074cad460589633adfc6744c01726ae86f2aa2b\"\u003eb074cad\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.42.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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/blob/main/CHANGELOG.md\"\u003egoogle-auth's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.44.0...v2.45.0\"\u003e2.45.0\u003c/a\u003e (2025-12-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding Agent Identity bound token support and handling certificate mismatches with retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1890\"\u003e#1890\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b32c934e6b0d09b94c467cd432a0a635e8b05f5c\"\u003eb32c934e6b0d09b94c467cd432a0a635e8b05f5c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.43.0...v2.44.0\"\u003e2.44.0\u003c/a\u003e (2025-12-13)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1822\"\u003e#1822\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0f7097e78f247665b6ef0287d482033f7be2ed6d\"\u003e0f7097e78f247665b6ef0287d482033f7be2ed6d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd ecdsa p-384 support (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1872\"\u003e#1872\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/39c381a5f6881b590025f36d333d12eff8dc60fc\"\u003e39c381a5f6881b590025f36d333d12eff8dc60fc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMDS connections use mTLS (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1856\"\u003e#1856\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0387bb95713653d47e846cad3a010eb55ef2db4c\"\u003e0387bb95713653d47e846cad3a010eb55ef2db4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement token revocation in STS client and add revoke() metho… (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1849\"\u003e#1849\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/d5638986ca03ee95bfffa9ad821124ed7e903e63\"\u003ed5638986ca03ee95bfffa9ad821124ed7e903e63\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd shlex to correctly parse executable commands with spaces (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1855\"\u003e#1855\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/cf6fc3cced78bc1362a7fe596c32ebc9ce03c26b\"\u003ecf6fc3cced78bc1362a7fe596c32ebc9ce03c26b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse public refresh method for source credentials in ImpersonatedCredentials (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1884\"\u003e#1884\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e0c3296f471747258f6d98d2d9bfde636358ecde\"\u003ee0c3296f471747258f6d98d2d9bfde636358ecde\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd temporary patch to workload cert logic to accomodate Cloud Run mis-configuration (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1880\"\u003e#1880\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/78de7907b8bdb7b5510e3c6fa8a3f3721e2436d7\"\u003e78de7907b8bdb7b5510e3c6fa8a3f3721e2436d7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDelegate workload cert and key default lookup to helper function (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1877\"\u003e#1877\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b0993c7edaba505d0fb0628af28760c43034c959\"\u003eb0993c7edaba505d0fb0628af28760c43034c959\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.42.1...google-auth-v2.43.0\"\u003e2.43.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd public wrapper for _mtls_helper.check_use_client_cert which enables mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE is not set, when the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1859\"\u003e#1859\u003c/a\u003e) Add public wrapper for check_use_client_cert which enables mTLS if\nGOOGLE_API_USE_CLIENT_CERTIFICATE is not set, when the MWID/X.509 cert\nsources detected. Also, fix check_use_client_cert to return boolean\nvalue.\nChange \u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1848\"\u003e#1848\u003c/a\u003e added the check_use_client_cert method that helps know if\nclient cert should be used for mTLS connection. However, that was in a\nprivate class, thus, created a public wrapper of the same function so\nthat it can be used by python Client Libraries. Also, updated\ncheck_use_client_cert to return a boolean value instead of existing\nstring value for better readability and future scope.\n--------- (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1535eccbff0ad8f3fd6a9775316ac8b77dca66ba\"\u003e1535eccbff0ad8f3fd6a9775316ac8b77dca66ba\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnable mTLS if GOOGLE_API_USE_CLIENT_CERTIFICATE  is not set, if the MWID/X.509 cert sources detected (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1848\"\u003e#1848\u003c/a\u003e) The Python SDK will use a hybrid approach for mTLS enablement:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cul\u003e\n\u003cli\u003eIf the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is set\n(either true or false), the SDK will respect that setting. This is\nnecessary for test scenarios and users who need to explicitly control\nmTLS behavior.\u003c/li\u003e\n\u003cli\u003eIf the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable is not\nset, the SDK will automatically enable mTLS only if it detects Managed\nWorkload Identity (MWID) or X.509 Workforce Identity Federation (WIF)\ncertificate sources. In other cases where the variable is not set, mTLS\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/googleapis/google-auth-library-python/commit/08fabf776c02dc6a70472b3ddd9733d66d0053bf\"\u003e\u003ccode\u003e08fabf7\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251215T132028Z (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1891\"\u003e#1891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b32c934e6b0d09b94c467cd432a0a635e8b05f5c\"\u003e\u003ccode\u003eb32c934\u003c/code\u003e\u003c/a\u003e feat: Adding Agent Identity bound token support and handling certificate mism...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/262eb9e33d58ffeb536ecd083c22d9fb12c808e6\"\u003e\u003ccode\u003e262eb9e\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T161150Z (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1888\"\u003e#1888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/0f7097e78f247665b6ef0287d482033f7be2ed6d\"\u003e\u003ccode\u003e0f7097e\u003c/code\u003e\u003c/a\u003e feat: support Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1822\"\u003e#1822\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e0c3296f471747258f6d98d2d9bfde636358ecde\"\u003e\u003ccode\u003ee0c3296\u003c/code\u003e\u003c/a\u003e fix(auth): Use public refresh method for source credentials in ImpersonatedCr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/78de7907b8bdb7b5510e3c6fa8a3f3721e2436d7\"\u003e\u003ccode\u003e78de790\u003c/code\u003e\u003c/a\u003e fix(auth): Add temporary patch to workload cert logic to accomodate Cloud Run...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3e8a56687fd050ff44a35cc8db0e95e996648173\"\u003e\u003ccode\u003e3e8a566\u003c/code\u003e\u003c/a\u003e chore(tests): allow expired secret in system tests (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1883\"\u003e#1883\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/b0993c7edaba505d0fb0628af28760c43034c959\"\u003e\u003ccode\u003eb0993c7\u003c/code\u003e\u003c/a\u003e fix(auth): Delegate workload cert and key default lookup to helper function (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/2c374d36a61569b75d11c17fae124d591c52ddc6\"\u003e\u003ccode\u003e2c374d3\u003c/code\u003e\u003c/a\u003e chore: update secret (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1879\"\u003e#1879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/39c381a5f6881b590025f36d333d12eff8dc60fc\"\u003e\u003ccode\u003e39c381a\u003c/code\u003e\u003c/a\u003e feat: add ecdsa p-384 support (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1872\"\u003e#1872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.41.1...v2.45.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.21.0 to 2.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.23.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c02328\"\u003e85c02328\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/df729015\"\u003edf729015\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e85c023287daebb0d5c1a009e2beaccf0c6ea75eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-datastore-v2.21.0...google-cloud-datastore-v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/df729015149bd69e9d6dbced260d97c8eed77d4f\"\u003edf729015149bd69e9d6dbced260d97c8eed77d4f\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/googleapis/python-datastore/commit/29459a4d6ea0c431c802cf86bd6931f10cb0bcd2\"\u003e\u003ccode\u003e29459a4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T133331Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/659\"\u003e#659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/92a1a33a67d56690562c91161d2f7306fc41b1ed\"\u003e\u003ccode\u003e92a1a33\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for batches without context managers (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/578\"\u003e#578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e\u003ccode\u003e85c0232\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/84f880b955ed7a0310d4c0be9911d41db2699bea\"\u003e\u003ccode\u003e84f880b\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T152033Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/66c1e47cd77bac48367578339c947402af8952bf\"\u003e\u003ccode\u003e66c1e47\u003c/code\u003e\u003c/a\u003e chore(tests): update kokoro continuous test config (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/117793c1914039b5b805bd1af888fc50140ba780\"\u003e\u003ccode\u003e117793c\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/2dc9afcf55d2cf1efb4933aa43b5267cb8b803c9\"\u003e\u003ccode\u003e2dc9afc\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/642\"\u003e#642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/f1eedbf857976560bb581961be8f8feced52b77d\"\u003e\u003ccode\u003ef1eedbf\u003c/code\u003e\u003c/a\u003e chore(python): Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9dece547a86e114aea8821c8ac07fe7304529ee5\"\u003e\u003ccode\u003e9dece54\u003c/code\u003e\u003c/a\u003e chore: remove unused files (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/34f6b27db61c6414cca7bbc929767bbefd66ea55\"\u003e\u003ccode\u003e34f6b27\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.23.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-firestore` from 2.21.0 to 2.22.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-firestore/releases\"\u003egoogle-cloud-firestore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-firestore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1140\"\u003e#1140\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/403afb08\"\u003e403afb08\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eExpose tags field in Database and RestoreDatabaseRequest public protos (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1074\"\u003e#1074\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/49836391\"\u003e49836391\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1110\"\u003e#1110\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/52b2055d\"\u003e52b2055d\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded read_time as a parameter to various calls (synchronous/base classes) (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1050\"\u003e#1050\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d8e3af1f\"\u003ed8e3af1f\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eupdate the async transactional types (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1066\"\u003e#1066\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/210a14a4\"\u003e210a14a4\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eimprove typing (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1136\"\u003e#1136\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d1c730d9\"\u003ed1c730d9\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-firestore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-firestore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1140\"\u003e#1140\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/403afb08109c8271eddd97d6172136271cc0a8a9\"\u003e403afb08109c8271eddd97d6172136271cc0a8a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1110\"\u003e#1110\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/52b2055d01ab5d2c34e00f8861e29990f89cd3d8\"\u003e52b2055d01ab5d2c34e00f8861e29990f89cd3d8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose tags field in Database and RestoreDatabaseRequest public protos (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1074\"\u003e#1074\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/49836391dc712bd482781a26ccd3c8a8408c473b\"\u003e49836391dc712bd482781a26ccd3c8a8408c473b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded read_time as a parameter to various calls (synchronous/base classes) (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1050\"\u003e#1050\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d8e3af1f9dbdfaf5df0d993a0a7e28883472c621\"\u003ed8e3af1f9dbdfaf5df0d993a0a7e28883472c621\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimprove typing (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1136\"\u003e#1136\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d1c730d9eef867d16d7818a75f7d58439a942c1d\"\u003ed1c730d9eef867d16d7818a75f7d58439a942c1d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate the async transactional types (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1066\"\u003e#1066\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-firestore/commit/210a14a4b758d70aad05940665ed2a2a21ae2a8b\"\u003e210a14a4b758d70aad05940665ed2a2a21ae2a8b\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/googleapis/python-firestore/commit/9b030493b6a0fe6ba0739bd874bad6d04fa758c9\"\u003e\u003ccode\u003e9b03049\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T132411Z (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/cdd926a714fdcbb12ac218a04092a6dd3f99870d\"\u003e\u003ccode\u003ecdd926a\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251216T191850Z (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1144\"\u003e#1144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/9f9f182be1f6ea95bbea373b2c3c1be3cf2c2ebb\"\u003e\u003ccode\u003e9f9f182\u003c/code\u003e\u003c/a\u003e chore: fix broken Python 3.13 documentation link (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1135\"\u003e#1135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/403afb08109c8271eddd97d6172136271cc0a8a9\"\u003e\u003ccode\u003e403afb0\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1140\"\u003e#1140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d1c730d9eef867d16d7818a75f7d58439a942c1d\"\u003e\u003ccode\u003ed1c730d\u003c/code\u003e\u003c/a\u003e fix(types): improve typing (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1136\"\u003e#1136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/d637aee74d364191579e86e285aac40ce2ab0dd5\"\u003e\u003ccode\u003ed637aee\u003c/code\u003e\u003c/a\u003e chore(librarian): Update Librarian container image SHA (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1131\"\u003e#1131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/5a4c312d8825ec6208a32d29ba831589db97aa1e\"\u003e\u003ccode\u003e5a4c312\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/fcfeea76a513e585ea26e1f3a0b78d9aad131063\"\u003e\u003ccode\u003efcfeea7\u003c/code\u003e\u003c/a\u003e chore(python): remove configure_previous_major_version_branches (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/f4953d6678ea810ba8741b3e01a419ce47c3e118\"\u003e\u003ccode\u003ef4953d6\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1077\"\u003e#1077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-firestore/commit/65d9d16535b2007676e9fd928f08d7d5b4e9234f\"\u003e\u003ccode\u003e65d9d16\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for aggregations (\u003ca href=\"https://redirect.github.com/googleapis/python-firestore/issues/1109\"\u003e#1109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-firestore/compare/v2.21.0...v2.22.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/broadinstitute/bits-appengine/pull/130","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/broadinstitute%2Fbits-appengine/issues/130","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/130/packages"}},{"old_version":"2.19.0","new_version":"2.23.0","update_type":"minor","path":"/Server/ChatService","pr_created_at":"2025-12-20T09:47:23.000Z","version_change":"2.19.0 → 2.23.0","issue":{"uuid":"3749864656","node_id":"PR_kwDOO7afqM658hty","number":630,"state":"open","title":"chore(deps): bump google-cloud-datastore from 2.19.0 to 2.23.0 in /Server/ChatService","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":"2025-12-20T09:47:23.000Z","updated_at":"2025-12-20T09:52:26.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"google-cloud-datastore","old_version":"2.19.0","new_version":"2.23.0","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/Server/ChatService","ecosystem":"pip"},"body":"Bumps [google-cloud-datastore](https://github.com/googleapis/python-datastore) from 2.19.0 to 2.23.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.23.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c02328\"\u003e85c02328\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/df729015\"\u003edf729015\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e85c023287daebb0d5c1a009e2beaccf0c6ea75eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-datastore-v2.21.0...google-cloud-datastore-v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/df729015149bd69e9d6dbced260d97c8eed77d4f\"\u003edf729015149bd69e9d6dbced260d97c8eed77d4f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\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/googleapis/python-datastore/commit/29459a4d6ea0c431c802cf86bd6931f10cb0bcd2\"\u003e\u003ccode\u003e29459a4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T133331Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/659\"\u003e#659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/92a1a33a67d56690562c91161d2f7306fc41b1ed\"\u003e\u003ccode\u003e92a1a33\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for batches without context managers (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/578\"\u003e#578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e\u003ccode\u003e85c0232\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/84f880b955ed7a0310d4c0be9911d41db2699bea\"\u003e\u003ccode\u003e84f880b\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T152033Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/66c1e47cd77bac48367578339c947402af8952bf\"\u003e\u003ccode\u003e66c1e47\u003c/code\u003e\u003c/a\u003e chore(tests): update kokoro continuous test config (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/117793c1914039b5b805bd1af888fc50140ba780\"\u003e\u003ccode\u003e117793c\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/2dc9afcf55d2cf1efb4933aa43b5267cb8b803c9\"\u003e\u003ccode\u003e2dc9afc\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/642\"\u003e#642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/f1eedbf857976560bb581961be8f8feced52b77d\"\u003e\u003ccode\u003ef1eedbf\u003c/code\u003e\u003c/a\u003e chore(python): Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9dece547a86e114aea8821c8ac07fe7304529ee5\"\u003e\u003ccode\u003e9dece54\u003c/code\u003e\u003c/a\u003e chore: remove unused files (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/34f6b27db61c6414cca7bbc929767bbefd66ea55\"\u003e\u003ccode\u003e34f6b27\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.23.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=google-cloud-datastore\u0026package-manager=pip\u0026previous-version=2.19.0\u0026new-version=2.23.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/Froillan123/Faceofmind/pull/630","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Froillan123%2FFaceofmind/issues/630","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/630/packages"}},{"old_version":"2.10.0","new_version":"2.23.0","update_type":"minor","path":null,"pr_created_at":"2025-12-17T04:01:46.000Z","version_change":"2.10.0 → 2.23.0","issue":{"uuid":"3737238625","node_id":"PR_kwDOE93bYM65SHyx","number":460,"state":"closed","title":"Bump google-cloud-datastore from 2.10.0 to 2.23.0","user":"dependabot[bot]","labels":["dependencies","Auto-Closed","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-02-23T13:46:58.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-17T04:01:46.000Z","updated_at":"2026-02-23T13:47:07.000Z","time_to_close":5910312,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"google-cloud-datastore","old_version":"2.10.0","new_version":"2.23.0","repository_url":"https://github.com/googleapis/python-datastore"}],"path":null,"ecosystem":"pip"},"body":"Bumps [google-cloud-datastore](https://github.com/googleapis/python-datastore) from 2.10.0 to 2.23.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.23.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c02328\"\u003e85c02328\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-cloud-datastore 2.22.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.21.0...v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/df729015\"\u003edf729015\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.20.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.22.0...v2.23.0\"\u003e2.23.0\u003c/a\u003e (2025-12-16)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esupport mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e85c023287daebb0d5c1a009e2beaccf0c6ea75eb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-datastore-v2.21.0...google-cloud-datastore-v2.22.0\"\u003e2.22.0\u003c/a\u003e (2025-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/601\"\u003e#601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/df729015149bd69e9d6dbced260d97c8eed77d4f\"\u003edf729015149bd69e9d6dbced260d97c8eed77d4f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\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/googleapis/python-datastore/commit/29459a4d6ea0c431c802cf86bd6931f10cb0bcd2\"\u003e\u003ccode\u003e29459a4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251216T133331Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/659\"\u003e#659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/92a1a33a67d56690562c91161d2f7306fc41b1ed\"\u003e\u003ccode\u003e92a1a33\u003c/code\u003e\u003c/a\u003e chore(docs): update docstrings for batches without context managers (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/578\"\u003e#578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/85c023287daebb0d5c1a009e2beaccf0c6ea75eb\"\u003e\u003ccode\u003e85c0232\u003c/code\u003e\u003c/a\u003e feat(gapic): support mTLS certificates when available (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/84f880b955ed7a0310d4c0be9911d41db2699bea\"\u003e\u003ccode\u003e84f880b\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251212T152033Z (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/66c1e47cd77bac48367578339c947402af8952bf\"\u003e\u003ccode\u003e66c1e47\u003c/code\u003e\u003c/a\u003e chore(tests): update kokoro continuous test config (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/117793c1914039b5b805bd1af888fc50140ba780\"\u003e\u003ccode\u003e117793c\u003c/code\u003e\u003c/a\u003e chore(librarian): onboard to librarian (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/2dc9afcf55d2cf1efb4933aa43b5267cb8b803c9\"\u003e\u003ccode\u003e2dc9afc\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/642\"\u003e#642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/f1eedbf857976560bb581961be8f8feced52b77d\"\u003e\u003ccode\u003ef1eedbf\u003c/code\u003e\u003c/a\u003e chore(python): Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/644\"\u003e#644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9dece547a86e114aea8821c8ac07fe7304529ee5\"\u003e\u003ccode\u003e9dece54\u003c/code\u003e\u003c/a\u003e chore: remove unused files (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/34f6b27db61c6414cca7bbc929767bbefd66ea55\"\u003e\u003ccode\u003e34f6b27\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.10.0...v2.23.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=google-cloud-datastore\u0026package-manager=pip\u0026previous-version=2.10.0\u0026new-version=2.23.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/MrBotDeveloper/PDF-Bot/pull/460","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrBotDeveloper%2FPDF-Bot/issues/460","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/460/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-12-05T08:13:24.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"3697921715","node_id":"PR_kwDODRkoPc63PaIn","number":1792,"state":"open","title":"Bump the production-dependencies group with 20 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":"2025-12-05T08:13:24.000Z","updated_at":"2025-12-19T12:30:53.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":20,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.76.0","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.4","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.42.3","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.14.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.1.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.6.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"6.4.0","new_version":"7.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.23","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.33.0","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"5.5.2","new_version":"6.2.2","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 20 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.76.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.4` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.42.3` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.14.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.1.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.6.0` |\n| [redis](https://github.com/redis/redis-py) | `6.4.0` | `7.1.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.23` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.33.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.20.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `5.5.2` | `6.2.2` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\nUpdates `flask` from 3.1.1 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.76.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.76.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.76.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egenuine\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePrioritize system CA over bundled CA. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40583\"\u003e#40583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[event_engine] Introduce a event_engine_poller_for_python experiment. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40243\"\u003e#40243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[metrics] add grpc.lb.backend_service label. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40486\"\u003e#40486\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[csharp tools] \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39374\"\u003e#39374\u003c/a\u003e Grpc.Tools can't process file Suffix name with Upper character. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40072\"\u003e#40072\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] gRPC AsyncIO: Improve CompletionQueue polling performance. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39993\"\u003e#39993\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.76.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.76.0 (genuine).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis prerelease contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eRelease v1.75.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.75.1 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRelease grpcio wheels with Python 3.14 support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40403\"\u003e#40403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAsyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40447\"\u003e#40447\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eThis also addresses previously reported issues with empty error message on Python interpreter exit (\u003ccode\u003eError in sys.excepthook:\u003c/code\u003e/\u003ccode\u003eOriginal exception was:\u003c/code\u003e empty): \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/36655\"\u003e#36655\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/38679\"\u003e#38679\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/33342\"\u003e#33342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePython 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40750\"\u003e#40750\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eNote: using async methods outside of a running event loop is \u003ca href=\"https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies\"\u003ediscouraged\u003c/a\u003e by Python, and \u003cstrong\u003ewill be deprecated in future gRPC releases\u003c/strong\u003e. Please use the \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run\"\u003easyncio.run()\u003c/a\u003e function (or \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner\"\u003easyncio.Runner\u003c/a\u003e for custom loop factories). For interactive mode, use dedicated \u003ca href=\"https://docs.python.org/3/library/asyncio.html#asyncio-cli\"\u003easyncio REPL\u003c/a\u003e: \u003ccode\u003epython -m asyncio\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f5ffb68d8a2fd603dff16287e90a4ac571e1fec6\"\u003e\u003ccode\u003ef5ffb68\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.76.0 (on v1.76.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40925\"\u003e#40925\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ffd83794b3804739c0789096155833e302ac1270\"\u003e\u003ccode\u003effd8379\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.76.0-pre1 (on v1.76.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40798\"\u003e#40798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/835d394034060002262ab4e404e552ac0393a1a1\"\u003e\u003ccode\u003e835d394\u003c/code\u003e\u003c/a\u003e [Release] Bump core version to 51.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40784\"\u003e#40784\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/de6ce7f32b1bf254d2b4c04e8872b63284632fd3\"\u003e\u003ccode\u003ede6ce7f\u003c/code\u003e\u003c/a\u003e [PH2] Add files for goaway support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40786\"\u003e#40786\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f7dd7f4b4186049d104aa2c88ad4432f58c19ede\"\u003e\u003ccode\u003ef7dd7f4\u003c/code\u003e\u003c/a\u003e [PH2][Trivial][CleanUp]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/2d40a376c7ea72602fa7bc62606324b1ff14c44f\"\u003e\u003ccode\u003e2d40a37\u003c/code\u003e\u003c/a\u003e [PH2][ChannelZ][ZTrace][Skeleton]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/83acb278bef565d8d46d6e19582eaacc86f737a3\"\u003e\u003ccode\u003e83acb27\u003c/code\u003e\u003c/a\u003e [build] Add Missing Dependencies for reflection_proto in Preparation for Enab...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/abfe8a29d31a8ab9ff6cdda11cdfa2813cb59632\"\u003e\u003ccode\u003eabfe8a2\u003c/code\u003e\u003c/a\u003e [PH2] Stream list represents streams open for reads.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c65d8de800aaa907b45cee54ebcd29d5b556d3ca\"\u003e\u003ccode\u003ec65d8de\u003c/code\u003e\u003c/a\u003e [PH2][Expt] Fix the experiment expiry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/755d025f16d20641155e89ecc46777e94e9e172d\"\u003e\u003ccode\u003e755d025\u003c/code\u003e\u003c/a\u003e Fix latent_see_test flakiness\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.76.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.4 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.4...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eLambdaTest\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e), and Jeff McCarrell (@\u003ca href=\"https://github.com/jmccarrell\"\u003ejmccarrell\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument. \u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\ncr.exception_formatter = structlog.dev.plain_traceback\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.4.0...25.5.0\"\u003e25.5.0\u003c/a\u003e - 2025-10-27\u003c/h2\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e's \u003cem\u003epad_event\u003c/em\u003e argument has been renamed to \u003cem\u003epad_event_to\u003c/em\u003e to differentiate it from the boolean \u003cem\u003epad_level\u003c/em\u003e argument.\n\u003cem\u003epad_event\u003c/em\u003e is now deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active()\u003c/code\u003e that returns the currently active \u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.ConsoleRenderer()\u003c/code\u003e now supports setting the \u003ccode\u003eexception_formatter\u003c/code\u003e attribute.\u003c/p\u003e\n\u003cp\u003eYou can now disable the pretty-printing of exceptions by setting it to \u003ccode\u003estructlog.dev.plain_traceback\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003ecr = structlog.dev.ConsoleRenderer.get_active()\ncr.exception_formatter = structlog.dev.plain_traceback\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSame goes for \u003cem\u003esort_keys\u003c/em\u003e, \u003cem\u003ecolumns\u003c/em\u003e, \u003cem\u003ecolors\u003c/em\u003e, \u003cem\u003eforce_colors\u003c/em\u003e, \u003cem\u003elevel_styles\u003c/em\u003e, \u003cem\u003epad_event_to\u003c/em\u003e, \u003cem\u003eevent_key\u003c/em\u003e, \u003cem\u003etimestamp_key\u003c/em\u003e, and \u003cem\u003erepr_native_str\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/749\"\u003e#749\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/756\"\u003e#756\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/757\"\u003e#757\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/759\"\u003e#759\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded \u003ccode\u003estructlog.dev.ConsoleRenderer.get_default_column_styles()\u003c/code\u003e for reuse the default column styles.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/741\"\u003e#741\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.testing.capture_logs()\u003c/code\u003e now optionally accepts \u003cem\u003eprocessors\u003c/em\u003e to apply before capture.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/728\"\u003e#728\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.dev.RichTracebackFormatter\u003c/code\u003e now exposes the upstream \u003cem\u003ecode_width\u003c/em\u003e parameter.\nDefault \u003cem\u003ewidth\u003c/em\u003e is now \u003ccode\u003eNone\u003c/code\u003e for full terminal width.\nFull terminal width is now handled by Rich itself, bringing support for reflow and \u003ccode\u003eCOLUMN\u003c/code\u003e environment variable.\nPassing \u003ccode\u003e-1\u003c/code\u003e for \u003cem\u003ewidth\u003c/em\u003e is now deprecated and automatically replaced by \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/717\"\u003e#717\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNative loggers now allow the passing of a dictionary for dictionary-based interpolation \u003ccode\u003elog.info(\u0026quot;hello %(name)s!\u0026quot;, {\u0026quot;name\u0026quot;: \u0026quot;world\u0026quot;})\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/748\"\u003e#748\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOn Python 3.11+, \u003ccode\u003estructlog.processors.CallsiteParameterAdder\u003c/code\u003e now supports \u003ccode\u003eCallsiteParameter.QUAL_NAME\u003c/code\u003e that adds the qualified name of the callsite, including scope and class names.\nThis is only available for \u003cem\u003estructlog\u003c/em\u003e-originated events since the standard library has no equivalent.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.stdlib.LoggerFactory\u003c/code\u003e now supports the \u003cem\u003estacklevel\u003c/em\u003e parameter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/763\"\u003e#763\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/hynek/structlog/commit/c0ef9e09e7a536cae65e33c1ac1c8b4e6a6f7511\"\u003e\u003ccode\u003ec0ef9e0\u003c/code\u003e\u003c/a\u003e Prepare 25.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/9cb662fe32046f92f08346c58089a2dcba7cb4bf\"\u003e\u003ccode\u003e9cb662f\u003c/code\u003e\u003c/a\u003e docs: nit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5400612735ad07bbe8ee9f2279f3040aa2e69ca4\"\u003e\u003ccode\u003e5400612\u003c/code\u003e\u003c/a\u003e docs/stdlib: add warning about ProcessorFormatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/1c2c19aa19c8f30330b76465b7a0d9993b9e8360\"\u003e\u003ccode\u003e1c2c19a\u003c/code\u003e\u003c/a\u003e Try validating pyproject.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/aca10f23dd12bd9e14cfe712f1ce66c9cb5f4400\"\u003e\u003ccode\u003eaca10f2\u003c/code\u003e\u003c/a\u003e Drop pretend dependency (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/3800d401db2c682c7c83b2d3eec38d81c9791f4d\"\u003e\u003ccode\u003e3800d40\u003c/code\u003e\u003c/a\u003e docs: use native\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ecaa15ac6b166ebca9f2b4f5cfdb4c4ec138a602\"\u003e\u003ccode\u003eecaa15a\u003c/code\u003e\u003c/a\u003e stdlib: add support for stacklevel (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/763\"\u003e#763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/7f7a221aed6bbff3c13cefd7effe14cc4f0cfc24\"\u003e\u003ccode\u003e7f7a221\u003c/code\u003e\u003c/a\u003e update dev (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5acfc85e3c3fa821dc65b55a226900d40dc0831c\"\u003e\u003ccode\u003e5acfc85\u003c/code\u003e\u003c/a\u003e docs: 5% bigger still\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/c102862e3f30de84c898c4501418dede15056c6d\"\u003e\u003ccode\u003ec102862\u003c/code\u003e\u003c/a\u003e docs: bigger font\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.42.3\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/347117552e90ab6fc8a3e6a459f0a00ec0ca0a48\"\u003e\u003ccode\u003e3471175\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.3'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2e3d1258ad9cb30f38d3c54b1b5e847b83a2d13b\"\u003e\u003ccode\u003e2e3d125\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/04ebd3cbea961c39ea1fea5edfd24442d299eb1d\"\u003e\u003ccode\u003e04ebd3c\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/cc95ab6caa73634e01a03c82f310d002a5f3e71d\"\u003e\u003ccode\u003ecc95ab6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.2'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/743b8e411a11015a0a0ee584cd0f3b947687a666\"\u003e\u003ccode\u003e743b8e4\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.2' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8f7ba800ea3e2c252b2d9ed4abd4f00309a79511\"\u003e\u003ccode\u003e8f7ba80\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/119aff9051ef423ee2fbf963bd6640d66c5ee86a\"\u003e\u003ccode\u003e119aff9\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/65b24a41d1a03edb6fcdbff65ca14a3b11bcd962\"\u003e\u003ccode\u003e65b24a4\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.1'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/71a06cf0c53ed1d6819e37669fb800949aee398e\"\u003e\u003ccode\u003e71a06cf\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.42.1' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5991e64f13b81bbc1b88c549bafc633708ecc17f\"\u003e\u003ccode\u003e5991e64\u003c/code\u003e\u003c/a\u003e Bumping version to 1.42.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.42.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Uzbek language (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/264\"\u003e#264\u003c/a\u003e) \u003ca href=\"https://github.com/sSimuSs\"\u003e\u003ccode\u003e@​sSimuSs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/268\"\u003e#268\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/fedf432b5bd7751b3417447b647e43aa2ac7507d\"\u003e\u003ccode\u003efedf432\u003c/code\u003e\u003c/a\u003e Add Uzbek language (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/264\"\u003e#264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bbc0398e8c1cf062d3fa4a79d1dc9f58aa26da26\"\u003e\u003ccode\u003ebbc0398\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/c8810e2d559e633cc48bc180d1bfe6364d04c169\"\u003e\u003ccode\u003ec8810e2\u003c/code\u003e\u003c/a\u003e Drop support for Python 3.9 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/268\"\u003e#268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/c16587b7ba97dcd763a79ccb88b9a01bfddbdfc3\"\u003e\u003ccode\u003ec16587b\u003c/code\u003e\u003c/a\u003e Update github-actions (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/267\"\u003e#267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/947a6b13f0e44eda81c10d8403d3c2ccab01a1b2\"\u003e\u003ccode\u003e947a6b1\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.18.2 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/266\"\u003e#266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/41903865abf4244c38b6340b0217611d9b86db1c\"\u003e\u003ccode\u003e4190386\u003c/code\u003e\u003c/a\u003e Update dependency mkdocstrings to v0.30.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/265\"\u003e#265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.1.0 (2025-11-01)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e__len__\u003c/code\u003e implementation to \u003ccode\u003emissing\u003c/code\u003e so that it can be used with\n\u003ccode\u003evalidate.Length \u0026lt;marshmallow.validate.Length\u0026gt;\u003c/code\u003e (:pr:\u003ccode\u003e2861\u003c/code\u003e).\nThanks :user:\u003ccode\u003eagentgodzilla\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 (:pr:\u003ccode\u003e2363\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eTest against Python 3.14.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/li\u003e\n\u003cli\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\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/marshmallow-code/marshmallow/commit/441213d310d1a6a2b47ef99c04ea9db65aee33ae\"\u003e\u003ccode\u003e441213d\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2b84b56e9a80d07b65d74811673e8e5cf46cd0f1\"\u003e\u003ccode\u003e2b84b56\u003c/code\u003e\u003c/a\u003e (fix) missing constant with len validation (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2861\"\u003e#2861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/fc8726244820b9f08fb7d02e007ed8d378a46c7b\"\u003e\u003ccode\u003efc87262\u003c/code\u003e\u003c/a\u003e Test against Python 3.14 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2864\"\u003e#2864\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2a5e2e1fd43ee0df6320edcbd2567e1dcc2da819\"\u003e\u003ccode\u003e2a5e2e1\u003c/code\u003e\u003c/a\u003e Update CHANGELOG\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/d861be73bc3c70e727ee729dbe7669d6a2d4c284\"\u003e\u003ccode\u003ed861be7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2863\"\u003e#2863\u003c/a\u003e from marshmallow-code/drop_python_39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/22288b64532252ef2929c109e0c2ce7f9afe5edd\"\u003e\u003ccode\u003e22288b6\u003c/code\u003e\u003c/a\u003e Fix ruff issues\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/1d8fd278b1a617bc4a01912f5660c4ab7374e662\"\u003e\u003ccode\u003e1d8fd27\u003c/code\u003e\u003c/a\u003e Drop Python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/966caf9ba106f70ca72974bbd9ee6d44d522ce7d\"\u003e\u003ccode\u003e966caf9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/feb22442d07a9f8e23920a7845da117b468c7868\"\u003e\u003ccode\u003efeb2244\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2857\"\u003e#2857\u003c/a\u003e from marshmallow-code/disable_RUF043\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/23ee36370f26f3144be395040cf7cdf6ffc86f37\"\u003e\u003ccode\u003e23ee363\u003c/code\u003e\u003c/a\u003e Disable RUF043 in tests: allow metacharacters in match patterns\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.6.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.5.0...v3.6.0\"\u003e3.6.0\u003c/a\u003e (2025-11-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for partial list buckets (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1606\"\u003e#1606\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/92fc2b00429415b9fbe7cba0167778eee60449e2\"\u003e92fc2b0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake return_partial_success and unreachable fields public for list Bucket (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1601\"\u003e#1601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/323cddd5d439e04e12614106eab1928fd4008c0b\"\u003e323cddd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1612\"\u003e#1612\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDont pass credentials to StorageClient (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1608\"\u003e#1608\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/195d644c4d4feec98e9a9cd9fad67fc774c50dc8\"\u003e195d644\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.1...v3.5.0\"\u003e3.5.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure that Python in FIPS mode can fetch MD5 implementation (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1522\"\u003e#1522\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/961536c7bf3652a824c207754317030526b9dd28\"\u003e961536c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProvide option to update \u003ccode\u003euser_agent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1596\"\u003e#1596\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/02f1451aaa8dacd10a862e97abb62ae48249b9b4\"\u003e02f1451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate credentials_file argument (\u003ca href=\"https://github.com/googleapis/python-storage/commit/74415a2a120e9bfa42f4f5fc8bd2f8e0d4cf5d18\"\u003e74415a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFlaky system tests for resumable_media (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1592\"\u003e#1592\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7fee3dd3390cfb5475a39d8f8272ea825dbda449\"\u003e7fee3dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse separate header object for each upload in Transfer Manager MPU (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1595\"\u003e#1595\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0d867bd4f405d2dbeca1edfc8072080c5a96c1cd\"\u003e0d867bd\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.4.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.0...v3.4.1\"\u003e3.4.1\u003c/a\u003e (2025-10-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixes \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1561\"\u003e#1561\u003c/a\u003e by adding an option to specify the entire object checksum for resumable uploads via the \u003ccode\u003eupload_from_string\u003c/code\u003e, \u003ccode\u003eupload_from_file\u003c/code\u003e, and \u003ccode\u003eupload_from_filename\u003c/code\u003e methods (\u003ca href=\"https://github.com/googleapis/python-storage/commit/acb918e20f7092e13d72fc63fe4ae2560bfecd40\"\u003eacb918e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.5.0...v3.6.0\"\u003e3.6.0\u003c/a\u003e (2025-11-17)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for partial list buckets (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1606\"\u003e#1606\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/92fc2b00429415b9fbe7cba0167778eee60449e2\"\u003e92fc2b0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake return_partial_success and unreachable fields public for list Bucket (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1601\"\u003e#1601\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/323cddd5d439e04e12614106eab1928fd4008c0b\"\u003e323cddd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezb-experimental:\u003c/strong\u003e Add async write object stream (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1612\"\u003e#1612\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e5ab8103\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDont pass credentials to StorageClient (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1608\"\u003e#1608\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/195d644c4d4feec98e9a9cd9fad67fc774c50dc8\"\u003e195d644\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.1...v3.5.0\"\u003e3.5.0\u003c/a\u003e (2025-11-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add base resumption strategy for bidi streams (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1594\"\u003e#1594\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5fb85ea544dcc9ed9dca65957c872c3811f02b87\"\u003e5fb85ea\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add checksum for bidi reads operation (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1566\"\u003e#1566\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/93ce515d60f0ac77ab83680ba2b4d6a9f57e75d0\"\u003e93ce515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1599\"\u003e#1599\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5d5e895e173075da557b58614fecc84086aaf9cb\"\u003e5d5e895\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Handle BidiReadObjectRedirectedError for bidi reads (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1600\"\u003e#1600\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/71b0f8a368a61bed9bd793a059f980562061223e\"\u003e71b0f8a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIndicate that md5 is used as a CRC (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1522\"\u003e#1522\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/961536c7bf3652a824c207754317030526b9dd28\"\u003e961536c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProvide option to update user_agent (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1596\"\u003e#1596\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/02f1451aaa8dacd10a862e97abb62ae48249b9b4\"\u003e02f1451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate credentials_file argument (\u003ca href=\"https://github.com/googleapis/python-storage/commit/74415a2a120e9bfa42f4f5fc8bd2f8e0d4cf5d18\"\u003e74415a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFlaky system tests for resumable_media (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1592\"\u003e#1592\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7fee3dd3390cfb5475a39d8f8272ea825dbda449\"\u003e7fee3dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003edownload_ranges\u003c/code\u003e compatible with \u003ccode\u003easyncio.create_task(..)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1591\"\u003e#1591\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/faf8b83b1f0ac378f8f6f47ce33dc23a866090c9\"\u003efaf8b83\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedact sensitive data from OTEL traces and fix env var parsing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1553\"\u003e#1553\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a38ca1977694def98f65ae7239e300a987bbd262\"\u003ea38ca19\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse separate header object for each upload in Transfer Manager MPU (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1595\"\u003e#1595\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/0d867bd4f405d2dbeca1edfc8072080c5a96c1cd\"\u003e0d867bd\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.4.0...v3.5.0\"\u003e3.4.1\u003c/a\u003e (2025-10-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixes \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1561\"\u003e#1561\u003c/a\u003e by adding an option to specify the entire object checksum for resumable uploads via the \u003ccode\u003eupload_from_string\u003c/code\u003e, \u003ccode\u003eupload_from_file\u003c/code\u003e, and \u003ccode\u003eupload_from_filename\u003c/code\u003e methods (\u003ca href=\"https://github.com/googleapis/python-storage/commit/acb918e20f7092e13d72fc63fe4ae2560bfecd40\"\u003eacb918e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\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/googleapis/python-storage/commit/0b70a288d238ef192952f5d9024395e17f74abcf\"\u003e\u003ccode\u003e0b70a28\u003c/code\u003e\u003c/a\u003e chore(main): release 3.6.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1603\"\u003e#1603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5ab81032268e875f82a66431d666fe61c9eb394b\"\u003e\u003ccode\u003e5ab8103\u003c/code\u003e\u003c/a\u003e feat(zb-experimental): add async write object stream (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1612\"\u003e#1612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/92fc2b00429415b9fbe7cba0167778eee60449e2\"\u003e\u003ccode\u003e92fc2b0\u003c/code\u003e\u003c/a\u003e feat: add support for partial list buckets (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1606\"\u003e#1606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/195d644c4d4feec98e9a9cd9fad67fc774c50dc8\"\u003e\u003ccode\u003e195d644\u003c/code\u003e\u003c/a\u003e fix: dont pass credentials to StorageClient (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1608\"\u003e#1608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/323cddd5d439e04e12614106eab1928fd4008c0b\"\u003e\u003ccode\u003e323cddd\u003c/code\u003e\u003c/a\u003e feat: make return_partial_success and unreachable fields public for list Buck...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c2cd474d96ce39016ae00c59672f3ad42490c764\"\u003e\u003ccode\u003ec2cd474\u003c/code\u003e\u003c/a\u003e chore(main): release 3.5.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1568\"\u003e#1568\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/71b0f8a368a61bed9bd793a059f980562061223e\"\u003e\u003ccode\u003e71b0f8a\u003c/code\u003e\u003c/a\u003e feat(experimental): Handle BidiReadObjectRedirectedError for bidi reads (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1600\"\u003e#1600\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5d5e895e173075da557b58614fecc84086aaf9cb\"\u003e\u003ccode\u003e5d5e895\u003c/code\u003e\u003c/a\u003e feat(experimental): Add read resumption strategy (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1599\"\u003e#1599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5fb85ea544dcc9ed9dca65957c872c3811f02b87\"\u003e\u003ccode\u003e5fb85ea\u003c/code\u003e\u003c/a\u003e feat(experimental): Add base resumption strategy for bidi streams (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1594\"\u003e#1594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/0d867bd4f405d2dbeca1edfc8072080c5a96c1cd\"\u003e\u003ccode\u003e0d867bd\u003c/code\u003e\u003c/a\u003e fix: Use separate header object for each upload in Transfer Manager MPU (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1595\"\u003e#1595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 6.4.0 to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdding MSETEX command support. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3823\"\u003e#3823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding CLAIM option to XREADGROUP command + unit tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3825\"\u003e#3825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eApply routing and response aggregation policies in OSS Cluster mode (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3834\"\u003e#3834\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support for CAS/CAD commands. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3837\"\u003e#3837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding support for HYBRID search. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3813\"\u003e#3813\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3843\"\u003e#3843\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🔥 Breaking changes (in experimental features)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace default health check and failure detector with custom (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3822\"\u003e#3822\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd **options to parse functions for sentinel (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3831\"\u003e#3831\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGenerating unique command cache key (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3765\"\u003e#3765\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdding Redis 8.4 RC1 image to test matrix. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3820\"\u003e#3820\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove Python 3.9 support. Add Python 3.14 support. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3814\"\u003e#3814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSync readme with 7.0.1 and update lib version to latest stable released version - 7.0.1 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3821\"\u003e#3821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.52.0 to 0.53.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3827\"\u003e#3827\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 5 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3828\"\u003e#3828\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump github/codeql-action from 3 to 4 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3829\"\u003e#3829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing flaky tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3833\"\u003e#3833\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3838\"\u003e#3838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate 8.4 RC image tag to 8.4-RC1-pre.2 for pipeline test matrix (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3832\"\u003e#3832\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing f-string when returning an error. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3841\"\u003e#3841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding latest 8.4 image to test matrix. Updating the Hybrid VSIM query format to be in sync with spec after srv issue was fixed. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3843\"\u003e#3843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand cluster READ_COMMANDS with additional read-only commands and reorganize the list of commands by category (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3845\"\u003e#3845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate Type Hints for List Command Parameters from str to KeyT (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3848\"\u003e#3848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanging log level to be debug for failed maintenance notification enablement when enabled='auto' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3851\"\u003e#3851\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded custom event handler section (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3853\"\u003e#3853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanging current version to 8.4 as it is already GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3854\"\u003e#3854\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/ShubhamKaudewar\"\u003e\u003ccode\u003e@​ShubhamKaudewar\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/matthewwiese\"\u003e\u003ccode\u003e@​matthewwiese\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/peperon\"\u003e\u003ccode\u003e@​peperon\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.0.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003eThis release adds small fixes related to documentation.\u003c/p\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd 'multi_database' section to documentation index (313d93f)\u003c/li\u003e\n\u003cli\u003eRevised multi-database client documentation(78df745)\u003c/li\u003e\n\u003cli\u003eAdding info about Multi-database client in README.md (3f7a55e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1792","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1792","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1792/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-10-03T07:15:07.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2884041236","node_id":"PR_kwDOLVQ5ac6r5voU","number":63,"state":"open","title":"Bump the production-dependencies group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-10-03T07:15:07.000Z","updated_at":"2025-10-03T07:15:08.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":20,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.1","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.44","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"5.5.2","new_version":"6.2.0","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.1` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.44` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `5.5.2` | `6.2.0` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.75.1 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRelease grpcio wheels with Python 3.14 support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40403\"\u003e#40403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAsyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40447\"\u003e#40447\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eThis also addresses previously reported issues with empty error message on Python interpreter exit (\u003ccode\u003eError in sys.excepthook:\u003c/code\u003e/\u003ccode\u003eOriginal exception was:\u003c/code\u003e empty): \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/36655\"\u003e#36655\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/38679\"\u003e#38679\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/33342\"\u003e#33342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePython 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40750\"\u003e#40750\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eNote: using async methods outside of a running event loop is \u003ca href=\"https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies\"\u003ediscouraged\u003c/a\u003e by Python, and \u003cstrong\u003ewill be deprecated in future gRPC releases\u003c/strong\u003e. Please use the \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run\"\u003easyncio.run()\u003c/a\u003e function (or \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner\"\u003easyncio.Runner\u003c/a\u003e for custom loop factories). For interactive mode, use dedicated \u003ca href=\"https://docs.python.org/3/library/asyncio.html#asyncio-cli\"\u003easyncio REPL\u003c/a\u003e: \u003ccode\u003epython -m asyncio\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\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/grpc/grpc/commit/9b63ce0d513672c5daad4f28342f03863c5589e5\"\u003e\u003ccode\u003e9b63ce0\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Fix] PHP macOS build: composer sha sum update, harden ins...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ab7404867bcb4d8515839ddf6ff7f2134b3d3ec\"\u003e\u003ccode\u003e3ab7404\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.75.1 (on v1.75.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40773\"\u003e#40773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/876e1d1c8bb8dca840fba61d7950ac2e2d459df7\"\u003e\u003ccode\u003e876e1d1\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Handle python3.14 get_event_loop behavior changes...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/74ec067e2839a4625a74b966880737a5085a13cc\"\u003e\u003ccode\u003e74ec067\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable 3.14 supported wheels (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40726\"\u003e#40726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ff24d38a8115dbf1ab95337a348cda878de18ecf\"\u003e\u003ccode\u003eff24d38\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] aio: skip grpc/aio shutdown if py interpreter is ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.44\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/61ee9341bc847c75124ff01a08755c6ff1abf597\"\u003e\u003ccode\u003e61ee934\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.44'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/01553e722faf66a82ff448776c331b5cdd07e31a\"\u003e\u003ccode\u003e01553e7\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.44\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1b47e9ef31b73857517c2fcd4a0a123771d3a6c7\"\u003e\u003ccode\u003e1b47e9e\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/a295071652c108ad61257dc2e91e73d3b286ca22\"\u003e\u003ccode\u003ea295071\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a349ff94059ca8564880cbc4cfdd7ef1a448ddd1\"\u003e\u003ccode\u003ea349ff9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/86bb6e1cf0aabd28a549ef1d7e3f79dfbea3fd86\"\u003e\u003ccode\u003e86bb6e1\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.43\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9f52c6fc22757c723fb03990e59783ca749a660c\"\u003e\u003ccode\u003e9f52c6f\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/fe09306b610f592d9e2e0b307a68ee065c5d78c0\"\u003e\u003ccode\u003efe09306\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3d3a44d119c3e1060c124b8f2022119b1bbb5b96\"\u003e\u003ccode\u003e3d3a44d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d433126ae2cb74c0fa6406cec76b93aaf406639d\"\u003e\u003ccode\u003ed433126\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.42\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.44\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a...\n\n_Description has been truncated_","html_url":"https://github.com/liamtoozer/liam-runner/pull/63","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/liamtoozer%2Fliam-runner/issues/63","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/63/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-10-03T07:12:55.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"3480059719","node_id":"PR_kwDODRkoPc6r5uKg","number":1760,"state":"open","title":"Bump the production-dependencies group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":9,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-10-03T07:12:55.000Z","updated_at":"2025-12-03T14:01:53.606Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":20,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.1","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.44","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"3.20.2","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"5.5.2","new_version":"6.2.0","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.1` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.44` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `3.20.2` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `5.5.2` | `6.2.0` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.1 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.75.1 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRelease grpcio wheels with Python 3.14 support (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40403\"\u003e#40403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAsyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40447\"\u003e#40447\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eThis also addresses previously reported issues with empty error message on Python interpreter exit (\u003ccode\u003eError in sys.excepthook:\u003c/code\u003e/\u003ccode\u003eOriginal exception was:\u003c/code\u003e empty): \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/36655\"\u003e#36655\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/38679\"\u003e#38679\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/33342\"\u003e#33342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePython 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40750\"\u003e#40750\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eNote: using async methods outside of a running event loop is \u003ca href=\"https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies\"\u003ediscouraged\u003c/a\u003e by Python, and \u003cstrong\u003ewill be deprecated in future gRPC releases\u003c/strong\u003e. Please use the \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run\"\u003easyncio.run()\u003c/a\u003e function (or \u003ca href=\"https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner\"\u003easyncio.Runner\u003c/a\u003e for custom loop factories). For interactive mode, use dedicated \u003ca href=\"https://docs.python.org/3/library/asyncio.html#asyncio-cli\"\u003easyncio REPL\u003c/a\u003e: \u003ccode\u003epython -m asyncio\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.75.0...v1.75.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\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/grpc/grpc/commit/9b63ce0d513672c5daad4f28342f03863c5589e5\"\u003e\u003ccode\u003e9b63ce0\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Fix] PHP macOS build: composer sha sum update, harden ins...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ab7404867bcb4d8515839ddf6ff7f2134b3d3ec\"\u003e\u003ccode\u003e3ab7404\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.75.1 (on v1.75.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40773\"\u003e#40773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/876e1d1c8bb8dca840fba61d7950ac2e2d459df7\"\u003e\u003ccode\u003e876e1d1\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Handle python3.14 get_event_loop behavior changes...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/74ec067e2839a4625a74b966880737a5085a13cc\"\u003e\u003ccode\u003e74ec067\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable 3.14 supported wheels (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40726\"\u003e#40726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ff24d38a8115dbf1ab95337a348cda878de18ecf\"\u003e\u003ccode\u003eff24d38\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] aio: skip grpc/aio shutdown if py interpreter is ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.44\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/61ee9341bc847c75124ff01a08755c6ff1abf597\"\u003e\u003ccode\u003e61ee934\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.44'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/01553e722faf66a82ff448776c331b5cdd07e31a\"\u003e\u003ccode\u003e01553e7\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.44\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1b47e9ef31b73857517c2fcd4a0a123771d3a6c7\"\u003e\u003ccode\u003e1b47e9e\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/a295071652c108ad61257dc2e91e73d3b286ca22\"\u003e\u003ccode\u003ea295071\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a349ff94059ca8564880cbc4cfdd7ef1a448ddd1\"\u003e\u003ccode\u003ea349ff9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.43' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/86bb6e1cf0aabd28a549ef1d7e3f79dfbea3fd86\"\u003e\u003ccode\u003e86bb6e1\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.43\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9f52c6fc22757c723fb03990e59783ca749a660c\"\u003e\u003ccode\u003e9f52c6f\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/fe09306b610f592d9e2e0b307a68ee065c5d78c0\"\u003e\u003ccode\u003efe09306\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3d3a44d119c3e1060c124b8f2022119b1bbb5b96\"\u003e\u003ccode\u003e3d3a44d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.42' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d433126ae2cb74c0fa6406cec76b93aaf406639d\"\u003e\u003ccode\u003ed433126\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.42\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.44\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a00141618572764821bbe6bd74e025536e061587\"\u003e\u003ccode\u003ea001416\u003c/code\u003e\u003c/a\u003e DOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/2b1ff5363715c8ba0043314a8b4bcbbc1ba741f5\"\u003e\u003ccode\u003e2b1ff53\u003c/code\u003e\u003c/a\u003e Fix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-compress` from 1.17 to 1.18\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/colour-science/flask-compress/blob/master/CHANGELOG.md\"\u003eflask-compress's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.18 (2025-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport, and test against, Python 3.14, see \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate from \u003ccode\u003ezstandard\u003c/code\u003e to \u003ccode\u003epyzstd\u003c/code\u003e, which is now included in the Python 3.14 standar...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1760","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1760","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1760/packages"}},{"old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","update_type":null,"path":"/sdks/python","pr_created_at":"2025-09-29T02:10:05.000Z","version_change":"\u003c2,\u003e=1.8.0 → \u003e=1.8.0,\u003c3","issue":{"uuid":"2868781869","node_id":"PR_kwDOEBdcl86q_iMt","number":540,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-09-29T02:10:05.000Z","updated_at":"2025-09-29T02:10:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/InigoSJ/beam/pull/540","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/InigoSJ%2Fbeam/issues/540","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/540/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-09-26T07:16:21.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2862830408","node_id":"PR_kwDOLVQ5ac6qo1NI","number":57,"state":"closed","title":"Bump the production-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-10-03T07:13:40.000Z","author_association":"NONE","state_reason":null,"created_at":"2025-09-26T07:16:21.000Z","updated_at":"2025-10-03T07:13:41.000Z","time_to_close":604639,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":17,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.0","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.39","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.39` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\u003c/li\u003e\n\u003cli\u003eReference on musllinux platform tags: \u003ca href=\"https://peps.python.org/pep-0656\"\u003ePEP 656\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egrpc.aio\u003c/code\u003e typehint fixes. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40215\"\u003e#40215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40217\"\u003e#40217\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eMetadata type validation: Fixed metadata handling to support all sequence types (not just tuples), preventing runtime errors. Enhanced metadata type validation: \u003ccode\u003eisinstance(metadata, Sequence)\u003c/code\u003e instead of \u003ccode\u003eisinstance(metadata, tuple)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSerializer parameters: Changed to \u003ccode\u003eOptional[SerializingFunction]\u003c/code\u003e for more accurate type representation\u003c/li\u003e\n\u003cli\u003eFixing the error in public API: \u003ccode\u003eClientCallDetails.method\u003c/code\u003e was declared as \u003ccode\u003estr\u003c/code\u003e but always called with \u003ccode\u003ebytes\u003c/code\u003e, see \u003ca href=\"https://github.com/grpc/grpc/blob/49bc1b1098f3772b40a46325250fe5c6f4df1eeb/src/python/grpcio/grpc/aio/_interceptor.py#L628\"\u003eInterceptedUnaryUnaryCall\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes issue \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40325\"\u003e#40325\u003c/a\u003e with grpcio failing to install on all non-Mac Apple devices internal builds. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40347\"\u003e#40347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRuby: Mark credential object in channel. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40394\"\u003e#40394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39549\"\u003e#39549\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.75.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.75.0 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8f360868932daaa226de0aaaab8f2d7f524d1ddc\"\u003e\u003ccode\u003e8f36086\u003c/code\u003e\u003c/a\u003e [Security] Cherry Pick Spiffe Verification (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5b393ee09ce97d9d328503ae8d96c65a42f9fff5\"\u003e\u003ccode\u003e5b393ee\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x to v1.75.0-pre1 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40485\"\u003e#40485\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e8715ed185a885d14472ad7c6cdc83d4161be029\"\u003e\u003ccode\u003ee8715ed\u003c/code\u003e\u003c/a\u003e Bump core version to 50.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40422\"\u003e#40422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/509f9fb6762b68505af3f854555ae86305be3c60\"\u003e\u003ccode\u003e509f9fb\u003c/code\u003e\u003c/a\u003e [PH2] WritePath Integration (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40404\"\u003e#40404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8a66132dc88c624ccba64883f2d643885dc0d08c\"\u003e\u003ccode\u003e8a66132\u003c/code\u003e\u003c/a\u003e [PH2][Settings] Adding documentation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.39\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/71cfc758534d5bb67f50ff42081fb4b37b3af69b\"\u003e\u003ccode\u003e71cfc75\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5653e58b19eb694241964b1dc5366ab115ee5eb6\"\u003e\u003ccode\u003e5653e58\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/eaaf3b06d41881163fae35faf7c778ac153339c5\"\u003e\u003ccode\u003eeaaf3b0\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/c106f68211653ac9acadfded00b209385ed58617\"\u003e\u003ccode\u003ec106f68\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9b063da5ebaba6a45d57ee3ba343a1a96e6342a8\"\u003e\u003ccode\u003e9b063da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/cc3dc1c839b0c1492b8b96f04694f4b6528a3871\"\u003e\u003ccode\u003ecc3dc1c\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.38\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/e9660687f514f4171dc82b0ae753c056bcb4d133\"\u003e\u003ccode\u003ee966068\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/55386c7fc3c750eea3d65c7276d4ec59c5960710\"\u003e\u003ccode\u003e55386c7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/49f560c17ae2cdb50929b9774f4b0a6447f503e1\"\u003e\u003ccode\u003e49f560c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8cd186db352f5802426165be29fa86b23fcd4ba7\"\u003e\u003ccode\u003e8cd186d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.37\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.39\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise ...\n\n_Description has been truncated_","html_url":"https://github.com/liamtoozer/liam-runner/pull/57","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/liamtoozer%2Fliam-runner/issues/57","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/57/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-09-26T07:13:03.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2862821582","node_id":"PR_kwDODRkoPc6qozDO","number":1751,"state":"closed","title":"Bump the production-dependencies group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-10-03T07:11:45.000Z","author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-09-26T07:13:03.000Z","updated_at":"2025-10-03T07:11:45.000Z","time_to_close":604722,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":17,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.75.0","repository_url":"https://github.com/grpc/grpc"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.39","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.4.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.9.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.75.0` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.39` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.4.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.9.1` |\n\n\nUpdates `flask` from 3.1.1 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.75.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.75.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.75.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egemini\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Security] Cherry Pick Spiffe Verification. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python][Typeguard] Part 3 - Add Typeguard to AIO stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40217\"\u003e#40217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[c-ares] update version to 1.34.5. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39508\"\u003e#39508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pick_first] fix bug that caused us to stop attempting to connect. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40162\"\u003e#40162\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++] Implement retry metrics. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39195\"\u003e#39195\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix data race by adding custom getter for \u003ccode\u003estate\u003c/code\u003e property with \u003ccode\u003e@synchronized\u003c/code\u003e locking. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40146\"\u003e#40146\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003egRPC Python (grpcio) now depends on \u003ccode\u003etyping-extensions~=4.13\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40137\"\u003e#40137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate musllinux wheels from \u003ccode\u003emusllinux_1_1\u003c/code\u003e to \u003ccode\u003emusllinux_1_2\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40317\"\u003e#40317\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eDropping \u003ccode\u003emusllinux_1_1\u003c/code\u003e because it reached EOL in November 2024\u003c/li\u003e\n\u003cli\u003eReference on musllinux platform tags: \u003ca href=\"https://peps.python.org/pep-0656\"\u003ePEP 656\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egrpc.aio\u003c/code\u003e typehint fixes. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40215\"\u003e#40215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40217\"\u003e#40217\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eMetadata type validation: Fixed metadata handling to support all sequence types (not just tuples), preventing runtime errors. Enhanced metadata type validation: \u003ccode\u003eisinstance(metadata, Sequence)\u003c/code\u003e instead of \u003ccode\u003eisinstance(metadata, tuple)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSerializer parameters: Changed to \u003ccode\u003eOptional[SerializingFunction]\u003c/code\u003e for more accurate type representation\u003c/li\u003e\n\u003cli\u003eFixing the error in public API: \u003ccode\u003eClientCallDetails.method\u003c/code\u003e was declared as \u003ccode\u003estr\u003c/code\u003e but always called with \u003ccode\u003ebytes\u003c/code\u003e, see \u003ca href=\"https://github.com/grpc/grpc/blob/49bc1b1098f3772b40a46325250fe5c6f4df1eeb/src/python/grpcio/grpc/aio/_interceptor.py#L628\"\u003eInterceptedUnaryUnaryCall\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixes issue \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40325\"\u003e#40325\u003c/a\u003e with grpcio failing to install on all non-Mac Apple devices internal builds. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40347\"\u003e#40347\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRuby: Mark credential object in channel. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40394\"\u003e#40394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39549\"\u003e#39549\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.75.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.75.0 (gemini).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/093085cc925e0d5aa6e92bc29e917f9bdc00add2\"\u003e\u003ccode\u003e093085c\u003c/code\u003e\u003c/a\u003e [build] Fix objc boringssl build backport (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40689\"\u003e#40689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8c4561390682661cc8cb374ec734bc1d742ad88f\"\u003e\u003ccode\u003e8c45613\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x branch to v1.75.0 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40644\"\u003e#40644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/d382f40fc0f6cb522cb81f2e9ac111621687c598\"\u003e\u003ccode\u003ed382f40\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python][Support 3.14] Enable Python 3.14 interpreters for...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e6db4753b460db05f69883ca73191587a4732976\"\u003e\u003ccode\u003ee6db475\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Build manylinux aarch64 without cross-compilation...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/77dc9c8c2595b2d4c031dfa58a4174ea33105908\"\u003e\u003ccode\u003e77dc9c8\u003c/code\u003e\u003c/a\u003e [Backport][v1.75.x][Python] Updating rules_python to 1.5.4 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40607\"\u003e#40607\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8f360868932daaa226de0aaaab8f2d7f524d1ddc\"\u003e\u003ccode\u003e8f36086\u003c/code\u003e\u003c/a\u003e [Security] Cherry Pick Spiffe Verification (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40515\"\u003e#40515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5b393ee09ce97d9d328503ae8d96c65a42f9fff5\"\u003e\u003ccode\u003e5b393ee\u003c/code\u003e\u003c/a\u003e [release] Bump release version on v1.75.x to v1.75.0-pre1 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40485\"\u003e#40485\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e8715ed185a885d14472ad7c6cdc83d4161be029\"\u003e\u003ccode\u003ee8715ed\u003c/code\u003e\u003c/a\u003e Bump core version to 50.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40422\"\u003e#40422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/509f9fb6762b68505af3f854555ae86305be3c60\"\u003e\u003ccode\u003e509f9fb\u003c/code\u003e\u003c/a\u003e [PH2] WritePath Integration (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40404\"\u003e#40404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/8a66132dc88c624ccba64883f2d643885dc0d08c\"\u003e\u003ccode\u003e8a66132\u003c/code\u003e\u003c/a\u003e [PH2][Settings] Adding documentation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.75.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 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\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\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\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.39\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/71cfc758534d5bb67f50ff42081fb4b37b3af69b\"\u003e\u003ccode\u003e71cfc75\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5653e58b19eb694241964b1dc5366ab115ee5eb6\"\u003e\u003ccode\u003e5653e58\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/eaaf3b06d41881163fae35faf7c778ac153339c5\"\u003e\u003ccode\u003eeaaf3b0\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/c106f68211653ac9acadfded00b209385ed58617\"\u003e\u003ccode\u003ec106f68\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9b063da5ebaba6a45d57ee3ba343a1a96e6342a8\"\u003e\u003ccode\u003e9b063da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.38' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/cc3dc1c839b0c1492b8b96f04694f4b6528a3871\"\u003e\u003ccode\u003ecc3dc1c\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.38\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/e9660687f514f4171dc82b0ae753c056bcb4d133\"\u003e\u003ccode\u003ee966068\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/55386c7fc3c750eea3d65c7276d4ec59c5960710\"\u003e\u003ccode\u003e55386c7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/49f560c17ae2cdb50929b9774f4b0a6447f503e1\"\u003e\u003ccode\u003e49f560c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.37' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8cd186db352f5802426165be29fa86b23fcd4ba7\"\u003e\u003ccode\u003e8cd186d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.37\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.39\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same.(\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.1...v3.4.0\"\u003e3.4.0\u003c/a\u003e (2025-09-15)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003eac57b8d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eexperimental:\u003c/strong\u003e Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e5674587\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003ec80d820\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.3.0...v3.3.1\"\u003e3.3.1\u003c/a\u003e (2025-08-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eProvide option to user to set entire object checksum at \u0026quot;initiate a resumable upload session\u0026quot; and send the same (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1525\"\u003e#1525\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a8109e0d02c62542f1bea20373b53864fb776caa\"\u003ea8109e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSend part's checksum for XML MPU part upload (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1529\"\u003e#1529\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2ad77c7d949e84c515c051a0fd4b37b822788dd8\"\u003e2ad77c7\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\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/googleapis/python-storage/commit/fd8e9119d81ea6b53e9af591d5d464c91b263c51\"\u003e\u003ccode\u003efd8e911\u003c/code\u003e\u003c/a\u003e chore(main): release 3.4.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1543\"\u003e#1543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/ac57b8d819a49aef0ed0cb5bb630bf11012f43e3\"\u003e\u003ccode\u003eac57b8d\u003c/code\u003e\u003c/a\u003e feat(experimental): add async grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1537\"\u003e#1537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5674587f2aa347ec2787f2bc1e847eaa294bc1ca\"\u003e\u003ccode\u003e5674587\u003c/code\u003e\u003c/a\u003e feat(experimental): Add grpc client (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1533\"\u003e#1533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/dc3756d00c75438a8e7097b2f9160dc47ca73e03\"\u003e\u003ccode\u003edc3756d\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.26.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1540\"\u003e#1540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c80d8207a8661b84c56cd66bb34de7b5704675b8\"\u003e\u003ccode\u003ec80d820\u003c/code\u003e\u003c/a\u003e fix: GAPIC generation failed with 'Directory not empty' (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1542\"\u003e#1542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/b4ce8dad8fc08be8d4c67fa3dc33c7867d7df822\"\u003e\u003ccode\u003eb4ce8da\u003c/code\u003e\u003c/a\u003e chore: add argparse to run samples as script (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1538\"\u003e#1538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/87f71961d6a498e8bf74c4f995b4c0f98190892d\"\u003e\u003ccode\u003e87f7196\u003c/code\u003e\u003c/a\u003e chore: update Python generator version to 1.25.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1535\"\u003e#1535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/67326df83ced2678987f98f1daa926c6849ab925\"\u003e\u003ccode\u003e67326df\u003c/code\u003e\u003c/a\u003e chore: fix the gapic unit tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1536\"\u003e#1536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/067e6b08f0d4022f2471656cee3375a09e006776\"\u003e\u003ccode\u003e067e6b0\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1532\"\u003e#1532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/04b01ed07d3541a74fbe7de1f4bff95ed62cd311\"\u003e\u003ccode\u003e04b01ed\u003c/code\u003e\u003c/a\u003e chore: make the gapic code private (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1519\"\u003e#1519\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a00141618572764821bbe6bd74e025536e061587\"\u003e\u003ccode\u003ea001416\u003c/code\u003e\u003c/a\u003e DOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/2b1ff5363715c8ba0043314a8b4bcbbc1ba741f5\"\u003e\u003ccode\u003e2b1ff53\u003c/code\u003e\u003c/a\u003e Fix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-compress` from 1.17 to 1.18\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/colour-science/flask-compress/blob/master/CHANGELOG.md\"\u003eflask-compress's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.18 (2025-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport, and test against, Python 3.14, see \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate from \u003ccode\u003ezstandard\u003c/code\u003e to \u003ccode\u003epyzstd\u003c/code\u003e, which is now included in the Python 3.14 standard library, also part of \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestore \u003ccode\u003eflask_compress.DictCache()\u003c/code\u003e that is needed to configure Flask-Compress with caching, without relying on \u003ca href=\"https://pypi.org/project/Flask-Caching/\"\u003eFlask-Caching\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/colour-science/flask-compress/commit/3dade9d81e350cc946151fc853d7cee6094623a4\"\u003e\u003ccode\u003e3dade9d\u003c/code\u003e\u003c/a\u003e Bump to v...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1751","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1751","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1751/packages"}},{"old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","update_type":null,"path":"/sdks/python","pr_created_at":"2025-09-22T22:05:20.000Z","version_change":"\u003c2,\u003e=1.8.0 → \u003e=1.8.0,\u003c3","issue":{"uuid":"2851263432","node_id":"PR_kwDOGxIu7M6p8tPI","number":441,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-09-22T22:05:20.000Z","updated_at":"2025-09-22T22:05:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/Snowflake-Labs/beam/pull/441","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fbeam/issues/441","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/441/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-08-29T07:11:15.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2783895383","node_id":"PR_kwDODRkoPc6l7t9X","number":1736,"state":"open","title":"Bump the production-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-08-29T07:11:15.000Z","updated_at":"2025-08-29T07:11:16.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":16,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.2","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.74.0","repository_url":"https://github.com/grpc/grpc"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.5","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.40.20","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.13.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.1","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.3.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.1","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.8.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.2` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.74.0` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.5` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.40.20` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.13.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.1` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.3.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.1` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.8.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/2c1b30d0503cfb064f1cb252e6614a06915a362a\"\u003e\u003ccode\u003e2c1b30d\u003c/code\u003e\u003c/a\u003e release version 3.1.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/1292419ddfc6a14fc7f85b5ed7efcc2d215f1ad3\"\u003e\u003ccode\u003e1292419\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5795\"\u003e#5795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4dd52ca9c768c9b6d04180f0547d6f4b6e34f211\"\u003e\u003ccode\u003e4dd52ca\u003c/code\u003e\u003c/a\u003e Update GitHub Actions workflow for artifact handling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/55c62556571ee46a94da174643b50ece06edead4\"\u003e\u003ccode\u003e55c6255\u003c/code\u003e\u003c/a\u003e update dev dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/d8259eb11900285af9b80b0fa47f841174c054e3\"\u003e\u003ccode\u003ed8259eb\u003c/code\u003e\u003c/a\u003e use Jinja name consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/38b4c1e19b50494cfcdc9332899e09b7fed34979\"\u003e\u003ccode\u003e38b4c1e\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5799\"\u003e#5799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/9822a0351574790cb66c652fcc396ad7aa2b09d8\"\u003e\u003ccode\u003e9822a03\u003c/code\u003e\u003c/a\u003e refactor stream_with_context for async views\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/49b7e7bc8fb69d605719991d1c0a99fcee689053\"\u003e\u003ccode\u003e49b7e7b\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5798\"\u003e#5798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/b228ca3d87745b746d904a2108429617a814ffda\"\u003e\u003ccode\u003eb228ca3\u003c/code\u003e\u003c/a\u003e security docs for TRUSTED_HOSTS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ff64079a516c269f171ababf3d92b86886a62ffd\"\u003e\u003ccode\u003eff64079\u003c/code\u003e\u003c/a\u003e update flask-talisman link\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.74.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.74.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.74.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egee\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++, Posix EE] Plumb TCP write timestamps and metrics to OTel tracers. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39946\"\u003e#39946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix Python reconnect issues: use iomgr backup poller when EE is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39894\"\u003e#39894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade Pytype (Part - 1). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39816\"\u003e#39816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade black. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39774\"\u003e#39774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[event_engine] Implement fork support in Posix Event Engine. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/38980\"\u003e#38980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[http2] Fix GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES for when BDP is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39585\"\u003e#39585\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[dep] Upgrade Protobuf Version 31.1. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39916\"\u003e#39916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Fully qualify stdClass with global namespace. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39996\"\u003e#39996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[php] Fix PHPDoc so that UnaryCall defines the proper return type. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/37563\"\u003e#37563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix typing of nullable parameters. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39199\"\u003e#39199\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gRPC Python docs website layout - use spaces optimally. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40073\"\u003e#40073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] enable EE fork support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39786\"\u003e#39786\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Return nil for c functions expected to return a VALUE. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39214\"\u003e#39214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] remove connectivity state watch thread, fix cancellations from spurious signals. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39409\"\u003e#39409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Drop Ruby 3.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39607\"\u003e#39607\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.74.0-pre2\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.74.0 (gee).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3e7a4d52d257990fa5b9d80f69f4a591178d9d7c\"\u003e\u003ccode\u003e3e7a4d5\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40290\"\u003e#40290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/b2d32db3e1a6221c22d4a008930e1e54e45f1930\"\u003e\u003ccode\u003eb2d32db\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][Python] Fix for windows distribtest (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40241\"\u003e#40241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a7d80a7e90729849b052c7f36456514dcd1d6752\"\u003e\u003ccode\u003ea7d80a7\u003c/code\u003e\u003c/a\u003e [ruby] bump timeout for ruby artifact build on 1.74.x branch (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40230\"\u003e#40230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/2a6bf865d7000fa5e415a9e5685b2fd612b9ccc7\"\u003e\u003ccode\u003e2a6bf86\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre2 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40216\"\u003e#40216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c8dcda63a8c1f91224c75e4311f847db5f42745a\"\u003e\u003ccode\u003ec8dcda6\u003c/code\u003e\u003c/a\u003e [Backport-to-1.74.x] Added missing useful to cf_event_engine (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40210\"\u003e#40210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/1c64908e6b68ea0dabf62ca6d3af8a8958e6c970\"\u003e\u003ccode\u003e1c64908\u003c/code\u003e\u003c/a\u003e [Ruby] Add rubygems support for linux-gnu and linux-musl platforms  (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/08648d377dfd8ada795a7ad8068b48dcb24bd328\"\u003e\u003ccode\u003e08648d3\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][event_engine] Fix race conditions in the timer manager sh...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5d59f8e8517bb6a5f2865be63a06b2976b105f54\"\u003e\u003ccode\u003e5d59f8e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre1 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40121\"\u003e#40121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5e6f934e0d297a241f0d7aa9e5170acf97880de7\"\u003e\u003ccode\u003e5e6f934\u003c/code\u003e\u003c/a\u003e [v1.74.x] Bump core version to 49.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40101\"\u003e#40101\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40119\"\u003e#40119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a4650ee8eb90f81753351ea6c7530142a164d0e0\"\u003e\u003ccode\u003ea4650ee\u003c/code\u003e\u003c/a\u003e [CI] Updated grpc_interop_aspnetcore docker (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40088\"\u003e#40088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.74.0\"\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.3 to 2.32.5\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.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/b25c87d7cb8d6a18a37fa12442b5f883f9e41741\"\u003e\u003ccode\u003eb25c87d\u003c/code\u003e\u003c/a\u003e v2.32.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/131e506079d97606e4214cc4d87b780ac478de7a\"\u003e\u003ccode\u003e131e506\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/7010\"\u003e#7010\u003c/a\u003e from psf/dependabot/github_actions/actions/checkout-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b336cb2bc616a63a93c6470c558fc1f576b77f90\"\u003e\u003ccode\u003eb336cb2\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.2.0 to 5.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/46e939b5525d9c72b677340985582b04b128478a\"\u003e\u003ccode\u003e46e939b\u003c/code\u003e\u003c/a\u003e Update publish workflow to use \u003ccode\u003eartifact-id\u003c/code\u003e instead of \u003ccode\u003ename\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/4b9c546aa3f35fca6ca24945376fe7462bb007c4\"\u003e\u003ccode\u003e4b9c546\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6999\"\u003e#6999\u003c/a\u003e from psf/dependabot/github_actions/step-security/har...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7618dbef01d333f23ba4b9c4d97397b06dd89cb6\"\u003e\u003ccode\u003e7618dbe\u003c/code\u003e\u003c/a\u003e Bump step-security/harden-runner from 2.12.0 to 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2edca11103c1c27dd8b572dab544b7f48cf3b446\"\u003e\u003ccode\u003e2edca11\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop support for Python 3.8 (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6993\"\u003e#6993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/fec96cd5976ad763e45bac9a033d62cca1877a00\"\u003e\u003ccode\u003efec96cd\u003c/code\u003e\u003c/a\u003e Update Makefile rules (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6996\"\u003e#6996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d58d8aa2f45c3575268d6d5250745ef69f9cf8b7\"\u003e\u003ccode\u003ed58d8aa\u003c/code\u003e\u003c/a\u003e docs: clarify timeout parameter uses seconds in Session.request (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6994\"\u003e#6994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/91a3eabd3dcc4d7f36dd8249e4777a90ef9b4305\"\u003e\u003ccode\u003e91a3eab\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.28.5 to 3.29.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.40.20\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3e12c82a6cf343d9e74f2eef5fa9adfa94f4c9f7\"\u003e\u003ccode\u003e3e12c82\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.20'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8b5d5cefa44332cd5f26a42f94b9b1e6e1435e2d\"\u003e\u003ccode\u003e8b5d5ce\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5be943b4c2a5ecda1cc63b14affd7d0b5513939e\"\u003e\u003ccode\u003e5be943b\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/24382884bbe19a1fad8e6171c911b7a599f30ceb\"\u003e\u003ccode\u003e2438288\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.19'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7630391e6bc5440642db1df1e2ed3851f7bbef8f\"\u003e\u003ccode\u003e7630391\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.19' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/29c8360272145e7ba17a93000e56174d4bd96f47\"\u003e\u003ccode\u003e29c8360\u003c/code\u003e\u003c/a\u003e Bumping version to 1.40.19\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b4cb5b0a8dd305faa8e51c79d80a9c71cdb612e7\"\u003e\u003ccode\u003eb4cb5b0\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/551522b42ba9f7dea2d627e0b10c8880cf9f862a\"\u003e\u003ccode\u003e551522b\u003c/code\u003e\u003c/a\u003e Remove opsworks and opsworkscm\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/4515c41a91a00e16d027853436bbe0d144c6f4d5\"\u003e\u003ccode\u003e4515c41\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.18'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/8c13d992f3437b4186c16ea979d0044b8bd03925\"\u003e\u003ccode\u003e8c13d99\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.40.18' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.40.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOptimise \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e) \u003ca href=\"https://github.com/Zaczero\"\u003e\u003ccode\u003e@​Zaczero\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eprecisedelta\u003c/code\u003e rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e) \u003ca href=\"https://github.com/dangillet\"\u003e\u003ccode\u003e@​dangillet\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/0e027051034b7dcb4eb65aded290cf56a89d8aa9\"\u003e\u003ccode\u003e0e02705\u003c/code\u003e\u003c/a\u003e Update config (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/262\"\u003e#262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/288a7a7c1dbfd1c977add3c54a7c9283039a6c71\"\u003e\u003ccode\u003e288a7a7\u003c/code\u003e\u003c/a\u003e Test free-threaded Python 3.13t and 3.14t (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/0f5d2948d674a88a611f8e341c0df520767b1b80\"\u003e\u003ccode\u003e0f5d294\u003c/code\u003e\u003c/a\u003e Precisedelta rounding (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/58d10b43175a22eb9ece2c6f3dcff6b6b681e2df\"\u003e\u003ccode\u003e58d10b4\u003c/code\u003e\u003c/a\u003e Update docs/requirements.txt (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/260\"\u003e#260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/18105e31d4909452207eecb8864f345b134b0d61\"\u003e\u003ccode\u003e18105e3\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.17.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/122726447c64fb197410f496e5715f9b016c541f\"\u003e\u003ccode\u003e1227264\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/3f29964b23a278f5cef8b72a1d7ede8ea0a28ae1\"\u003e\u003ccode\u003e3f29964\u003c/code\u003e\u003c/a\u003e Update dependency pymdown-extensions to v10.16 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/96ff3a7310ef9a99592b2078cfc1b5cd012be69a\"\u003e\u003ccode\u003e96ff3a7\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/cf0e75b2e548129edfb9cb86f2da77b8bd502abe\"\u003e\u003ccode\u003ecf0e75b\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v1.16.0 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/bb99238e6f31917f177d5922ab8e62f33d1cc36f\"\u003e\u003ccode\u003ebb99238\u003c/code\u003e\u003c/a\u003e Optimize \u003ccode\u003enaturalsize\u003c/code\u003e algorithm by using \u003ccode\u003emath.log\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.1 (2025-08-28)\n++++++++++++++++++\u003c/p\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix wildcard import of \u003ccode\u003efrom marshmallow import *\u003c/code\u003e (:pr:\u003ccode\u003e2823\u003c/code\u003e).\nThanks :user:\u003ccode\u003eFlorian-Laport\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\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/marshmallow-code/marshmallow/commit/757714b12f8d6470804191a63e91863cd1cd25c3\"\u003e\u003ccode\u003e757714b\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/407c2c5775992f7b8b33c4d1af0adcff3798f478\"\u003e\u003ccode\u003e407c2c5\u003c/code\u003e\u003c/a\u003e Remove incorrect documentaion of field_name param (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8c83dd68d869f6fbab99f33b8e497248f6a0857d\"\u003e\u003ccode\u003e8c83dd6\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.11.0 to 0.12.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/24225a39b19734db8d6643bdb62fb9fc46b5fcf0\"\u003e\u003ccode\u003e24225a3\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.10.0 to 0.11.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/172f40f5de083e8c8360e240319f405bbc38e8a9\"\u003e\u003ccode\u003e172f40f\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b84d50be1a757258469a4b58aa30d49a292ad348\"\u003e\u003ccode\u003eb84d50b\u003c/code\u003e\u003c/a\u003e Add edit button to docs (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2841\"\u003e#2841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7008262f85fe43e51972a8444c112fda77a95eaa\"\u003e\u003ccode\u003e7008262\u003c/code\u003e\u003c/a\u003e Bump furo from 2024.8.6 to 2025.7.19 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2837\"\u003e#2837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2feeda7b2204b970cb829046114504845bf4dddd\"\u003e\u003ccode\u003e2feeda7\u003c/code\u003e\u003c/a\u003e docs: fix tuple spelling mistake (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2838\"\u003e#2838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0c1dd99d9f97957f6ed665331c7c755ac80ded59\"\u003e\u003ccode\u003e0c1dd99\u003c/code\u003e\u003c/a\u003e Update pre-commit deps (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2840\"\u003e#2840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/7266de0c42e26c521801b7c01417d1f738e8a314\"\u003e\u003ccode\u003e7266de0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.3.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.2.0...v3.3.0\"\u003e3.3.0\u003c/a\u003e (2025-08-05)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003ea29073c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e6a9923e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e72252e9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/commit/e84906c2252e98c2906d5d0e0da2249deb0c134a\"\u003e\u003ccode\u003ee84906c\u003c/code\u003e\u003c/a\u003e chore(main): release 3.3.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1508\"\u003e#1508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/a29073cf58df9c5667305e05c6378284057cda23\"\u003e\u003ccode\u003ea29073c\u003c/code\u003e\u003c/a\u003e feat: add support for bucket IP filter (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1516\"\u003e#1516\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/6a9923e4fc944f7a7c3906eb7800d23677bd2481\"\u003e\u003ccode\u003e6a9923e\u003c/code\u003e\u003c/a\u003e Fix: Add logs on AssertionError for issue \u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1512\"\u003e#1512\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1518\"\u003e#1518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/083a505e1f43c20657570c74ec707485f4b3989d\"\u003e\u003ccode\u003e083a505\u003c/code\u003e\u003c/a\u003e chore: improve docs for list_files_with_prefix (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1517\"\u003e#1517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/61bd57509ab3966f4382656200f2600ce41cce24\"\u003e\u003ccode\u003e61bd575\u003c/code\u003e\u003c/a\u003e chore: remove duplicates in coveragerc (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1511\"\u003e#1511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5964009c0efae9c84a9433715d74befca7ddf98d\"\u003e\u003ccode\u003e5964009\u003c/code\u003e\u003c/a\u003e chore: exclude autogenerated .coveragerc (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1510\"\u003e#1510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/0eb45b5a808ad149c1c85d1ab9ea693d7365d5c1\"\u003e\u003ccode\u003e0eb45b5\u003c/code\u003e\u003c/a\u003e feat: Add new field \u003ccode\u003econtexts\u003c/code\u003e for Object Contexts in message \u003ccode\u003eObject\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1502\"\u003e#1502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/edde9506af9c313036573e4e51d7b94d03c3118f\"\u003e\u003ccode\u003eedde950\u003c/code\u003e\u003c/a\u003e samples: add samples for move api to rename an object (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1505\"\u003e#1505\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/500c0d07d3a239c3b52c9aa6ce434f5bb3202823\"\u003e\u003ccode\u003e500c0d0\u003c/code\u003e\u003c/a\u003e chore: fix the errors for GAPIC (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1509\"\u003e#1509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/72252e940909ce2e3da9cfd80f5b7b43a026f45c\"\u003e\u003ccode\u003e72252e9\u003c/code\u003e\u003c/a\u003e docs: update the documentation of move_blob function (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1507\"\u003e#1507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.4.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/htemelski-redis\"\u003e\u003ccode\u003e@​htemelski-redis\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport new VAMANA vector index type (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3702\"\u003e#3702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3191\"\u003e#3191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAnnotate deprecated_args decorator to preserve wrapped function type signature (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3701\"\u003e#3701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd async Retry \u003cstrong\u003eeq\u003c/strong\u003e and \u003cstrong\u003ehash\u003c/strong\u003e \u0026amp; fix ExponentialWithJitterBackoff \u003cstrong\u003eeq\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3668\"\u003e#3668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3560\"\u003e#3560\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3601\"\u003e#3601\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: avoid instantiating a connection on \u003cem\u003erepr\u003c/em\u003e_ (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3653\"\u003e#3653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing the return type hint for the transaction method in the standalone client. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping integration tests with Redis 6.2 from pipeline actions. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3659\"\u003e#3659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated arg from call to ClusterPipeline (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3670\"\u003e#3670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTransactionStrategy reset: UNWATCH only when status is watching (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3671\"\u003e#3671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eKeyT for set operations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3190\"\u003e#3190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving references to old docs site '\u003ca href=\"https://redis-py.readthedocs.io/\"\u003ehttps://redis-py.readthedocs.io/\u003c/a\u003e' replaced by '\u003ca href=\"https://redis.readthedocs.io/\"\u003ehttps://redis.readthedocs.io/\u003c/a\u003e' (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3674\"\u003e#3674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoving unnecessary check for tests using AsyncMock (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3432\"\u003e#3432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating test images for github pipeline execution (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3678\"\u003e#3678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating the latest Redis image for pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3689\"\u003e#3689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5225 testable probabilistic dt examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3691\"\u003e#3691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConvert the value to int type only if it exists in CLIENT INFO (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3688\"\u003e#3688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with latest pytest-asyncio version(1.1.0) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3710\"\u003e#3710\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/redis/redis-py/commit/fff669daaf43ae8092ea8ab7a2a3196a9b1b7e41\"\u003e\u003ccode\u003efff669d\u003c/code\u003e\u003c/a\u003e Updated package version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43ce2a4025c020bd26e401371c16ca4920b470a5\"\u003e\u003ccode\u003e43ce2a4\u003c/code\u003e\u003c/a\u003e Updating the latest Redis image for github pipeline testing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3726\"\u003e#3726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/64426cbdd43153b70b0e29d9d7b3ab2c63760359\"\u003e\u003ccode\u003e64426cb\u003c/code\u003e\u003c/a\u003e Added epsilon property to the vsim command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3723\"\u003e#3723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/67ab74d705b4c1d00d600c500596af7a68abfd56\"\u003e\u003ccode\u003e67ab74d\u003c/code\u003e\u003c/a\u003e Add new stream commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4c9512b1fe592dc9becebe9e5f053b0184b47f2c\"\u003e\u003ccode\u003e4c9512b\u003c/code\u003e\u003c/a\u003e Adding information in connection pool class doc string for available SSLConne...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/31399ed43588840bbbfdbbf0e8260d1b989b49ce\"\u003e\u003ccode\u003e31399ed\u003c/code\u003e\u003c/a\u003e SentinelManagedConnection searches for new master upon connection failure (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7291deb5eb8054a0dc915a8bf499a17498bc5968\"\u003e\u003ccode\u003e7291deb\u003c/code\u003e\u003c/a\u003e add async Retry \u003ccode\u003e__eq__\u003c/code\u003e and \u003ccode\u003e__hash__\u003c/code\u003e \u0026amp; fix ExponentialWithJitterBackof...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/4cf094fdd2c1f2ce335e671af3fad7ad0a48f309\"\u003e\u003ccode\u003e4cf094f\u003c/code\u003e\u003c/a\u003e Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3698\"\u003e#3698\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a00141618572764821bbe6bd74e025536e061587\"\u003e\u003ccode\u003ea001416\u003c/code\u003e\u003c/a\u003e DOC-5424 time series examples (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3705\"\u003e#3705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/red...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/eq-questionnaire-runner/pull/1736","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1736","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1736/packages"}},{"old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","update_type":null,"path":"/sdks/python","pr_created_at":"2025-08-18T18:06:15.000Z","version_change":"\u003c2,\u003e=1.8.0 → \u003e=1.8.0,\u003c3","issue":{"uuid":"2754099943","node_id":"PR_kwDOG62OMs6kKDrn","number":615,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-08-18T18:06:15.000Z","updated_at":"2025-08-18T18:06:15.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/t-indumathy/beam/pull/615","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/t-indumathy%2Fbeam/issues/615","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/615/packages"}},{"old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","update_type":null,"path":"/sdks/python","pr_created_at":"2025-08-11T23:20:18.000Z","version_change":"\u003c2,\u003e=1.8.0 → \u003e=1.8.0,\u003c3","issue":{"uuid":"2737151112","node_id":"PR_kwDOFMWvRs6jJZyI","number":688,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-08-11T23:20:18.000Z","updated_at":"2025-08-11T23:20:18.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/vachan-shetty/beam/pull/688","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/vachan-shetty%2Fbeam/issues/688","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/688/packages"}},{"old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","update_type":null,"path":"/sdks/python","pr_created_at":"2025-08-04T14:12:12.000Z","version_change":"\u003c2,\u003e=1.8.0 → \u003e=1.8.0,\u003c3","issue":{"uuid":"2718138801","node_id":"PR_kwDOFKq8Q86iA4Gx","number":485,"state":"open","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-08-04T14:12:12.000Z","updated_at":"2025-08-04T14:12:13.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/dingn1/beam/pull/485","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingn1%2Fbeam/issues/485","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/485/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-07-28T15:56:48.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2701295677","node_id":"PR_kwDOLVQ5ac6hAoA9","number":44,"state":"open","title":"Bump the production-dependencies group with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":null,"author_association":"NONE","state_reason":null,"created_at":"2025-07-28T15:56:48.000Z","updated_at":"2025-07-28T15:56:49.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":15,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.1","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.74.0","repository_url":"https://github.com/grpc/grpc"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.4","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.39.14","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.12.3","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.2.0","repository_url":"https://github.com/googleapis/python-storage"},{"name":"redis","old_version":"5.2.1","new_version":"6.2.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.18","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.31.0","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.5.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 15 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.1` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.74.0` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.4` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.39.14` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.12.3` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.2.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.2.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.18` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.31.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.5.1` |\n\nUpdates `flask` from 3.1.0 to 3.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/7fff56f5172c48b6f3aedf17ee14ef5c2533dfd1\"\u003e\u003ccode\u003e7fff56f\u003c/code\u003e\u003c/a\u003e release version 3.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73d6504063bfa00666a92b07a28aaf906c532f09\"\u003e\u003ccode\u003e73d6504\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/cbb6c36692f7d882e9026597624c0eb38e01f9cb\"\u003e\u003ccode\u003ecbb6c36\u003c/code\u003e\u003c/a\u003e update docs about fallback order\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fb54159861708558b5f5658ebdc14709d984361c\"\u003e\u003ccode\u003efb54159\u003c/code\u003e\u003c/a\u003e secret key rotation: fix key list ordering\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/941efd4a36ed0f27e13758874f95e3aa1d3ee163\"\u003e\u003ccode\u003e941efd4\u003c/code\u003e\u003c/a\u003e use uv (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5727\"\u003e#5727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/0109e496f6ca68de29480fe6413e81b1d3f86aa9\"\u003e\u003ccode\u003e0109e49\u003c/code\u003e\u003c/a\u003e use uv\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/e7851665071cb93b3c70b1e7103f82d1e6d01f5d\"\u003e\u003ccode\u003ee785166\u003c/code\u003e\u003c/a\u003e Async Iterable Response (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/410e5ab7ed0ef326fa8b5164a633863f137ffff5\"\u003e\u003ccode\u003e410e5ab\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003eAsyncIterable\u003c/code\u003e for responses\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/bfffe87d4c2ea255b9a51432bebb3d28741245c4\"\u003e\u003ccode\u003ebfffe87\u003c/code\u003e\u003c/a\u003e add ghsa links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73ce26c3e822cdc2ccf99625619a50c91f163f8d\"\u003e\u003ccode\u003e73ce26c\u003c/code\u003e\u003c/a\u003e remove tests about deprecated pkgutil.get_loader (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5702\"\u003e#5702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.74.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.74.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.74.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egee\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OTel C++, Posix EE] Plumb TCP write timestamps and metrics to OTel tracers. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39946\"\u003e#39946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix Python reconnect issues: use iomgr backup poller when EE is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39894\"\u003e#39894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade Pytype (Part - 1). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39816\"\u003e#39816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Upgrade black. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39774\"\u003e#39774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[event_engine] Implement fork support in Posix Event Engine. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/38980\"\u003e#38980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[http2] Fix GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES for when BDP is disabled. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39585\"\u003e#39585\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[dep] Upgrade Protobuf Version 31.1. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39916\"\u003e#39916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Fully qualify stdClass with global namespace. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39996\"\u003e#39996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[php] Fix PHPDoc so that UnaryCall defines the proper return type. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/37563\"\u003e#37563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix typing of nullable parameters. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39199\"\u003e#39199\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix gRPC Python docs website layout - use spaces optimally. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40073\"\u003e#40073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] Add rubygems support for linux-gnu and linux-musl platforms . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] enable EE fork support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39786\"\u003e#39786\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Return nil for c functions expected to return a VALUE. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39214\"\u003e#39214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] remove connectivity state watch thread, fix cancellations from spurious signals. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39409\"\u003e#39409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ruby] Drop Ruby 3.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39607\"\u003e#39607\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.74.0-pre2\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.74.0 (gee).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3e7a4d52d257990fa5b9d80f69f4a591178d9d7c\"\u003e\u003ccode\u003e3e7a4d5\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40290\"\u003e#40290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/b2d32db3e1a6221c22d4a008930e1e54e45f1930\"\u003e\u003ccode\u003eb2d32db\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][Python] Fix for windows distribtest (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40241\"\u003e#40241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a7d80a7e90729849b052c7f36456514dcd1d6752\"\u003e\u003ccode\u003ea7d80a7\u003c/code\u003e\u003c/a\u003e [ruby] bump timeout for ruby artifact build on 1.74.x branch (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40230\"\u003e#40230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/2a6bf865d7000fa5e415a9e5685b2fd612b9ccc7\"\u003e\u003ccode\u003e2a6bf86\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre2 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40216\"\u003e#40216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c8dcda63a8c1f91224c75e4311f847db5f42745a\"\u003e\u003ccode\u003ec8dcda6\u003c/code\u003e\u003c/a\u003e [Backport-to-1.74.x] Added missing useful to cf_event_engine (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40210\"\u003e#40210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/1c64908e6b68ea0dabf62ca6d3af8a8958e6c970\"\u003e\u003ccode\u003e1c64908\u003c/code\u003e\u003c/a\u003e [Ruby] Add rubygems support for linux-gnu and linux-musl platforms  (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40174\"\u003e#40174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/08648d377dfd8ada795a7ad8068b48dcb24bd328\"\u003e\u003ccode\u003e08648d3\u003c/code\u003e\u003c/a\u003e [Backport][v1.74.x][event_engine] Fix race conditions in the timer manager sh...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5d59f8e8517bb6a5f2865be63a06b2976b105f54\"\u003e\u003ccode\u003e5d59f8e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.74.0-pre1 (on v1.74.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40121\"\u003e#40121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5e6f934e0d297a241f0d7aa9e5170acf97880de7\"\u003e\u003ccode\u003e5e6f934\u003c/code\u003e\u003c/a\u003e [v1.74.x] Bump core version to 49.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40101\"\u003e#40101\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40119\"\u003e#40119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a4650ee8eb90f81753351ea6c7530142a164d0e0\"\u003e\u003ccode\u003ea4650ee\u003c/code\u003e\u003c/a\u003e [CI] Updated grpc_interop_aspnetcore docker (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/40088\"\u003e#40088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.74.0\"\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.3 to 2.32.4\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.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/021dc729f0b71a3030cefdbec7fb57a0e80a6cfd\"\u003e\u003ccode\u003e021dc72\u003c/code\u003e\u003c/a\u003e Polish up release tooling for last manual release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/821770e822a20a21b207b3907ea83878bda1d396\"\u003e\u003ccode\u003e821770e\u003c/code\u003e\u003c/a\u003e Bump version and add release notes for v2.32.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/59f8aa2adf1d3d06bcbf7ce6b13743a1639a5401\"\u003e\u003ccode\u003e59f8aa2\u003c/code\u003e\u003c/a\u003e Add netrc file search information to authentication documentation (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6876\"\u003e#6876\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5b4b64c3467fd7a3c03f91ee641aaa348b6bed3b\"\u003e\u003ccode\u003e5b4b64c\u003c/code\u003e\u003c/a\u003e Add more tests to prevent regression of CVE 2024 47081\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7bc45877a86192af77645e156eb3744f95b47dae\"\u003e\u003ccode\u003e7bc4587\u003c/code\u003e\u003c/a\u003e Add new test to check netrc auth leak (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6962\"\u003e#6962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/96ba401c1296ab1dda74a2365ef36d88f7d144ef\"\u003e\u003ccode\u003e96ba401\u003c/code\u003e\u003c/a\u003e Only use hostname to do netrc lookup instead of netloc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7341690e842a23cf18ded0abd9229765fa88c4e2\"\u003e\u003ccode\u003e7341690\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6951\"\u003e#6951\u003c/a\u003e from tswast/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6716d7c9f29df636643fa2489f98890216525cb0\"\u003e\u003ccode\u003e6716d7c\u003c/code\u003e\u003c/a\u003e remove links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a7e1c745dc23c18e836febd672416ed0c5d8d8ae\"\u003e\u003ccode\u003ea7e1c74\u003c/code\u003e\u003c/a\u003e Update docs/conf.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/c799b8167a13416833ad3b4f3298261a477e826f\"\u003e\u003ccode\u003ec799b81\u003c/code\u003e\u003c/a\u003e docs: fix dead links to kenreitz.org\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.39.14\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/050e2751f30f5f7a29ca62a1e1201e814bcc6364\"\u003e\u003ccode\u003e050e275\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.14'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/959b3809552f6ef842162cb3b1093107a069156e\"\u003e\u003ccode\u003e959b380\u003c/code\u003e\u003c/a\u003e Bumping version to 1.39.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3b198328622bd068d63256ef178261abb2683883\"\u003e\u003ccode\u003e3b19832\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/237679b1a560f2f87d73a904775fb73610c1a90f\"\u003e\u003ccode\u003e237679b\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.13'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d1ada0e81e73fdb425bbdb19e9e9787ac5a47760\"\u003e\u003ccode\u003ed1ada0e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.13' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/280ac68b4305f3ec73d5948319a4558892c45e9d\"\u003e\u003ccode\u003e280ac68\u003c/code\u003e\u003c/a\u003e Bumping version to 1.39.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/6cee86318ef9965cd5f6111a5a24f0a7049b458a\"\u003e\u003ccode\u003e6cee863\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/bf1d0e70e9a0ccb3ec6aa6da1feb9bbd92e383b7\"\u003e\u003ccode\u003ebf1d0e7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.12'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/67c5498e963dc0df5f8b2494d2af6a72d103f5b5\"\u003e\u003ccode\u003e67c5498\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.39.12' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7bb02b134192e227aed2d19c8abbb1bea0ad1309\"\u003e\u003ccode\u003e7bb02b1\u003c/code\u003e\u003c/a\u003e Bumping version to 1.39.12\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.39.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.12.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/2968d44280a68f775db73ddeb2f2fc6c05edac84\"\u003e\u003ccode\u003e2968d44\u003c/code\u003e\u003c/a\u003e Fix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for float and str (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/a79fb3a6c8bbe52afe71cd278bbea3bda5241a41\"\u003e\u003ccode\u003ea79fb3a\u003c/code\u003e\u003c/a\u003e 1.0 Byte should be displayed as 1 Byte\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/8059ebe1732c89177709476165f6e87cc76fe1b7\"\u003e\u003ccode\u003e8059ebe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/249\"\u003e#249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/589536bec03edec2d5eec4327aab3e7f0b9a36cd\"\u003e\u003ccode\u003e589536b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/f772e59bf67b14e8f5565d9f489966db1df45381\"\u003e\u003ccode\u003ef772e59\u003c/code\u003e\u003c/a\u003e use proper decimal separator for french\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/7c341b9d49f3b8687526d8e50cae5f5a5d31582d\"\u003e\u003ccode\u003e7c341b9\u003c/code\u003e\u003c/a\u003e fix some french translations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/09d081f78decf1cb0635eb1a01ea1523ede2151a\"\u003e\u003ccode\u003e09d081f\u003c/code\u003e\u003c/a\u003e Update dependency mkdocstrings to v0.29.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/246\"\u003e#246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.12.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efrom marshmallow import fields\n\u003cp\u003efield = fields.TimeDelta()\u003c/p\u003e\n\u003ch1\u003eBefore\u003c/h1\u003e\n\u003cp\u003efield.deserialize(12.9)\ndatetime.timedelta(seconds=12)\u003c/p\u003e\n\u003ch1\u003edatetime.timedelta(seconds=12)\u003c/h1\u003e\n\u003cp\u003e\u003c/code\u003e\u003c/pre\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/84b15960272c16525c945ae99749e505310612a9\"\u003e\u003ccode\u003e84b1596\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/a715b9e4bde6c46769e8819faa21649ebec937b6\"\u003e\u003ccode\u003ea715b9e\u003c/code\u003e\u003c/a\u003e Bump sphinx-issues from 5.0.0 to 5.0.1 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2819\"\u003e#2819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/5c136b11f90f130d321ee2985bb7aaa764258fb9\"\u003e\u003ccode\u003e5c136b1\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2817\"\u003e#2817\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/df1daf03fa79aae61f8aaa85de2a16f1ff63a0de\"\u003e\u003ccode\u003edf1daf0\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.9.1 to 0.10.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2818\"\u003e#2818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2fc8207da9cf0cf1d9b9b4ab76d4d0478b588325\"\u003e\u003ccode\u003e2fc8207\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/validates\"\u003e\u003ccode\u003e@​validates\u003c/code\u003e\u003c/a\u003e accepts multiple field names (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/1965\"\u003e#1965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b7026f3b2622cffc981588b647526fa9525f063d\"\u003e\u003ccode\u003eb7026f3\u003c/code\u003e\u003c/a\u003e Bump sphinx from 8.1.3 to 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/c495e525aeff224bf14c2996f5aecf84e4a1ed5b\"\u003e\u003ccode\u003ec495e52\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/f0c6afb430a6d032300658c898752d6c7732b188\"\u003e\u003ccode\u003ef0c6afb\u003c/code\u003e\u003c/a\u003e Add missing fields to \u003cstrong\u003eall\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2809\"\u003e#2809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ef06fbe2e51ab6f1626c758098d4fc6ecdd8368a\"\u003e\u003ccode\u003eef06fbe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2808\"\u003e#2808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ffedbfee649d96fad7393a9cdf5ceb5118965631\"\u003e\u003ccode\u003effedbfe\u003c/code\u003e\u003c/a\u003e Merge branch '3.x-line' into dev\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-storage` from 3.1.0 to 3.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-storage/releases\"\u003egoogle-cloud-storage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.1.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/blob/main/CHANGELOG.md\"\u003egoogle-cloud-storage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.1...v3.2.0\"\u003e3.2.0\u003c/a\u003e (2025-07-04)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e61c5d5f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.1.1\"\u003e3.1.1\u003c/a\u003e (2025-06-13)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a check for partial response data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1487\"\u003e#1487\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/7e0412a4fdfedcaa4683d5ef7d9155d5d58efa11\"\u003e7e0412a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd trove classifier for Python 3.13 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require google-crc32c \u0026gt;= 1.1.3 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require protobuf \u0026gt;= 3.20.2, \u0026lt; 7.0.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e Require requests \u0026gt;= 2.22.0 (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1448\"\u003e#1448\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/d3b6b3f96a6f94aa7c371902f48d1363ae6bfb5c\"\u003ed3b6b3f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve issue where pre-release versions of dependencies are installed (\u003ca href=\"https://github.com/googleapis/python-storage/commit/01009164beaab8931a1e1684966e3060edcf77b7\"\u003e0100916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSegmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e2a46c0b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMove quickstart to top of readme (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1451\"\u003e#1451\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/53257cf20a4de3810156ae9576a7092f5527df98\"\u003e53257cf\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to break infinite redirect loop (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1450\"\u003e#1450\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-storage/commit/03f1594eb90ea1298a3a23927537c86ac35d33d5\"\u003e03f1594\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/googleapis/python-storage/commit/7d97a384406258e0bfce3fbb715b84e5220d6783\"\u003e\u003ccode\u003e7d97a38\u003c/code\u003e\u003c/a\u003e chore(main): release 3.2.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1496\"\u003e#1496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/93d58d0f7e7467d99a206725f5701da29f6f3595\"\u003e\u003ccode\u003e93d58d0\u003c/code\u003e\u003c/a\u003e build: exclude certain autogenerated files (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1501\"\u003e#1501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/652cee3e351203796461d45e1c5bb6df34d170d1\"\u003e\u003ccode\u003e652cee3\u003c/code\u003e\u003c/a\u003e test: update constraints for python 3.9 testing (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1500\"\u003e#1500\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/c7357305495443348c0a432db649b27e6a5d8c5b\"\u003e\u003ccode\u003ec735730\u003c/code\u003e\u003c/a\u003e chore: update the source path in owlbot.yaml (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1497\"\u003e#1497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/f02739f5f4f21083382f75169de719c6d5926a4e\"\u003e\u003ccode\u003ef02739f\u003c/code\u003e\u003c/a\u003e tests: update default runtime used for tests (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1498\"\u003e#1498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/61c5d5f62c88506f200bc6d86b399a2c28715bc4\"\u003e\u003ccode\u003e61c5d5f\u003c/code\u003e\u003c/a\u003e feat: Adding support of single shot download (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1493\"\u003e#1493\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/5821134d6cb86cdd73f4dcf4cdb4f3c0a9e5ddd2\"\u003e\u003ccode\u003e5821134\u003c/code\u003e\u003c/a\u003e chore: add configurations in owlbot.py to copy gapic code (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1494\"\u003e#1494\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/129455b4290dfc75349f5529d167809df40be783\"\u003e\u003ccode\u003e129455b\u003c/code\u003e\u003c/a\u003e chore: add owlbot for gapic generation (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1492\"\u003e#1492\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/793d34048d318f0e01046db6b3e648de038917c5\"\u003e\u003ccode\u003e793d340\u003c/code\u003e\u003c/a\u003e chore(main): release 3.1.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1449\"\u003e#1449\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-storage/commit/2a46c0b9e6ec561ae3151d2a9a80c7452634487e\"\u003e\u003ccode\u003e2a46c0b\u003c/code\u003e\u003c/a\u003e fix: Segmentation fault in tink while writing data (\u003ca href=\"https://redirect.github.com/googleapis/python-storage/issues/1490\"\u003e#1490\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-storage/compare/v3.1.0...v3.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003edynamic_startup_nodes\u003c/code\u003e parameter to async RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3646\"\u003e#3646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport RESP3 with \u003ccode\u003ehiredis-py\u003c/code\u003e parser (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3648\"\u003e#3648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Async] Support for transactions in async \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esearch_json_examples.ipynb\u003c/code\u003e: Fix the old import \u003ccode\u003eindexDefinition\u003c/code\u003e -\u0026gt; \u003ccode\u003eindex_definition\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions \u0026lt; 4.0.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3645\"\u003e#3645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping \u003ccode\u003ePython 3.8\u003c/code\u003e support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(doc): update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/JCornat\"\u003e\u003ccode\u003e@​JCornat\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ShubhamKaudewar\"\u003e\u003ccode\u003e@​ShubhamKaudewar\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/uglide\"\u003e\u003ccode\u003e@​uglide\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.1.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for transactions in \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3611\"\u003e#3611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix RedisCluster \u003ccode\u003essl_check_hostname\u003c/code\u003e not set to connections. For SSL verification with \u003ccode\u003essl_cert_reqs=\u0026quot;none\u0026quot;\u003c/code\u003e, check_hostname is set to \u003ccode\u003eFalse\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3637\"\u003e#3637\u003c/a\u003e)\n\u003cstrong\u003eImportant\u003c/strong\u003e: The default value for the \u003ccode\u003echeck_hostname\u003c/code\u003e field of \u003ccode\u003eRedisSSLContext\u003c/code\u003e has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release.\nThe breaking change is reverted in the next release to fix the behavior --\u0026gt; 6.2.0\u003c/li\u003e\n\u003cli\u003ePrevent RuntimeError while reinitializing clusters - sync and async (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3633\"\u003e#3633\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e) - fixes integration with Django RQ\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAttributeError\u003c/code\u003e on \u003ccode\u003eClusterPipeline\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3634\"\u003e#3634\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\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/redis/redis-py/commit/1a59471870658c7fc661a4705541a0762acd8d85\"\u003e\u003ccode\u003e1a59471\u003c/code\u003e\u003c/a\u003e Adding small change in code to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/83cf781be62634bdc264cacf06f4a7b3b71ceb90\"\u003e\u003ccode\u003e83cf781\u003c/code\u003e\u003c/a\u003e Adding small change in README to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/f5cd264c409e5a34578f7df14a041f3a24fa7c8d\"\u003e\u003ccode\u003ef5cd264\u003c/code\u003e\u003c/a\u003e maintenance: Preparation for release 6.2.0 - updating lib version. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3662\"\u003e#3662\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/793cdc63ac744bbcd715bc6b51c5c4e77af79618\"\u003e\u003ccode\u003e793cdc6\u003c/code\u003e\u003c/a\u003e maintenance: Update redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/34c40ff82d41270b91af864274e052b1394c6652\"\u003e\u003ccode\u003e34c40ff\u003c/code\u003e\u003c/a\u003e fix(doc) : update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e5756daafaf80670b68454334ef00e924e70f07a\"\u003e\u003ccode\u003ee5756da\u003c/code\u003e\u003c/a\u003e Dropping Python 3.8 support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/bc7de608b857f40c51e6d650f0f8e972702e95f1\"\u003e\u003ccode\u003ebc7de60\u003c/code\u003e\u003c/a\u003e [Async] Support for transactions in async RedisCluster client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e226ad2b4ce4ed3b0f09bc06c0ffcac2e271dd2f\"\u003e\u003ccode\u003ee226ad2\u003c/code\u003e\u003c/a\u003e Removing connection_pool field from the CommandProtocol definition (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3656\"\u003e#3656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14a6fc39bdc8688218cc6a4eccc8c1a60306e356\"\u003e\u003ccode\u003e14a6fc3\u003c/code\u003e\u003c/a\u003e fix: Fixed potential deadlock from unexpected \u003cstrong\u003edel\u003c/strong\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/3ebfd5b5693e7e2f4c33cfa533116454e1ab5067\"\u003e\u003ccode\u003e3ebfd5b\u003c/code\u003e\u003c/a\u003e fix: Revert wrongly changed default value for check_hostname when instantiati...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-compress` from 1.17 to 1.18\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/colour-science/flask-compress/blob/master/CHANGELOG.md\"\u003eflask-compress's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.18 (2025-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport, and test against, Python 3.14, see \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate from \u003ccode\u003ezstandard\u003c/code\u003e to \u003ccode\u003epyzstd\u003c/code\u003e, which is now included in the Python 3.14 standard library, also part of \u003ca href=\"https://redirect.github.com/colour-science/flask-compress/pull/61\"\u003e#61\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestore \u003ccode\u003eflask_compress.DictCache()\u003c/code\u003e that is needed to configure Flask-Compress with caching, without relying on \u003ca href=\"https://pypi.org/project/Flask-Caching/\"\u003eFlask-Caching\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/colour-science/flask-compress/commit/3dade9d81e350cc946151fc853d7cee6094623a4\"\u003e\u003ccode\u003e3dade9d\u003c/code\u003e\u003c/a\u003e Bump to version 1.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/c4bbafb56bdd3f13392232b13f190b5f9449ea92\"\u003e\u003ccode\u003ec4bbafb\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/62\"\u003e#62\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/adf6469c6e5e47e92febe0375e76e3d18f23d35d\"\u003e\u003ccode\u003eadf6469\u003c/code\u003e\u003c/a\u003e Support Python 3.14; switch to \u003ccode\u003epyzstd\u003c/code\u003e for ZStandard support (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/61\"\u003e#61\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/2bb30399e3e8032e74b0984adcf7072c7282b3fb\"\u003e\u003ccode\u003e2bb3039\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/60\"\u003e#60\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/f6f6dc0a40dd3ad523475034a70c993ca4f69bd8\"\u003e\u003ccode\u003ef6f6dc0\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/colour-science/flask-compress/issues/59\"\u003e#59\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colour-science/flask-compress/commit/5034243bb668f63b86385ad7e8240fbe679f3352\"\u003e\u003ccode\u003e5034243\u003c/code\u003e\u003c/a\u003e Restore and test DictCache\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/colour-science/flask-compress/compare/v1.17...v1.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uwsgi` from 2.0.28 to 2.0.30\n\nUpdates `google-cloud-pubsub` from 2.29.0 to 2.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-pubsub/releases\"\u003egoogle-cloud-pubsub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.31.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.30.0...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2025-06-26)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MessageTransformationFailureReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1427\"\u003e#1427\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/8ab13e1b71c151f0146548e7224dd38c9d719a88\"\u003e8ab13e1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSurface Fatal Stream Errors to Future; Adjust Retryable Error Codes (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1422\"\u003e#1422\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/e081beb29056035304d365ec9c50fa7ffbac6886\"\u003ee081beb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.30.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.29.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e4d072e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate documentation for JavaScriptUDF to indicate that the \u003ccode\u003emessage_id\u003c/code\u003e metadata field is optional instead of required (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1380\"\u003e#1380\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/be9005412fea06bea917c8b6861546b7e6c62a1e\"\u003ebe90054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e77ba05d\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/googleapis/python-pubsub/blob/main/CHANGELOG.md\"\u003egoogle-cloud-pubsub's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.30.0...v2.31.0\"\u003e2.31.0\u003c/a\u003e (2025-06-26)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MessageTransformationFailureReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1427\"\u003e#1427\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/8ab13e1b71c151f0146548e7224dd38c9d719a88\"\u003e8ab13e1\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSurface Fatal Stream Errors to Future; Adjust Retryable Error Codes (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1422\"\u003e#1422\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/e081beb29056035304d365ec9c50fa7ffbac6886\"\u003ee081beb\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"...\n\n_Description has been truncated_","html_url":"https://github.com/liamtoozer/liam-runner/pull/44","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/liamtoozer%2Fliam-runner/issues/44","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/44/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-06-16T19:28:34.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2596680574","node_id":"PR_kwDOKrpNGs6axjN-","number":1732,"state":"closed","title":"Bump google-cloud-datastore from 2.20.2 to 2.21.0","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":0,"pull_request":true,"closed_at":"2025-06-16T19:28:43.000Z","author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-06-16T19:28:34.000Z","updated_at":"2025-06-16T19:28:43.000Z","time_to_close":9,"merged_at":"2025-06-16T19:28:43.000Z","merged_by":"github-actions[bot]","closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"}],"path":null,"ecosystem":"pip"},"body":"Bumps [google-cloud-datastore](https://github.com/googleapis/python-datastore) from 2.20.2 to 2.21.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.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=google-cloud-datastore\u0026package-manager=pip\u0026previous-version=2.20.2\u0026new-version=2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/shilu10/MANN-Meta-Learning/pull/1732","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/shilu10%2FMANN-Meta-Learning/issues/1732","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1732/packages"}},{"old_version":"2.20.2","new_version":"2.21.0","update_type":"minor","path":null,"pr_created_at":"2025-06-13T07:48:34.000Z","version_change":"2.20.2 → 2.21.0","issue":{"uuid":"2589422146","node_id":"PR_kwDODRkoPc6aV3JC","number":1674,"state":"closed","title":"Bump the production-dependencies group across 1 directory with 13 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":4,"pull_request":true,"closed_at":"2025-06-20T08:07:16.000Z","author_association":"CONTRIBUTOR","state_reason":null,"created_at":"2025-06-13T07:48:34.000Z","updated_at":"2025-06-20T08:07:16.000Z","time_to_close":605922,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":13,"packages":[{"name":"flask","old_version":"3.1.0","new_version":"3.1.1","repository_url":"https://github.com/pallets/flask"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/python-datastore"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.73.0","repository_url":"https://github.com/grpc/grpc"},{"name":"requests","old_version":"2.32.3","new_version":"2.32.4","repository_url":"https://github.com/psf/requests"},{"name":"structlog","old_version":"25.2.0","new_version":"25.4.0","repository_url":"https://github.com/hynek/structlog"},{"name":"boto3","old_version":"1.37.23","new_version":"1.38.36","repository_url":"https://github.com/boto/boto3"},{"name":"humanize","old_version":"4.12.2","new_version":"4.12.3","repository_url":"https://github.com/python-humanize/humanize"},{"name":"marshmallow","old_version":"3.26.1","new_version":"4.0.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"redis","old_version":"5.2.1","new_version":"6.2.0","repository_url":"https://github.com/redis/redis-py"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.30"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.30.0","repository_url":"https://github.com/googleapis/python-pubsub"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.19.3","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"gevent","old_version":"24.11.1","new_version":"25.5.1","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 13 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.0` | `3.1.1` |\n| [google-cloud-datastore](https://github.com/googleapis/python-datastore) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.73.0` |\n| [requests](https://github.com/psf/requests) | `2.32.3` | `2.32.4` |\n| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.4.0` |\n| [boto3](https://github.com/boto/boto3) | `1.37.23` | `1.38.36` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.12.2` | `4.12.3` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `4.0.0` |\n| [redis](https://github.com/redis/redis-py) | `5.2.1` | `6.2.0` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.30` |\n| [google-cloud-pubsub](https://github.com/googleapis/python-pubsub) | `2.29.0` | `2.30.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.19.3` |\n| [gevent](https://github.com/gevent/gevent) | `24.11.1` | `25.5.1` |\n\n\nUpdates `flask` from 3.1.0 to 3.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.1\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.1/\"\u003ehttps://pypi.org/project/Flask/3.1.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\"\u003ehttps://flask.palletsprojects.com/en/stable/changes/#version-3-1-1\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/flask/milestone/36?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/36?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via \u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. GHSA-4grg-w6v8-c28g\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5645\"\u003e#5645\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands are shown. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5673\"\u003e#5673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return \u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier for Quart. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\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/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.1\u003c/h2\u003e\n\u003cp\u003eReleased 2025-05-13\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix signing key selection order when key rotation is enabled via\n\u003ccode\u003eSECRET_KEY_FALLBACKS\u003c/code\u003e. :ghsa:\u003ccode\u003e4grg-w6v8-c28g\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type hint for \u003ccode\u003ecli_runner.invoke\u003c/code\u003e. :issue:\u003ccode\u003e5645\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eflask --help\u003c/code\u003e loads the app and plugins first to make sure all commands\nare shown. :issue:\u003ccode\u003e5673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark sans-io base class as being able to handle views that return\n\u003ccode\u003eAsyncIterable\u003c/code\u003e. This is not accurate for Flask, but makes typing easier\nfor Quart. :pr:\u003ccode\u003e5659\u003c/code\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/pallets/flask/commit/7fff56f5172c48b6f3aedf17ee14ef5c2533dfd1\"\u003e\u003ccode\u003e7fff56f\u003c/code\u003e\u003c/a\u003e release version 3.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73d6504063bfa00666a92b07a28aaf906c532f09\"\u003e\u003ccode\u003e73d6504\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/cbb6c36692f7d882e9026597624c0eb38e01f9cb\"\u003e\u003ccode\u003ecbb6c36\u003c/code\u003e\u003c/a\u003e update docs about fallback order\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fb54159861708558b5f5658ebdc14709d984361c\"\u003e\u003ccode\u003efb54159\u003c/code\u003e\u003c/a\u003e secret key rotation: fix key list ordering\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/941efd4a36ed0f27e13758874f95e3aa1d3ee163\"\u003e\u003ccode\u003e941efd4\u003c/code\u003e\u003c/a\u003e use uv (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5727\"\u003e#5727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/0109e496f6ca68de29480fe6413e81b1d3f86aa9\"\u003e\u003ccode\u003e0109e49\u003c/code\u003e\u003c/a\u003e use uv\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/e7851665071cb93b3c70b1e7103f82d1e6d01f5d\"\u003e\u003ccode\u003ee785166\u003c/code\u003e\u003c/a\u003e Async Iterable Response (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5659\"\u003e#5659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/410e5ab7ed0ef326fa8b5164a633863f137ffff5\"\u003e\u003ccode\u003e410e5ab\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003eAsyncIterable\u003c/code\u003e for responses\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/bfffe87d4c2ea255b9a51432bebb3d28741245c4\"\u003e\u003ccode\u003ebfffe87\u003c/code\u003e\u003c/a\u003e add ghsa links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/73ce26c3e822cdc2ccf99625619a50c91f163f8d\"\u003e\u003ccode\u003e73ce26c\u003c/code\u003e\u003c/a\u003e remove tests about deprecated pkgutil.get_loader (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5702\"\u003e#5702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.0...3.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.71.0 to 1.73.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.73.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.73.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egradient\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cp\u003eAs of this version, gRPC on MacOS \u0026amp; iOS will utilize Abseil's synchronization features, aligning it with other platforms. Should you encounter any issues due to this update, you can disable it by enabling GPR_DISABLE_ABSEIL_SYNC. If you do this, please report any problems by filing a bug at \u003ca href=\"https://github.com/grpc/grpc\"\u003ehttps://github.com/grpc/grpc\u003c/a\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[Dep] Update Protobuf to v31.0. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39392\"\u003e#39392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Core] Added GPR_DISABLE_ABSEIL_SYNC. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39562\"\u003e#39562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds_override_host] pass through per-endpoint args when creating subchannels. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39532\"\u003e#39532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose GRPC_OPENSSL_CLEANUP_TIMEOUT to control shutdown grace period. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39297\"\u003e#39297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[URI] fix parsing of user_info in proxy settings. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39004\"\u003e#39004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix busy loop in thread pool when shutting down. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39258\"\u003e#39258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Dep] Added a flag to build with \u003ccode\u003eopenssl\u003c/code\u003e instead of \u003ccode\u003eboringssl\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39188\"\u003e#39188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Cleanup: EventEngine client, listener, and dns experiments are on by default on all platforms. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39079\"\u003e#39079\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[OpenCensus] Mark OpenCensus and dependent APIs as deprecated. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39554\"\u003e#39554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Pin Cython to 3.1.1. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39609\"\u003e#39609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] grpc_tools: make PythonGrpcGenerator handle dot \u003ccode\u003e.\u003c/code\u003e in proto paths the same way as native Generator/PyiGenerator. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39586\"\u003e#39586\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] add remove_unused_artifacts to opt build. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39593\"\u003e#39593\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.73.0-pre2\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.73.0 (gradient).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis prerelease contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eRelease v1.73.0-pre1\u003c/h2\u003e\n\u003cp\u003eThis is a prerelease of gRPC Core 1.73.0 (gradient).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/95dd243c6d9a9104c6ca2344861c8e8d8ccf4d7b\"\u003e\u003ccode\u003e95dd243\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.73.0 (on v1.73.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39787\"\u003e#39787\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/9f9728c159937fc281d1a6a36150952d2095e2b7\"\u003e\u003ccode\u003e9f9728c\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.73.0-pre2 (on v1.73.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39721\"\u003e#39721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/481fcfdf2142c081d9d4810dd6612d981ecd5e68\"\u003e\u003ccode\u003e481fcfd\u003c/code\u003e\u003c/a\u003e [xDS] remove env var guards for gRFCs A81, A82, and A83 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39711\"\u003e#39711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/5d0f2c8148d6e86b9e9f16082c45ad0c437e16ca\"\u003e\u003ccode\u003e5d0f2c8\u003c/code\u003e\u003c/a\u003e Fix Python linux distribtest for aarch64_alpine target and enable for presubm...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/ce0bd2d7c208e1932fcb64ffd210a4a57d4328b9\"\u003e\u003ccode\u003ece0bd2d\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.73.0-pre1 (on v1.73.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39643\"\u003e#39643\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/233368b057ed3b99485bda1006d87816484f2905\"\u003e\u003ccode\u003e233368b\u003c/code\u003e\u003c/a\u003e [Backport][v1.73.x][Python] Fix Python Linux distribtests copy conflicts (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39\"\u003e#39\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f71fac77473e06142bcc6805e471ceaca1671869\"\u003e\u003ccode\u003ef71fac7\u003c/code\u003e\u003c/a\u003e [Release] Bump core version to 48.0.0 for upcoming release (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39611\"\u003e#39611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c19a471beacf6fc3e8914dcaae7ef331986eba6a\"\u003e\u003ccode\u003ec19a471\u003c/code\u003e\u003c/a\u003e [Python] Pin Cython to 3.1.1 (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39609\"\u003e#39609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/c8a7a350f8efbc7cf00cd4368e10e83902dc7de7\"\u003e\u003ccode\u003ec8a7a35\u003c/code\u003e\u003c/a\u003e [alpn] Inject ALPN Protocols from channel args (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39541\"\u003e#39541\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a58a5ffb4763e0f922461efbaa493752361b4435\"\u003e\u003ccode\u003ea58a5ff\u003c/code\u003e\u003c/a\u003e [subchannel] stop passing watcher a ref to itself (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39372\"\u003e#39372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.73.0\"\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.3 to 2.32.4\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.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6965\"\u003e#6965\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6926\"\u003e#6926\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNumerous documentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for pypy 3.11 for Linux and macOS.\u003c/li\u003e\n\u003cli\u003eDropped support for pypy 3.9 following its end of support.\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/021dc729f0b71a3030cefdbec7fb57a0e80a6cfd\"\u003e\u003ccode\u003e021dc72\u003c/code\u003e\u003c/a\u003e Polish up release tooling for last manual release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/821770e822a20a21b207b3907ea83878bda1d396\"\u003e\u003ccode\u003e821770e\u003c/code\u003e\u003c/a\u003e Bump version and add release notes for v2.32.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/59f8aa2adf1d3d06bcbf7ce6b13743a1639a5401\"\u003e\u003ccode\u003e59f8aa2\u003c/code\u003e\u003c/a\u003e Add netrc file search information to authentication documentation (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6876\"\u003e#6876\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5b4b64c3467fd7a3c03f91ee641aaa348b6bed3b\"\u003e\u003ccode\u003e5b4b64c\u003c/code\u003e\u003c/a\u003e Add more tests to prevent regression of CVE 2024 47081\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7bc45877a86192af77645e156eb3744f95b47dae\"\u003e\u003ccode\u003e7bc4587\u003c/code\u003e\u003c/a\u003e Add new test to check netrc auth leak (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6962\"\u003e#6962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/96ba401c1296ab1dda74a2365ef36d88f7d144ef\"\u003e\u003ccode\u003e96ba401\u003c/code\u003e\u003c/a\u003e Only use hostname to do netrc lookup instead of netloc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/7341690e842a23cf18ded0abd9229765fa88c4e2\"\u003e\u003ccode\u003e7341690\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psf/requests/issues/6951\"\u003e#6951\u003c/a\u003e from tswast/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6716d7c9f29df636643fa2489f98890216525cb0\"\u003e\u003ccode\u003e6716d7c\u003c/code\u003e\u003c/a\u003e remove links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a7e1c745dc23c18e836febd672416ed0c5d8d8ae\"\u003e\u003ccode\u003ea7e1c74\u003c/code\u003e\u003c/a\u003e Update docs/conf.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/c799b8167a13416833ad3b4f3298261a477e826f\"\u003e\u003ccode\u003ec799b81\u003c/code\u003e\u003c/a\u003e docs: fix dead links to kenreitz.org\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.3...v2.32.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.4.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main feature is support for exception groups we \u003cdel\u003estole\u003c/del\u003e adapted from \u003ca href=\"https://rich.readthedocs.io/\"\u003eRich\u003c/a\u003e, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update \u003cem\u003estructlog\u003c/em\u003e before updating Python, if you use \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://www.klaviyo.com\"\u003eKlaviyo\u003c/a\u003e (@\u003ca href=\"https://github.com/klaviyo\"\u003eklaviyo\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), \u003ca href=\"https://blog.alternatebuild.dev\"\u003enate nowack\u003c/a\u003e (@\u003ca href=\"https://github.com/zzstoatzz\"\u003ezzstoatzz\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), Jesse Snyder (@\u003ca href=\"https://github.com/jessesnyder\"\u003ejessesnyder\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://www.miketheman.net\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://mpr.crossjam.net/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Moving Content AG (@\u003ca href=\"https://github.com/moving-content\"\u003emoving-content\u003c/a\u003e), \u003ca href=\"https://proteinqure.com/\"\u003eProteinQure\u003c/a\u003e (@\u003ca href=\"https://github.com/ProteinQure\"\u003eProteinQure\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNot to forget 14 more amazing humans who chose to be generous but anonymous!\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e. \u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e. This works similarly to what Rich v14.0.0 does. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter. \u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/anujdas\"\u003e\u003ccode\u003e@​anujdas\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sscherfke\"\u003e\u003ccode\u003e@​sscherfke\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/structlog\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner hynek structlog-25.4.0.tar.gz\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/blob/main/CHANGELOG.md\"\u003estructlog's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.3.0...25.4.0\"\u003e25.4.0\u003c/a\u003e - 2025-06-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport for Python 3.14 and Python 3.13.4.\u003c/p\u003e\n\u003cp\u003ePython 3.14 has an backwards-incompatible change to \u003ccode\u003elogging.Logger.isEnabledFor()\u003c/code\u003e (it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03).\nIt mainly affects \u003ccode\u003estructlog.stdlib.filter_by_level()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/723\"\u003e#723\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003estructlog.tracebacks\u003c/code\u003e now handles \u003ca href=\"https://docs.python.org/3/library/exceptions.html#exception-groups\"\u003eexception groups\u003c/a\u003e.\n\u003ccode\u003estructlog.tracebacks.Stack\u003c/code\u003e has two new fields, \u003ccode\u003eis_group: bool\u003c/code\u003e and \u003ccode\u003eexceptions: list[Trace]\u003c/code\u003e.\nThis works similarly to what Rich v14.0.0 does.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/720\"\u003e#720\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.ExceptionPrettyPrinter\u003c/code\u003e now respects the \u003cem\u003eexception_formatter\u003c/em\u003e arguments instead of always using the default formatter.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/724\"\u003e#724\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.3.0\"\u003e25.3.0\u003c/a\u003e - 2025-04-25\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estructlog.processors.TimeStamper\u003c/code\u003e now again uses timestamps using UTC for custom format strings when \u003ccode\u003eutc=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/hynek/structlog/pull/713\"\u003e#713\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/hynek/structlog/commit/d38385cda711f62ad56018abfd72d4384f94e3ce\"\u003e\u003ccode\u003ed38385c\u003c/code\u003e\u003c/a\u003e Prepare 25.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/57e165bfacb79eb5942389c20eb9d883d88bfcb6\"\u003e\u003ccode\u003e57e165b\u003c/code\u003e\u003c/a\u003e Make Mypy 1.16 pass\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/e941e337d312eaf256595d9d09da4542c5e94d0b\"\u003e\u003ccode\u003ee941e33\u003c/code\u003e\u003c/a\u003e ci: work around weird new failure in Mypy 1.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/d9480273261e4d55d05465c434c41c7e25af4dde\"\u003e\u003ccode\u003ed948027\u003c/code\u003e\u003c/a\u003e Update Ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/ea14fda0c7067237292f4f214890054c77036e0e\"\u003e\u003ccode\u003eea14fda\u003c/code\u003e\u003c/a\u003e Oxford!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/034f067ed904406fcad33d0cb0dd0335135e9051\"\u003e\u003ccode\u003e034f067\u003c/code\u003e\u003c/a\u003e Add explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5e57018d460ace553077883751d6e6be9d7396ac\"\u003e\u003ccode\u003e5e57018\u003c/code\u003e\u003c/a\u003e Make Dr Zizmor happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/bcc2df82d6fd9bd9d09e0e060fcf2833a9b0e846\"\u003e\u003ccode\u003ebcc2df8\u003c/code\u003e\u003c/a\u003e docs: add missing link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/5d9c7f8ef81c9de40a3644cd3216409d771ecdd5\"\u003e\u003ccode\u003e5d9c7f8\u003c/code\u003e\u003c/a\u003e docs: clarify compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hynek/structlog/commit/f07c1367e790c3de161e1248e5c98e911f8377b4\"\u003e\u003ccode\u003ef07c136\u003c/code\u003e\u003c/a\u003e tracebacks: Handle ExceptionGroup (\u003ca href=\"https://redirect.github.com/hynek/structlog/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/hynek/structlog/compare/25.2.0...25.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.37.23 to 1.38.36\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a6598484538f4f70c084352ed1dc866a273a5063\"\u003e\u003ccode\u003ea659848\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.36'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/75dd118e4b6518fd0b641058cdb0ab1ac8c396e2\"\u003e\u003ccode\u003e75dd118\u003c/code\u003e\u003c/a\u003e Bumping version to 1.38.36\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9ae105534c39e8ed78e1ff356aef0c49768eef7a\"\u003e\u003ccode\u003e9ae1055\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/b2ea7335700c62f3c8c92527590bd6ead5e572f9\"\u003e\u003ccode\u003eb2ea733\u003c/code\u003e\u003c/a\u003e Docs: Add support for Adobe Analytics in documentation (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4379\"\u003e#4379\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/18bd5a28f6f3a8b4119de8241ab1c811d99c44ce\"\u003e\u003ccode\u003e18bd5a2\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.35'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/13114f9b47bebb1917a9a20c609b581b12592489\"\u003e\u003ccode\u003e13114f9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.35' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/4b942d7a0af04f85416d33eac70e9ec335ed8129\"\u003e\u003ccode\u003e4b942d7\u003c/code\u003e\u003c/a\u003e Bumping version to 1.38.35\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/298bee17bca6f6fbbf9696a04ba6c92d258953bb\"\u003e\u003ccode\u003e298bee1\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/612750c0311d9585850b7345b3ca89299758c7d1\"\u003e\u003ccode\u003e612750c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.34'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/925a9263b65b71929c3c6745986d1546ccc60f98\"\u003e\u003ccode\u003e925a926\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.38.34' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.37.23...1.38.36\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.12.2 to 4.12.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.12.3\u003c/h2\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for \u003ccode\u003efloat\u003c/code\u003e and \u003ccode\u003estr\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e) \u003ca href=\"https://github.com/loicleyendecker\"\u003e\u003ccode\u003e@​loicleyendecker\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprovements for French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/248\"\u003e#248\u003c/a\u003e) \u003ca href=\"https://github.com/merwok\"\u003e\u003ccode\u003e@​merwok\u003c/code\u003e\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/python-humanize/humanize/commit/2968d44280a68f775db73ddeb2f2fc6c05edac84\"\u003e\u003ccode\u003e2968d44\u003c/code\u003e\u003c/a\u003e Fix regression in \u003ccode\u003enaturalsize\u003c/code\u003e for float and str (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/a79fb3a6c8bbe52afe71cd278bbea3bda5241a41\"\u003e\u003ccode\u003ea79fb3a\u003c/code\u003e\u003c/a\u003e 1.0 Byte should be displayed as 1 Byte\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/8059ebe1732c89177709476165f6e87cc76fe1b7\"\u003e\u003ccode\u003e8059ebe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/249\"\u003e#249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/589536bec03edec2d5eec4327aab3e7f0b9a36cd\"\u003e\u003ccode\u003e589536b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/f772e59bf67b14e8f5565d9f489966db1df45381\"\u003e\u003ccode\u003ef772e59\u003c/code\u003e\u003c/a\u003e use proper decimal separator for french\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/7c341b9d49f3b8687526d8e50cae5f5a5d31582d\"\u003e\u003ccode\u003e7c341b9\u003c/code\u003e\u003c/a\u003e fix some french translations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-humanize/humanize/commit/09d081f78decf1cb0635eb1a01ea1523ede2151a\"\u003e\u003ccode\u003e09d081f\u003c/code\u003e\u003c/a\u003e Update dependency mkdocstrings to v0.29.1 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/246\"\u003e#246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python-humanize/humanize/compare/4.12.2...4.12.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 4.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.0.0 (2025-04-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eSee :ref:\u003ccode\u003eupgrading_4_0\u003c/code\u003e for a guide on updating your code.\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTyping: Add types to all \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e constructor kwargs (:issue:\u003ccode\u003e2285\u003c/code\u003e).\nThanks :user:\u003ccode\u003enavignaw\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDateTime \u0026lt;marshmallow.fields.DateTime\u0026gt;\u003c/code\u003e, \u003ccode\u003eDate \u0026lt;marshmallow.fields.Date\u0026gt;\u003c/code\u003e, \u003ccode\u003eTime \u0026lt;marshmallow.fields.Time\u0026gt;\u003c/code\u003e,\n\u003ccode\u003eTimeDelta \u0026lt;marshmallow.fields.TimeDelta\u0026gt;\u003c/code\u003e, and \u003ccode\u003eEnum \u0026lt;marshmallow.fields.Enum\u0026gt;\u003c/code\u003e\naccept their internal value types as valid input (:issue:\u003ccode\u003e1415\u003c/code\u003e).\nThanks :user:\u003ccode\u003ebitdancer\u003c/code\u003e for the suggestion.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@validates \u0026lt;marshmallow.validates\u0026gt;\u003c/code\u003e accepts multiple field names (:issue:\u003ccode\u003e1960\u003c/code\u003e).\n\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Decorated methods now receive \u003ccode\u003edata_key\u003c/code\u003e as a keyword argument.\nThanks :user:\u003ccode\u003edpriskorn\u003c/code\u003e for the suggestion and :user:\u003ccode\u003edharani7998\u003c/code\u003e for the PR.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eTyping: \u003ccode\u003eField \u0026lt;marshmallow.fields.Field\u0026gt;\u003c/code\u003e is now a generic type with a type argument for the internal value type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.fields.UUID\u003c/code\u003e no longer subclasses \u003ccode\u003emarshmallow.fields.String\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003emarshmallow.Schema.load\u003c/code\u003e no longer silently fails to call schema validators when a generator is passed (:issue:\u003ccode\u003e1898\u003c/code\u003e).\nThe typing of \u003ccode\u003edata\u003c/code\u003e is also updated to be more accurate.\nThanks :user:\u003ccode\u003eziplokk1\u003c/code\u003e for reporting.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Use \u003ccode\u003edatetime.date.fromisoformat\u003c/code\u003e, \u003ccode\u003edatetime.time.fromisoformat\u003c/code\u003e, and \u003ccode\u003edatetime.datetime.fromisoformat\u003c/code\u003e from the standard library to deserialize dates, times and datetimes (:pr:\u003ccode\u003e2078\u003c/code\u003e).\nAs a consequence of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTime with time offsets are now supported.\u003c/li\u003e\n\u003cli\u003eYYYY-MM-DD is now accepted as a datetime and deserialized as naive 00:00 AM.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efrom_iso_date\u003c/code\u003e, \u003ccode\u003efrom_iso_time\u003c/code\u003e and \u003ccode\u003efrom_iso_datetime\u003c/code\u003e are removed from \u003ccode\u003emarshmallow.utils\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eisoformat\u003c/code\u003e, \u003ccode\u003eto_iso_time\u003c/code\u003e and \u003ccode\u003eto_iso_datetime\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2766\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003efrom_rfc\u003c/code\u003e, and \u003ccode\u003erfcformat\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2767\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eis_keyed_tuple\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2768\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRemove \u003ccode\u003eget_fixed_timezone\u003c/code\u003e from \u003ccode\u003emarshmallow.utils\u003c/code\u003e (:pr:\u003ccode\u003e2773\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.Boolean\u003c/code\u003e no longer serializes non-boolean values (:pr:\u003ccode\u003e2725\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003eschema\u003c/code\u003e parameter to \u003ccode\u003eparent\u003c/code\u003e in \u003ccode\u003emarshmallow.fields.Field._bind_to_schema\u003c/code\u003e (:issue:\u003ccode\u003e1360\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: Rename \u003ccode\u003epass_many\u003c/code\u003e parameter to \u003ccode\u003epass_collection\u003c/code\u003e in pre/post processing methods (:issue:\u003ccode\u003e1369\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cem\u003eBackwards-incompatible\u003c/em\u003e: \u003ccode\u003emarshmallow.fields.TimeDelta\u003c/code\u003e no longer truncates float values when\ndeserializing (:pr:\u003ccode\u003e2654\u003c/code\u003e). This allows microseconds to be preserved, e.g.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. code-block:: python\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003efrom marshmallow import fields\n\u003cp\u003efield = fields.TimeDelta()\u003c/p\u003e\n\u003ch1\u003eBefore\u003c/h1\u003e\n\u003cp\u003efield.deserialize(12.9)\ndatetime.timedelta(seconds=12)\u003c/p\u003e\n\u003ch1\u003edatetime.timedelta(seconds=12)\u003c/h1\u003e\n\u003cp\u003e\u003c/code\u003e\u003c/pre\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/84b15960272c16525c945ae99749e505310612a9\"\u003e\u003ccode\u003e84b1596\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/a715b9e4bde6c46769e8819faa21649ebec937b6\"\u003e\u003ccode\u003ea715b9e\u003c/code\u003e\u003c/a\u003e Bump sphinx-issues from 5.0.0 to 5.0.1 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2819\"\u003e#2819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/5c136b11f90f130d321ee2985bb7aaa764258fb9\"\u003e\u003ccode\u003e5c136b1\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2817\"\u003e#2817\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/df1daf03fa79aae61f8aaa85de2a16f1ff63a0de\"\u003e\u003ccode\u003edf1daf0\u003c/code\u003e\u003c/a\u003e Bump sphinxext-opengraph from 0.9.1 to 0.10.0 (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2818\"\u003e#2818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2fc8207da9cf0cf1d9b9b4ab76d4d0478b588325\"\u003e\u003ccode\u003e2fc8207\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/validates\"\u003e\u003ccode\u003e@​validates\u003c/code\u003e\u003c/a\u003e accepts multiple field names (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/1965\"\u003e#1965\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b7026f3b2622cffc981588b647526fa9525f063d\"\u003e\u003ccode\u003eb7026f3\u003c/code\u003e\u003c/a\u003e Bump sphinx from 8.1.3 to 8.2.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/c495e525aeff224bf14c2996f5aecf84e4a1ed5b\"\u003e\u003ccode\u003ec495e52\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/f0c6afb430a6d032300658c898752d6c7732b188\"\u003e\u003ccode\u003ef0c6afb\u003c/code\u003e\u003c/a\u003e Add missing fields to \u003cstrong\u003eall\u003c/strong\u003e (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2809\"\u003e#2809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ef06fbe2e51ab6f1626c758098d4fc6ecdd8368a\"\u003e\u003ccode\u003eef06fbe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2808\"\u003e#2808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/ffedbfee649d96fad7393a9cdf5ceb5118965631\"\u003e\u003ccode\u003effedbfe\u003c/code\u003e\u003c/a\u003e Merge branch '3.x-line' into dev\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...4.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.2.1 to 6.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003edynamic_startup_nodes\u003c/code\u003e parameter to async RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3646\"\u003e#3646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport RESP3 with \u003ccode\u003ehiredis-py\u003c/code\u003e parser (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3648\"\u003e#3648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Async] Support for transactions in async \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esearch_json_examples.ipynb\u003c/code\u003e: Fix the old import \u003ccode\u003eindexDefinition\u003c/code\u003e -\u0026gt; \u003ccode\u003eindex_definition\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions \u0026lt; 4.0.0 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3645\"\u003e#3645\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropping \u003ccode\u003ePython 3.8\u003c/code\u003e support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(doc): update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/JCornat\"\u003e\u003ccode\u003e@​JCornat\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ShubhamKaudewar\"\u003e\u003ccode\u003e@​ShubhamKaudewar\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/uglide\"\u003e\u003ccode\u003e@​uglide\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.1.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert wrongly changed default value for \u003ccode\u003echeck_hostname\u003c/code\u003e when instantiating \u003ccode\u003eRedisSSLContext\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3655\"\u003e#3655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed potential deadlock from unexpected \u003ccode\u003e__del__\u003c/code\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for transactions in \u003ccode\u003eRedisCluster\u003c/code\u003e client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3611\"\u003e#3611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix RedisCluster \u003ccode\u003essl_check_hostname\u003c/code\u003e not set to connections. For SSL verification with \u003ccode\u003essl_cert_reqs=\u0026quot;none\u0026quot;\u003c/code\u003e, check_hostname is set to \u003ccode\u003eFalse\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3637\"\u003e#3637\u003c/a\u003e)\n\u003cstrong\u003eImportant\u003c/strong\u003e: The default value for the \u003ccode\u003echeck_hostname\u003c/code\u003e field of \u003ccode\u003eRedisSSLContext\u003c/code\u003e has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release.\nThe breaking change is reverted in the next release to fix the behavior --\u0026gt; 6.2.0\u003c/li\u003e\n\u003cli\u003ePrevent RuntimeError while reinitializing clusters - sync and async (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3633\"\u003e#3633\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd equality and hashability to \u003ccode\u003eRetry\u003c/code\u003e and backoff classes (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3628\"\u003e#3628\u003c/a\u003e) - fixes integration with Django RQ\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eAttributeError\u003c/code\u003e on \u003ccode\u003eClusterPipeline\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3634\"\u003e#3634\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\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/redis/redis-py/commit/1a59471870658c7fc661a4705541a0762acd8d85\"\u003e\u003ccode\u003e1a59471\u003c/code\u003e\u003c/a\u003e Adding small change in code to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/83cf781be62634bdc264cacf06f4a7b3b71ceb90\"\u003e\u003ccode\u003e83cf781\u003c/code\u003e\u003c/a\u003e Adding small change in README to trigger pipeline for the branch.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/f5cd264c409e5a34578f7df14a041f3a24fa7c8d\"\u003e\u003ccode\u003ef5cd264\u003c/code\u003e\u003c/a\u003e maintenance: Preparation for release 6.2.0 - updating lib version. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3662\"\u003e#3662\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/793cdc63ac744bbcd715bc6b51c5c4e77af79618\"\u003e\u003ccode\u003e793cdc6\u003c/code\u003e\u003c/a\u003e maintenance: Update redis-entraid dependency (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3661\"\u003e#3661\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/34c40ff82d41270b91af864274e052b1394c6652\"\u003e\u003ccode\u003e34c40ff\u003c/code\u003e\u003c/a\u003e fix(doc) : update Python print output in json doctests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e5756daafaf80670b68454334ef00e924e70f07a\"\u003e\u003ccode\u003ee5756da\u003c/code\u003e\u003c/a\u003e Dropping Python 3.8 support as it has reached end of life (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3657\"\u003e#3657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/bc7de608b857f40c51e6d650f0f8e972702e95f1\"\u003e\u003ccode\u003ebc7de60\u003c/code\u003e\u003c/a\u003e [Async] Support for transactions in async RedisCluster client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3649\"\u003e#3649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e226ad2b4ce4ed3b0f09bc06c0ffcac2e271dd2f\"\u003e\u003ccode\u003ee226ad2\u003c/code\u003e\u003c/a\u003e Removing connection_pool field from the CommandProtocol definition (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3656\"\u003e#3656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14a6fc39bdc8688218cc6a4eccc8c1a60306e356\"\u003e\u003ccode\u003e14a6fc3\u003c/code\u003e\u003c/a\u003e fix: Fixed potential deadlock from unexpected \u003cstrong\u003edel\u003c/strong\u003e call (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3654\"\u003e#3654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/3ebfd5b5693e7e2f4c33cfa533116454e1ab5067\"\u003e\u003ccode\u003e3ebfd5b\u003c/code\u003e\u003c/a\u003e fix: Revert wrongly changed default value for check_hostname when instantiati...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.2.1...v6.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uwsgi` from 2.0.28 to 2.0.30\n\nUpdates `google-cloud-pubsub` from 2.29.0 to 2.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-pubsub/releases\"\u003egoogle-cloud-pubsub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.30.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.29.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e4d072e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate documentation for JavaScriptUDF to indicate that the \u003ccode\u003emessage_id\u003c/code\u003e metadata field is optional instead of required (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1380\"\u003e#1380\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/be9005412fea06bea917c8b6861546b7e6c62a1e\"\u003ebe90054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e77ba05d\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/googleapis/python-pubsub/blob/main/CHANGELOG.md\"\u003egoogle-cloud-pubsub's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.1...v2.30.0\"\u003e2.30.0\u003c/a\u003e (2025-06-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003ec046ca2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.29.1\"\u003e2.29.1\u003c/a\u003e (2025-05-23)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e60639c4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esample:\u003c/strong\u003e Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e4d072e0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate documentation for JavaScriptUDF to indicate that the \u003ccode\u003emessage_id\u003c/code\u003e metadata field is optional instead of required (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1380\"\u003e#1380\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/be9005412fea06bea917c8b6861546b7e6c62a1e\"\u003ebe90054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e77ba05d\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/googleapis/python-pubsub/commit/a5f0a2f7941387f34b5684678cf03e7a71f5ca97\"\u003e\u003ccode\u003ea5f0a2f\u003c/code\u003e\u003c/a\u003e chore(main): release 2.30.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1418\"\u003e#1418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c046ca22e9bddff6b50f7670bf6b9b9470bf78e8\"\u003e\u003ccode\u003ec046ca2\u003c/code\u003e\u003c/a\u003e feat: Add SchemaViolationReason to IngestionFailureEvent (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1411\"\u003e#1411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/42d32de6d6f9e765a97c1ff8a1f9bffbbfc741b0\"\u003e\u003ccode\u003e42d32de\u003c/code\u003e\u003c/a\u003e chore(main): release 2.29.1 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1381\"\u003e#1381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/2a00b13269b352795cd3a14049202a82fe9fe43a\"\u003e\u003ccode\u003e2a00b13\u003c/code\u003e\u003c/a\u003e chore(deps): update all dependencies (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1412\"\u003e#1412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/c7ee6134e49122beb21158b2f3f261d7bc00887d\"\u003e\u003ccode\u003ec7ee613\u003c/code\u003e\u003c/a\u003e chore: change assignees for issues and PRs to abbrowne126 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1410\"\u003e#1410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/60639c4928105ae8a72c8e37b1f48f75cc2ffcc3\"\u003e\u003ccode\u003e60639c4\u003c/code\u003e\u003c/a\u003e fix: remove setup.cfg configuration for creating universal wheels (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1376\"\u003e#1376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/a51d8f64b94c327f2bd47343038dc51ee5a1d8b3\"\u003e\u003ccode\u003ea51d8f6\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.25.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1385\"\u003e#1385\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/77ba05d4ba5b84a25c1a07c5397bbc184fa6041d\"\u003e\u003ccode\u003e77ba05d\u003c/code\u003e\u003c/a\u003e docs: update readme links (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1409\"\u003e#1409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/4d072e088b59f692dc3d59c3197a2993c125917e\"\u003e\u003ccode\u003e4d072e0\u003c/code\u003e\u003c/a\u003e docs(sample): Add samples for topic and subscription SMTs (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1386\"\u003e#1386\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-pubsub/commit/da0e6d0dd871244f1572c7307e6c9729dfcb62bb\"\u003e\u003ccode\u003eda0e6d0\u003c/code\u003e\u003c/a\u003e chore(python): remove noxfile.py from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-pubsub/issues/1383\"\u003e#1383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-pubsub/compare/v2.29.0...v2.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-tasks` from 2.19.2 to 2.19.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-tasks's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-tasks: v2.19.3\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-tasks-v2.19.2...google-cloud-tasks-v2.19.3\"\u003e2.19.3\u003c/a\u003e (2025-06-11)\u003c/h2\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate import statement example in README (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/0131a33582f84d9be5ecb1c0ef8b56aa3d9e9cf0\"\u003e0131a33\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/googleapis/google-cloud-python/commit/924638b658a20519fe445bc1e2b8406740762831\"\u003e\u003ccode\u003e924638b\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13991\"\u003e#13991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c522070c02d2120de8772ddcd7de6e40ef64c548\"\u003e\u003ccode\u003ec522070\u003c/code\u003e\u003c/a\u003e docs: [google-cloud-speech] updated description of sample_rate_hertz (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13998\"\u003e#13998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/a1bafd9192f6c3cc9520aa8680db0588b202ad3a\"\u003e\u003ccode\u003ea1bafd9\u003c/code\u003e\u003c/a\u003e feat: add initial files for google.shopping.merchant.productstudio.v1alpha (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/50562c3054b1e4b3388bc1f62335be895f76d689\"\u003e\u003ccode\u003e50562c3\u003c/code\u003e\u003c/a\u003e feat: add initial files for google.cloud.configdelivery.v1alpha (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13984\"\u003e#13984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/78428ff7406d808f7ac06a9726190b732d72b5a7\"\u003e\u003ccode\u003e78428ff\u003c/code\u003e\u003c/a\u003e feat: Added support for hierarchical enrollment in Quota Adjuster consumer AP...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/5e57d1c40d7edb932aa6192c2d41787856c6fe3b\"\u003e\u003ccode\u003e5e57d1c\u003c/code\u003e\u003c/a\u003e feat: Added support for DELTA, ICEBERG, PIG components (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13982\"\u003e#13982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/3d6ac66d3fb77149616f6167c89ebc5ac9ed5d15\"\u003e\u003ccode\u003e3d6ac66\u003c/code\u003e\u003c/a\u003e feat: [google-cloud-alloydb] Instance.ActivationPolicy field (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13980\"\u003e#13980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/ae1c8aedd601e8a55dec41672fc2741a804d33bd\"\u003e\u003ccode\u003eae1c8ae\u003c/code\u003e\u003c/a\u003e feat: add initial files for google.shopping.merchant.issueresolution.v1beta (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/33b6ee5b6aeed9b99f39f28d2048298b89c73fb6\"\u003e\u003ccode\u003e33b6ee5\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/13978\"\u003e#13978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/808364041835ed14e55839cfb33325c9d1cb1f15\"\u003e\u003ccode\u003e8083640\u003c/code\u003e\u003c/a\u003e feat: [google-cloud-compute] Update Compute Engine v1 API to revision 2025060...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-tasks-v2.19.2...google-cloud-tasks-v2.19.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 24.11.1 to 25.5.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/cf4e8c522995ed8c09f2fa2a3595c4c299ba7d8c\"\u003e\u003ccode\u003ecf4e8c5\u003c/code\u003e\u003c/a\u003e Preparing release 25.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/c16b97f7532e4ca00e0c07d88d049b37aea4ab44\"\u003e\u003ccode\u003ec16b97f\u003c/code\u003e\u003c/a\u003e Correct 3.14 change note.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/37881fa690e0fae43c1cfc8008a9eb85ea04ae3f\"\u003e\u003ccode\u003e37881fa\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2110\"\u003e#2110\u003c/a\u003e from gevent/python3.14b1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/8c6f8ebafdc241ae2966b561b2508506a6b92a1c\"\u003e\u003ccode\u003e8c6f8eb\u003c/code\u003e\u003c/a\u003e Update for changes from 3.14a7 to 3.14b1; add a bunch more standard library t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/580975cc5e37232fe8df77eb1f2ac60a6eb01c0d\"\u003e\u003ccode\u003e580975c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2109\"\u003e#2109\u003c/a\u003e from gevent/libuv-1.51\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/8097be376480ddc64f19ad8baf7e00d1842201f3\"\u003e\u003ccode\u003e8097be3\u003c/code\u003e\u003c/a\u003e Update to libuv 1.51; fixes \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2108\"\u003e#2108\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/5b229a42c3fe819f594f224d841060623b296e15\"\u003e\u003ccode\u003e5b229a4\u003c/code\u003e\u003c/a\u003e Back to development: 25.4.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/df6c474a91ed70de677723747ae82a75e1c4ed3e\"\u003e\u003ccode\u003edf6c474\u003c/code\u003e\u003c/a\u003e Preparing release 25.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/926b0d3c2ed09bfa994689419dd75723d3bc6b00\"\u003e\u003ccode\u003e926b0d3\u003c/code\u003e\u003c/a\u003e CHANGES: Improve warning about using undocumented, untested internal implemen...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/c75f2c15aa9d70ecd5c74a5fed697ad35cc544f0\"\u003e\u003ccode\u003ec75f2c1\u003c/code\u003e\u003c/a\u003e queue.py: Make a comment readable by Sphinx as originally intended.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/24.11.1...25.5.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/ONSdigital/eq-questionnaire-runner/pull/1674","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Feq-questionnaire-runner/issues/1674","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1674/packages"}},{"old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","update_type":null,"path":"/sdks/python","pr_created_at":"2025-06-10T08:26:18.000Z","version_change":"\u003c2,\u003e=1.8.0 → \u003e=1.8.0,\u003c3","issue":{"uuid":"2580490408","node_id":"PR_kwDOCQX6NM6Zzyio","number":521,"state":"closed","title":"Update google-cloud-datastore requirement from \u003c2,\u003e=1.8.0 to \u003e=1.8.0,\u003c3 in /sdks/python","user":"dependabot[bot]","labels":["dependencies","python","stale"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-08-17T13:05:57.000Z","author_association":"NONE","state_reason":null,"created_at":"2025-06-10T08:26:18.000Z","updated_at":"2025-08-17T13:05:57.000Z","time_to_close":5891979,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"google-cloud-datastore","old_version":"\u003c2,\u003e=1.8.0","new_version":"\u003e=1.8.0,\u003c3","repository_url":"https://github.com/googleapis/python-datastore"}],"path":"/sdks/python","ecosystem":"pip"},"body":"Updates the requirements on [google-cloud-datastore](https://github.com/googleapis/python-datastore) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/python-datastore/releases\"\u003egoogle-cloud-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\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/googleapis/python-datastore/blob/main/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.2...v2.21.0\"\u003e2.21.0\u003c/a\u003e (2025-04-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd REST Interceptors which support reading metadata (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for opt-in debug logging (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e7c1171b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBackwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003eed92e8e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typing issue with gRPC metadata when key ends in -bin (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e7be9c4c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.1...v2.20.2\"\u003e2.20.2\u003c/a\u003e (2024-12-12)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve list meanings (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/575\"\u003e#575\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/266243ba360a9d41ab4b51c323eac44d2cfc35cb\"\u003e266243b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.20.0...v2.20.1\"\u003e2.20.1\u003c/a\u003e (2024-08-14)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow protobuf 5.x; require protobuf \u0026gt;=3.20.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/560\"\u003e#560\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ad50e3648954edf27575001be833bb5e1e598f46\"\u003ead50e36\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.19.0...v2.20.0\"\u003e2.20.0\u003c/a\u003e (2024-08-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new types ExplainOptions, ExplainMetrics, PlanSummary, ExecutionStats (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/521\"\u003e#521\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/dfbee2db800a3ca99e65a5d386ea907db1c46598\"\u003edfbee2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd new_transaction support (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/499\"\u003e#499\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/43855dd1762f51771bb1a3924c6a234641950fb6\"\u003e43855dd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement query profiling (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/542\"\u003e#542\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/1500f7007f251256ce2923e1168439d40d41cc4d\"\u003e1500f70\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNew PropertyMask field which allows partial commits, lookups, and query results (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7fd218b2afc0282d8fea21992e8d10c5eec72ac7\"\u003e7fd218b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetry and timeout values do not propagate in requests during pagination (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/555\"\u003e#555\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/5e773cb8c766303fef53965dd100b3c4c93b98be\"\u003e5e773cb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUsing end_cursor instead of skipped_cursor in Iterator to fix rare bug. (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/552\"\u003e#552\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/python-datastore/commit/4982f9a6cbbe2de449535295a363a2dd49538c86\"\u003e4982f9a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/compare/v2.18.0...v2.19.0\"\u003e2.19.0\u003c/a\u003e (2023-12-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\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/googleapis/python-datastore/commit/1dafc68d897ec771fc3921124e1619c4fb6b34bf\"\u003e\u003ccode\u003e1dafc68\u003c/code\u003e\u003c/a\u003e chore(main): release 2.21.0 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/595\"\u003e#595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/d3919110b49e7389ad3f4e8bbb55b104417457fa\"\u003e\u003ccode\u003ed391911\u003c/code\u003e\u003c/a\u003e chore(python): remove CONTRIBUTING.rst from templates (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/16b9c737abfda1f98a871b4080528ac8f61f9abc\"\u003e\u003ccode\u003e16b9c73\u003c/code\u003e\u003c/a\u003e chore(python): fix incorrect import statement in README (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/ed92e8e54a9e0f44302efee89a30a322d0a73636\"\u003e\u003ccode\u003eed92e8e\u003c/code\u003e\u003c/a\u003e fix: backwards-compatibility for previous meaning format (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/603\"\u003e#603\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/a7df08060de6d729ef125efa12126dc32ea85006\"\u003e\u003ccode\u003ea7df080\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to 1.23.6 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/602\"\u003e#602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7c1171bf657f7cf4d1404e19611f6c874a8998ca\"\u003e\u003ccode\u003e7c1171b\u003c/code\u003e\u003c/a\u003e fix: Allow protobuf 6.x (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/598\"\u003e#598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/7be9c4c594af2c2414e394b8bfe62574b58ef337\"\u003e\u003ccode\u003e7be9c4c\u003c/code\u003e\u003c/a\u003e chore: Update gapic-generator-python to v1.23.2 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/569\"\u003e#569\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/9f83d17c132168118a2e169c975662d76540d6ff\"\u003e\u003ccode\u003e9f83d17\u003c/code\u003e\u003c/a\u003e chore(python): conditionally load credentials in .kokoro/build.sh (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/14a0f96c8f7c558a38fec4ef92c0810ea6096646\"\u003e\u003ccode\u003e14a0f96\u003c/code\u003e\u003c/a\u003e chore: update protoplus for python 3.13 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/579\"\u003e#579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/python-datastore/commit/59bf5f91110e37327e783ea425f17db7dafeb260\"\u003e\u003ccode\u003e59bf5f9\u003c/code\u003e\u003c/a\u003e chore(python): Update the python version in docs presubmit to use 3.10 (\u003ca href=\"https://redirect.github.com/googleapis/python-datastore/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/python-datastore/compare/v1.8.0...v2.21.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 merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \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/Juta/beam/pull/521","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juta%2Fbeam/issues/521","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/521/packages"}}]}